From 97b3f39201efc9029a9a27d65f13674964c51503 Mon Sep 17 00:00:00 2001 From: "Francois H. Theron" Date: Tue, 13 Nov 2018 12:33:16 +0200 Subject: [PATCH] opcodes/nfp: Fix disassembly of crc[] with swapped operands. The decoding of the CRC operation in alu instructions was using bits from the instruction word directly, instead of srcA which would be different if the swap bit was set. Signed-off-by: Francois H. Theron --- binutils/ChangeLog | 5 +++ binutils/testsuite/binutils-all/nfp/test1.d | 32 +++++++++++++++--- .../binutils-all/nfp/test1_nfp6000.nffw | Bin 9880 -> 10128 bytes opcodes/ChangeLog | 4 +++ opcodes/nfp-dis.c | 12 +++---- 5 files changed, 43 insertions(+), 10 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 873c3dd9fa..0d980b7d18 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,8 @@ +2018-11-13 Francois H. Theron + + * testsuite/binutils-all/nfp/test1.d: Test for swapped operand crc[]. + + 2018-11-09 Hafiz Abid Qadeer * configure: Regenerate. diff --git a/binutils/testsuite/binutils-all/nfp/test1.d b/binutils/testsuite/binutils-all/nfp/test1.d index 3915ed1357..d52d6f48e0 100644 --- a/binutils/testsuite/binutils-all/nfp/test1.d +++ b/binutils/testsuite/binutils-all/nfp/test1.d @@ -484,8 +484,20 @@ Disassembly of section \.text\.i32\.me0: ee0: 000000f0000c0300 \.476 nop ee8: 000000f0000c0300 \.477 nop ef0: 000000f0000c0300 \.478 nop - ef8: 000220e000020000 \.479 ctx_arb\[bpt\] - f00: 000420e000010000 \.480 ctx_arb\[kill\] + ef8: 000060a900301340 \.479 crc_be\[crc_ccitt, gprA_3, gprB_4\] + f00: 000000f0000c0300 \.480 nop + f08: 000e20b9403d0004 \.481 crc_be\[crc_ccitt, gprB_3, gprA_4\] + f10: 000000f0000c0300 \.482 nop + f18: 000400a900301348 \.483 crc_le\[crc_ccitt, gprA_3, gprB_4\] + f20: 000000f0000c0300 \.484 nop + f28: 000400b9403d2004 \.485 crc_le\[crc_ccitt, gprB_3, gprA_4\] + f30: 000000f0000c0300 \.486 nop + f38: 0002e0b900301348 \.487 crc_le\[crc_ccitt, gprB_3, gprB_4\] + f40: 000000f0000c0300 \.488 nop + f48: 0002e0a9403d2004 \.489 crc_le\[crc_ccitt, gprA_3, gprA_4\] + f50: 000000f0000c0300 \.490 nop + f58: 000220e000020000 \.491 ctx_arb\[bpt\] + f60: 000420e000010000 \.492 ctx_arb\[kill\] Disassembly of section \.text\.i33\.me9: @@ -969,5 +981,17 @@ Disassembly of section \.text\.i33\.me9: ee0: 000000f0000c0300 \.476 nop ee8: 000000f0000c0300 \.477 nop ef0: 000000f0000c0300 \.478 nop - ef8: 000220e000020000 \.479 ctx_arb\[bpt\] - f00: 000420e000010000 \.480 ctx_arb\[kill\] + ef8: 000060a900301340 \.479 crc_be\[crc_ccitt, gprA_3, gprB_4\] + f00: 000000f0000c0300 \.480 nop + f08: 000e20b9403d0004 \.481 crc_be\[crc_ccitt, gprB_3, gprA_4\] + f10: 000000f0000c0300 \.482 nop + f18: 000400a900301348 \.483 crc_le\[crc_ccitt, gprA_3, gprB_4\] + f20: 000000f0000c0300 \.484 nop + f28: 000400b9403d2004 \.485 crc_le\[crc_ccitt, gprB_3, gprA_4\] + f30: 000000f0000c0300 \.486 nop + f38: 0002e0b900301348 \.487 crc_le\[crc_ccitt, gprB_3, gprB_4\] + f40: 000000f0000c0300 \.488 nop + f48: 0002e0a9403d2004 \.489 crc_le\[crc_ccitt, gprA_3, gprA_4\] + f50: 000000f0000c0300 \.490 nop + f58: 000220e000020000 \.491 ctx_arb\[bpt\] + f60: 000420e000010000 \.492 ctx_arb\[kill\] diff --git a/binutils/testsuite/binutils-all/nfp/test1_nfp6000.nffw b/binutils/testsuite/binutils-all/nfp/test1_nfp6000.nffw index 869a6b2dd328552334645bcda9467bc2d58f014f..6978b03d6b2131a25feef64f16d55bb8fb1f2de0 100644 GIT binary patch delta 368 zcmbQ?JHda00wZI}WJN}E&Iim4V30965y6f!a}__+lz%on;H9g?4)lbn&5nP;VtmzI;FV5V20o03|VnxmkR zRGJACFgCX^)a3F@%uTgY;0jAED$dLYsx{C9LM|t;3cu3aq|_py7#GA5lh+Gv+#JE; z!58izY{0NG0VvAM!|(w}u`t*=>{Q@`^F2WFKvB570#F`_50c;cfC)u@Kf`x}0wbfrWJN}E&K1lIV8Ags5y;yh1mi7aG-ukOIQbT%9n%e^$x=*qOh1$+ zM**o5DwAh1J@Tk<1n diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 01eaa75f3f..bfdca28ca5 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,7 @@ +2018-11-13 Francois H. Theron + + * nfp-dis.c: Fix crc[] disassembly if operands are swapped. + 2018-11-12 Sudakshina Das * aarch64-opc.c (aarch64_sys_regs_dc): New entries for diff --git a/opcodes/nfp-dis.c b/opcodes/nfp-dis.c index 03139ec65e..38390a9798 100644 --- a/opcodes/nfp-dis.c +++ b/opcodes/nfp-dis.c @@ -1325,8 +1325,8 @@ nfp_me27_28_print_alu (uint64_t instr, unsigned int pred_cc, case 18: do_close_bracket = 0; dinfo->fprintf_func (dinfo->stream, "crc_%s[", - _BTST (instr, 3) ? "le" : "be"); - if (!nfp_me27_28_crc_op[_BF (instr, 7, 5)]) + _BTST (srcA, 3) ? "le" : "be"); + if (!nfp_me27_28_crc_op[_BF (srcA, 7, 5)]) { dinfo->fprintf_func (dinfo->stream, _(", , ")); err = TRUE; @@ -1334,7 +1334,7 @@ nfp_me27_28_print_alu (uint64_t instr, unsigned int pred_cc, else { dinfo->fprintf_func (dinfo->stream, "%s, ", - nfp_me27_28_crc_op[_BF (instr, 7, 5)]); + nfp_me27_28_crc_op[_BF (srcA, 7, 5)]); } /* Dest operand. */ @@ -1351,10 +1351,10 @@ nfp_me27_28_print_alu (uint64_t instr, unsigned int pred_cc, num_ctx, src_lmext, dinfo); dinfo->fprintf_func (dinfo->stream, "]"); - if (_BF (instr, 2, 0)) + if (_BF (srcA, 2, 0)) dinfo->fprintf_func (dinfo->stream, ", %s", - nfp_me27_28_crc_bytes[_BF (instr, 2, 0)]); - if (_BTST (instr, 4)) + nfp_me27_28_crc_bytes[_BF (srcA, 2, 0)]); + if (_BTST (srcA, 4)) dinfo->fprintf_func (dinfo->stream, ", bit_swap"); break;