diff options
author | Alexandre Oliva <aoliva@redhat.com> | 2017-09-22 17:00:33 -0300 |
---|---|---|
committer | Alexandre Oliva <aoliva@redhat.com> | 2017-09-22 17:00:33 -0300 |
commit | 9e0703de64a6dd4deae2ebd569955f14337f2710 (patch) | |
tree | cec45139f1febef6441deabae142c3fb3f2c61f3 /opcodes/ft32-dis.c | |
parent | 13b9f79a1904081d984a64037af6457c1e3ff7b6 (diff) | |
parent | 43573013c9836f2b91b74b9b29dac35fdb41e06b (diff) | |
download | gdb-9e0703de64a6dd4deae2ebd569955f14337f2710.zip gdb-9e0703de64a6dd4deae2ebd569955f14337f2710.tar.gz gdb-9e0703de64a6dd4deae2ebd569955f14337f2710.tar.bz2 |
Merge remote-tracking branch 'remotes/master' into users/aoliva/SFN
Updated local changes to binutils/testsuite/binutils-all/readelf.exp
to match the unresolved (failed to assemble) messages introduced by
Alan Modra.
Diffstat (limited to 'opcodes/ft32-dis.c')
-rw-r--r-- | opcodes/ft32-dis.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/opcodes/ft32-dis.c b/opcodes/ft32-dis.c index 0384073..93339a1 100644 --- a/opcodes/ft32-dis.c +++ b/opcodes/ft32-dis.c @@ -32,6 +32,13 @@ extern const ft32_opc_info_t ft32_opc_info[128]; static fprintf_ftype fpr; static void *stream; +static int +sign_extend(int bit, int value) +{ + int onebit = (1 << bit); + return (value & (onebit - 1)) - (value & onebit); +} + int print_insn_ft32 (bfd_vma addr, struct disassemble_info *info) { @@ -118,7 +125,7 @@ print_insn_ft32 (bfd_vma addr, struct disassemble_info *info) case FT32_FLD_RIMM: imm = (iword >> FT32_FLD_RIMM_BIT) & ((1 << FT32_FLD_RIMM_SIZ) - 1); if (imm & 0x400) - info->print_address_func ((bfd_vma) imm & 0x3ff, info); + fpr(stream, "%d", sign_extend(9, imm)); else fpr(stream, "$r%d", imm & 0x1f); break; @@ -127,7 +134,7 @@ print_insn_ft32 (bfd_vma addr, struct disassemble_info *info) break; case FT32_FLD_K20: imm = iword & ((1 << FT32_FLD_K20_SIZ) - 1); - info->print_address_func ((bfd_vma) imm, info); + fpr(stream, "%d", sign_extend(19, imm)); break; case FT32_FLD_PA: imm = (iword & ((1 << FT32_FLD_PA_SIZ) - 1)) << 2; @@ -135,17 +142,15 @@ print_insn_ft32 (bfd_vma addr, struct disassemble_info *info) break; case FT32_FLD_AA: imm = iword & ((1 << FT32_FLD_AA_SIZ) - 1); - info->print_address_func ((bfd_vma) imm, info); - break; + info->print_address_func ((1 << 23) | (bfd_vma) imm, info); break; case FT32_FLD_K16: imm = iword & ((1 << FT32_FLD_K16_SIZ) - 1); - info->print_address_func ((bfd_vma) imm, info); + fpr(stream, "%d", imm); break; case FT32_FLD_K8: imm = iword & ((1 << FT32_FLD_K8_SIZ) - 1); - info->print_address_func ((bfd_vma) imm, info); - break; + fpr(stream, "%d", sign_extend(7, imm)); break; case FT32_FLD_R_D_POST: fpr(stream, "$r%d", (iword >> FT32_FLD_R_D_BIT) & 0x1f); |