2009-09-10 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* s390-dis.c (s390_extract_operand): Remove the shift for pcrel operands. (print_insn_s390): Signextend and shift pcrel operands before printing.
This commit is contained in:
parent
2c9e3c696d
commit
7330f9c3a4
@ -1,3 +1,8 @@
|
||||
2009-09-10 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
|
||||
|
||||
* s390-dis.c (s390_extract_operand): Remove the shift for pcrel operands.
|
||||
(print_insn_s390): Signextend and shift pcrel operands before printing.
|
||||
|
||||
2009-09-09 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* i386-dis.c (vex_len_table): Change VEX_LEN_AE_R_X_M0 to
|
||||
|
@ -81,6 +81,10 @@ init_disasm (struct disassemble_info *info)
|
||||
}
|
||||
|
||||
/* Extracts an operand value from an instruction. */
|
||||
/* We do not perform the shift operation for larl-type address
|
||||
operands here since that would lead to an overflow of the 32 bit
|
||||
integer value. Instead the shift operation is done when printing
|
||||
the operand in print_insn_s390. */
|
||||
|
||||
static inline unsigned int
|
||||
s390_extract_operand (unsigned char *insn, const struct s390_operand *operand)
|
||||
@ -111,10 +115,6 @@ s390_extract_operand (unsigned char *insn, const struct s390_operand *operand)
|
||||
&& (val & (1U << (operand->bits - 1))))
|
||||
val |= (-1U << (operand->bits - 1)) << 1;
|
||||
|
||||
/* Double value if the operand is pc relative. */
|
||||
if (operand->flags & S390_OPERAND_PCREL)
|
||||
val <<= 1;
|
||||
|
||||
/* Length x in an instructions has real length x + 1. */
|
||||
if (operand->flags & S390_OPERAND_LENGTH)
|
||||
val++;
|
||||
@ -222,7 +222,8 @@ print_insn_s390 (bfd_vma memaddr, struct disassemble_info *info)
|
||||
else if (operand->flags & S390_OPERAND_CR)
|
||||
(*info->fprintf_func) (info->stream, "%%c%i", value);
|
||||
else if (operand->flags & S390_OPERAND_PCREL)
|
||||
(*info->print_address_func) (memaddr + (int) value, info);
|
||||
(*info->print_address_func) (memaddr +
|
||||
(((long long)(int)value) << 1), info);
|
||||
else if (operand->flags & S390_OPERAND_SIGNED)
|
||||
(*info->fprintf_func) (info->stream, "%i", (int) value);
|
||||
else
|
||||
|
Loading…
Reference in New Issue
Block a user