* s390-dis.c: Fix formatting.

This commit is contained in:
Kazu Hirata
2001-07-23 13:41:14 +00:00
parent ac62c3468d
commit 44f2a95d95
2 changed files with 172 additions and 146 deletions

View File

@ -1,3 +1,7 @@
2001-07-23 Kazu Hirata <kazu@hxi.com>
* s390-dis.c: Fix formatting.
2001-07-21 Chris Demetriou <cgd@broadcom.com> 2001-07-21 Chris Demetriou <cgd@broadcom.com>
* mips-opc.c (mips_builtin_opcodes): Sort c.le.s and c.lt.s * mips-opc.c (mips_builtin_opcodes): Sort c.le.s and c.lt.s

View File

@ -29,23 +29,26 @@ static int init_flag = 0;
static int opc_index[256]; static int opc_index[256];
static int current_arch_mask = 0; static int current_arch_mask = 0;
/* Set up index table for first opcode byte */ /* Set up index table for first opcode byte. */
static void static void
init_disasm(info) init_disasm (info)
struct disassemble_info *info ATTRIBUTE_UNUSED; struct disassemble_info *info ATTRIBUTE_UNUSED;
{ {
const struct s390_opcode *opcode; const struct s390_opcode *opcode;
const struct s390_opcode *opcode_end; const struct s390_opcode *opcode_end;
memset(opc_index, 0, sizeof(opc_index)); memset (opc_index, 0, sizeof (opc_index));
opcode_end = s390_opcodes + s390_num_opcodes; opcode_end = s390_opcodes + s390_num_opcodes;
for (opcode = s390_opcodes; opcode < opcode_end; opcode++) { for (opcode = s390_opcodes; opcode < opcode_end; opcode++)
{
opc_index[(int) opcode->opcode[0]] = opcode - s390_opcodes; opc_index[(int) opcode->opcode[0]] = opcode - s390_opcodes;
while ((opcode < opcode_end) && while ((opcode < opcode_end) &&
(opcode[1].opcode[0] == opcode->opcode[0])) (opcode[1].opcode[0] == opcode->opcode[0]))
opcode++; opcode++;
} }
switch (info->mach) { switch (info->mach)
{
case bfd_mach_s390_esa: case bfd_mach_s390_esa:
current_arch_mask = 1 << S390_OPCODE_ESA; current_arch_mask = 1 << S390_OPCODE_ESA;
break; break;
@ -53,7 +56,7 @@ init_disasm(info)
current_arch_mask = 1 << S390_OPCODE_ESAME; current_arch_mask = 1 << S390_OPCODE_ESAME;
break; break;
default: default:
abort(); abort ();
} }
init_flag = 1; init_flag = 1;
} }
@ -68,28 +71,30 @@ s390_extract_operand (insn, operand)
unsigned int val; unsigned int val;
int bits; int bits;
/* extract fragments of the operand byte for byte */ /* Extract fragments of the operand byte for byte. */
insn += operand->shift/8; insn += operand->shift / 8;
bits = (operand->shift & 7) + operand->bits; bits = (operand->shift & 7) + operand->bits;
val = 0; val = 0;
do { do
{
val <<= 8; val <<= 8;
val |= (unsigned int) *insn++; val |= (unsigned int) *insn++;
bits -= 8; bits -= 8;
} while (bits > 0); }
while (bits > 0);
val >>= -bits; val >>= -bits;
val &= ((1U << (operand->bits-1))<<1) - 1; val &= ((1U << (operand->bits - 1)) << 1) - 1;
/* sign extend value if the operand is signed or pc relative */ /* Sign extend value if the operand is signed or pc relative. */
if ((operand->flags & (S390_OPERAND_SIGNED|S390_OPERAND_PCREL)) && if ((operand->flags & (S390_OPERAND_SIGNED | S390_OPERAND_PCREL))
(val & (1U << (operand->bits-1)))) && (val & (1U << (operand->bits - 1))))
val |= (-1U << (operand->bits-1))<<1; val |= (-1U << (operand->bits - 1)) << 1;
/* double value if the operand is pc relative */ /* Double value if the operand is pc relative. */
if (operand->flags & S390_OPERAND_PCREL) if (operand->flags & S390_OPERAND_PCREL)
val <<= 1; val <<= 1;
/* length x in an instructions has real length x+1 */ /* Length x in an instructions has real length x+1. */
if (operand->flags & S390_OPERAND_LENGTH) if (operand->flags & S390_OPERAND_LENGTH)
val++; val++;
return val; return val;
@ -110,53 +115,59 @@ print_insn_s390 (memaddr, info)
char separator; char separator;
if (init_flag == 0) if (init_flag == 0)
init_disasm(info); init_disasm (info);
/* The output looks better if we put 6 bytes on a line. */ /* The output looks better if we put 6 bytes on a line. */
info->bytes_per_line = 6; info->bytes_per_line = 6;
/* Every S390 instruction is max 6 bytes long. */ /* Every S390 instruction is max 6 bytes long. */
memset(buffer, 0, 6); memset (buffer, 0, 6);
status = (*info->read_memory_func) (memaddr, buffer, 6, info); status = (*info->read_memory_func) (memaddr, buffer, 6, info);
if (status != 0) { if (status != 0)
{
for (bufsize = 0; bufsize < 6; bufsize++) for (bufsize = 0; bufsize < 6; bufsize++)
if ((*info->read_memory_func) (memaddr, buffer, bufsize+1, info) != 0) if ((*info->read_memory_func) (memaddr, buffer, bufsize + 1, info) != 0)
break; break;
if (bufsize <= 0) { if (bufsize <= 0)
{
(*info->memory_error_func) (status, memaddr, info); (*info->memory_error_func) (status, memaddr, info);
return -1; return -1;
} }
/* Opsize calculation looks strange but it works /* Opsize calculation looks strange but it works
00xxxxxx -> 2 bytes, 01xxxxxx/10xxxxxx -> 4 bytes, 00xxxxxx -> 2 bytes, 01xxxxxx/10xxxxxx -> 4 bytes,
11xxxxxx -> 6 bytes. */ 11xxxxxx -> 6 bytes. */
opsize = ((((buffer[0]>>6)+1)>>1)+1)<<1; opsize = ((((buffer[0] >> 6) + 1) >> 1) + 1) << 1;
status = opsize > bufsize; status = opsize > bufsize;
} else { }
else
{
bufsize = 6; bufsize = 6;
opsize = ((((buffer[0]>>6)+1)>>1)+1)<<1; opsize = ((((buffer[0] >> 6) + 1) >> 1) + 1) << 1;
} }
if (status == 0) { if (status == 0)
{
/* Find the first match in the opcode table. */ /* Find the first match in the opcode table. */
opcode_end = s390_opcodes + s390_num_opcodes; opcode_end = s390_opcodes + s390_num_opcodes;
for (opcode = s390_opcodes + opc_index[(int) buffer[0]]; for (opcode = s390_opcodes + opc_index[(int) buffer[0]];
(opcode < opcode_end) && (buffer[0] == opcode->opcode[0]); (opcode < opcode_end) && (buffer[0] == opcode->opcode[0]);
opcode++) { opcode++)
{
const struct s390_operand *operand; const struct s390_operand *operand;
const unsigned char *opindex; const unsigned char *opindex;
/* check architecture */ /* Check architecture. */
if (!(opcode->architecture & current_arch_mask)) if (!(opcode->architecture & current_arch_mask))
continue; continue;
/* check signature of the opcode */ /* Check signature of the opcode. */
if ((buffer[1] & opcode->mask[1]) != opcode->opcode[1] || if ((buffer[1] & opcode->mask[1]) != opcode->opcode[1]
(buffer[2] & opcode->mask[2]) != opcode->opcode[2] || || (buffer[2] & opcode->mask[2]) != opcode->opcode[2]
(buffer[3] & opcode->mask[3]) != opcode->opcode[3] || || (buffer[3] & opcode->mask[3]) != opcode->opcode[3]
(buffer[4] & opcode->mask[4]) != opcode->opcode[4] || || (buffer[4] & opcode->mask[4]) != opcode->opcode[4]
(buffer[5] & opcode->mask[5]) != opcode->opcode[5]) || (buffer[5] & opcode->mask[5]) != opcode->opcode[5])
continue; continue;
/* the instruction is valid */ /* The instruction is valid. */
if (opcode->operands[0] != 0) if (opcode->operands[0] != 0)
(*info->fprintf_func) (info->stream, "%s\t", opcode->name); (*info->fprintf_func) (info->stream, "%s\t", opcode->name);
else else
@ -164,16 +175,18 @@ print_insn_s390 (memaddr, info)
/* Extract the operands. */ /* Extract the operands. */
separator = 0; separator = 0;
for (opindex = opcode->operands; *opindex != 0; opindex++) { for (opindex = opcode->operands; *opindex != 0; opindex++)
{
unsigned int value; unsigned int value;
operand = s390_operands + *opindex; operand = s390_operands + *opindex;
value = s390_extract_operand(buffer, operand); value = s390_extract_operand (buffer, operand);
if ((operand->flags & S390_OPERAND_INDEX) && value == 0) if ((operand->flags & S390_OPERAND_INDEX) && value == 0)
continue; continue;
if ((operand->flags & S390_OPERAND_BASE) && if ((operand->flags & S390_OPERAND_BASE) &&
value == 0 && separator == '(') { value == 0 && separator == '(')
{
separator = ','; separator = ',';
continue; continue;
} }
@ -196,36 +209,45 @@ print_insn_s390 (memaddr, info)
else else
(*info->fprintf_func) (info->stream, "%i", value); (*info->fprintf_func) (info->stream, "%i", value);
if (operand->flags & S390_OPERAND_DISP) { if (operand->flags & S390_OPERAND_DISP)
{
separator = '('; separator = '(';
} else if (operand->flags & S390_OPERAND_BASE) { }
else if (operand->flags & S390_OPERAND_BASE)
{
(*info->fprintf_func) (info->stream, ")"); (*info->fprintf_func) (info->stream, ")");
separator = ','; separator = ',';
} else }
else
separator = ','; separator = ',';
} }
/* found instruction, printed it, return its size */ /* Found instruction, printed it, return its size. */
return opsize; return opsize;
} }
/* no matching instruction found, fall through to hex print */ /* No matching instruction found, fall through to hex print. */
} }
if (bufsize >= 4) { if (bufsize >= 4)
{
value = (unsigned int) buffer[0]; value = (unsigned int) buffer[0];
value = (value << 8) + (unsigned int) buffer[1]; value = (value << 8) + (unsigned int) buffer[1];
value = (value << 8) + (unsigned int) buffer[2]; value = (value << 8) + (unsigned int) buffer[2];
value = (value << 8) + (unsigned int) buffer[3]; value = (value << 8) + (unsigned int) buffer[3];
(*info->fprintf_func) (info->stream,".long\t0x%08x", value); (*info->fprintf_func) (info->stream, ".long\t0x%08x", value);
return 4; return 4;
} else if (bufsize >= 2) { }
else if (bufsize >= 2)
{
value = (unsigned int) buffer[0]; value = (unsigned int) buffer[0];
value = (value << 8) + (unsigned int) buffer[1]; value = (value << 8) + (unsigned int) buffer[1];
(*info->fprintf_func) (info->stream,".short\t0x%04x", value); (*info->fprintf_func) (info->stream, ".short\t0x%04x", value);
return 2; return 2;
} else { }
else
{
value = (unsigned int) buffer[0]; value = (unsigned int) buffer[0];
(*info->fprintf_func) (info->stream,".byte\t0x%02x", value); (*info->fprintf_func) (info->stream, ".byte\t0x%02x", value);
return 1; return 1;
} }
} }