This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Correct negs aliasing on AArch64.


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=514cd3a0f589fa48ca7bc9504c36436c0cbefcb2

commit 514cd3a0f589fa48ca7bc9504c36436c0cbefcb2
Author: Tamar Christina <tamar.christina@arm.com>
Date:   Fri Jun 22 12:27:53 2018 +0100

    Correct negs aliasing on AArch64.
    
    This patch fixes a disassembly issue with the aliases to subs with a shifted
    register.  The subs instruction with the zero register as destination is
    supposed to alias to cmp and when the first input register is the zero register
    the subs is supposed to be aliased to negs.
    
    This means that a subs with destination and first input registers the zero
    register is supposed to be a cmp.
    
    This is done by raising the priority of the cmp alias.
    
    opcodes/
    
    	* aarch64-tbl.h (aarch64_opcode_table): Fix alias flag for negs
    	* aarch64-asm-2.c: Regenerate.
    	* aarch64-dis-2.c: Likewise.
    
    gas/
    
    	* testsuite/gas/aarch64/addsub.s: Add negs to zero reg test.
    	* testsuite/gas/aarch64/addsub.d: Likewise.

Diff:
---
 gas/ChangeLog                      |   5 ++
 gas/testsuite/gas/aarch64/addsub.d | 159 +++++++++++++++++++++++++++++++++++++
 gas/testsuite/gas/aarch64/addsub.s |  16 ++++
 opcodes/ChangeLog                  |   6 ++
 opcodes/aarch64-asm-2.c            |   2 +-
 opcodes/aarch64-dis-2.c            |   6 +-
 opcodes/aarch64-tbl.h              |   2 +-
 7 files changed, 191 insertions(+), 5 deletions(-)

diff --git a/gas/ChangeLog b/gas/ChangeLog
index 6ec557d..bf3efdd 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,8 @@
+2018-06-22  Tamar Christina  <tamar.christina@arm.com>
+
+	* testsuite/gas/aarch64/addsub.s: Add negs to zero reg test.
+	* testsuite/gas/aarch64/addsub.d: Likewise.
+
 2018-06-21  Alan Modra  <amodra@gmail.com>
 
 	* doc/Makefile.am (AUTOMAKE_OPTIONS): Add "foreign".
diff --git a/gas/testsuite/gas/aarch64/addsub.d b/gas/testsuite/gas/aarch64/addsub.d
index 3d25d10..4611220 100644
--- a/gas/testsuite/gas/aarch64/addsub.d
+++ b/gas/testsuite/gas/aarch64/addsub.d
@@ -2369,3 +2369,162 @@ Disassembly of section \.text:
     24e4:	eb8143e7 	negs	x7, x1, asr #16
     24e8:	eb817fe7 	negs	x7, x1, asr #31
     24ec:	eb81ffe7 	negs	x7, x1, asr #63
+    24f0:	6b0103ff 	cmp	wzr, w1
+    24f4:	6b0103ff 	cmp	wzr, w1
+    24f8:	6b0107ff 	cmp	wzr, w1, lsl #1
+    24fc:	6b010bff 	cmp	wzr, w1, lsl #2
+    2500:	6b010fff 	cmp	wzr, w1, lsl #3
+    2504:	6b0113ff 	cmp	wzr, w1, lsl #4
+    2508:	6b0117ff 	cmp	wzr, w1, lsl #5
+    250c:	6b0143ff 	cmp	wzr, w1, lsl #16
+    2510:	6b017fff 	cmp	wzr, w1, lsl #31
+    2514:	6b4103ff 	cmp	wzr, w1, lsr #0
+    2518:	6b4107ff 	cmp	wzr, w1, lsr #1
+    251c:	6b410bff 	cmp	wzr, w1, lsr #2
+    2520:	6b410fff 	cmp	wzr, w1, lsr #3
+    2524:	6b4113ff 	cmp	wzr, w1, lsr #4
+    2528:	6b4117ff 	cmp	wzr, w1, lsr #5
+    252c:	6b4143ff 	cmp	wzr, w1, lsr #16
+    2530:	6b417fff 	cmp	wzr, w1, lsr #31
+    2534:	6b8103ff 	cmp	wzr, w1, asr #0
+    2538:	6b8107ff 	cmp	wzr, w1, asr #1
+    253c:	6b810bff 	cmp	wzr, w1, asr #2
+    2540:	6b810fff 	cmp	wzr, w1, asr #3
+    2544:	6b8113ff 	cmp	wzr, w1, asr #4
+    2548:	6b8117ff 	cmp	wzr, w1, asr #5
+    254c:	6b8143ff 	cmp	wzr, w1, asr #16
+    2550:	6b817fff 	cmp	wzr, w1, asr #31
+    2554:	eb0103ff 	cmp	xzr, x1
+    2558:	eb0103ff 	cmp	xzr, x1
+    255c:	eb0107ff 	cmp	xzr, x1, lsl #1
+    2560:	eb010bff 	cmp	xzr, x1, lsl #2
+    2564:	eb010fff 	cmp	xzr, x1, lsl #3
+    2568:	eb0113ff 	cmp	xzr, x1, lsl #4
+    256c:	eb0117ff 	cmp	xzr, x1, lsl #5
+    2570:	eb0143ff 	cmp	xzr, x1, lsl #16
+    2574:	eb017fff 	cmp	xzr, x1, lsl #31
+    2578:	eb01ffff 	cmp	xzr, x1, lsl #63
+    257c:	eb4103ff 	cmp	xzr, x1, lsr #0
+    2580:	eb4107ff 	cmp	xzr, x1, lsr #1
+    2584:	eb410bff 	cmp	xzr, x1, lsr #2
+    2588:	eb410fff 	cmp	xzr, x1, lsr #3
+    258c:	eb4113ff 	cmp	xzr, x1, lsr #4
+    2590:	eb4117ff 	cmp	xzr, x1, lsr #5
+    2594:	eb4143ff 	cmp	xzr, x1, lsr #16
+    2598:	eb417fff 	cmp	xzr, x1, lsr #31
+    259c:	eb41ffff 	cmp	xzr, x1, lsr #63
+    25a0:	eb8103ff 	cmp	xzr, x1, asr #0
+    25a4:	eb8107ff 	cmp	xzr, x1, asr #1
+    25a8:	eb810bff 	cmp	xzr, x1, asr #2
+    25ac:	eb810fff 	cmp	xzr, x1, asr #3
+    25b0:	eb8113ff 	cmp	xzr, x1, asr #4
+    25b4:	eb8117ff 	cmp	xzr, x1, asr #5
+    25b8:	eb8143ff 	cmp	xzr, x1, asr #16
+    25bc:	eb817fff 	cmp	xzr, x1, asr #31
+    25c0:	eb81ffff 	cmp	xzr, x1, asr #63
+    25c4:	6b0103e7 	negs	w7, w1
+    25c8:	6b0103e7 	negs	w7, w1
+    25cc:	6b0107e7 	negs	w7, w1, lsl #1
+    25d0:	6b010be7 	negs	w7, w1, lsl #2
+    25d4:	6b010fe7 	negs	w7, w1, lsl #3
+    25d8:	6b0113e7 	negs	w7, w1, lsl #4
+    25dc:	6b0117e7 	negs	w7, w1, lsl #5
+    25e0:	6b0143e7 	negs	w7, w1, lsl #16
+    25e4:	6b017fe7 	negs	w7, w1, lsl #31
+    25e8:	6b4103e7 	negs	w7, w1, lsr #0
+    25ec:	6b4107e7 	negs	w7, w1, lsr #1
+    25f0:	6b410be7 	negs	w7, w1, lsr #2
+    25f4:	6b410fe7 	negs	w7, w1, lsr #3
+    25f8:	6b4113e7 	negs	w7, w1, lsr #4
+    25fc:	6b4117e7 	negs	w7, w1, lsr #5
+    2600:	6b4143e7 	negs	w7, w1, lsr #16
+    2604:	6b417fe7 	negs	w7, w1, lsr #31
+    2608:	6b8103e7 	negs	w7, w1, asr #0
+    260c:	6b8107e7 	negs	w7, w1, asr #1
+    2610:	6b810be7 	negs	w7, w1, asr #2
+    2614:	6b810fe7 	negs	w7, w1, asr #3
+    2618:	6b8113e7 	negs	w7, w1, asr #4
+    261c:	6b8117e7 	negs	w7, w1, asr #5
+    2620:	6b8143e7 	negs	w7, w1, asr #16
+    2624:	6b817fe7 	negs	w7, w1, asr #31
+    2628:	eb0103e7 	negs	x7, x1
+    262c:	eb0103e7 	negs	x7, x1
+    2630:	eb0107e7 	negs	x7, x1, lsl #1
+    2634:	eb010be7 	negs	x7, x1, lsl #2
+    2638:	eb010fe7 	negs	x7, x1, lsl #3
+    263c:	eb0113e7 	negs	x7, x1, lsl #4
+    2640:	eb0117e7 	negs	x7, x1, lsl #5
+    2644:	eb0143e7 	negs	x7, x1, lsl #16
+    2648:	eb017fe7 	negs	x7, x1, lsl #31
+    264c:	eb01ffe7 	negs	x7, x1, lsl #63
+    2650:	eb4103e7 	negs	x7, x1, lsr #0
+    2654:	eb4107e7 	negs	x7, x1, lsr #1
+    2658:	eb410be7 	negs	x7, x1, lsr #2
+    265c:	eb410fe7 	negs	x7, x1, lsr #3
+    2660:	eb4113e7 	negs	x7, x1, lsr #4
+    2664:	eb4117e7 	negs	x7, x1, lsr #5
+    2668:	eb4143e7 	negs	x7, x1, lsr #16
+    266c:	eb417fe7 	negs	x7, x1, lsr #31
+    2670:	eb41ffe7 	negs	x7, x1, lsr #63
+    2674:	eb8103e7 	negs	x7, x1, asr #0
+    2678:	eb8107e7 	negs	x7, x1, asr #1
+    267c:	eb810be7 	negs	x7, x1, asr #2
+    2680:	eb810fe7 	negs	x7, x1, asr #3
+    2684:	eb8113e7 	negs	x7, x1, asr #4
+    2688:	eb8117e7 	negs	x7, x1, asr #5
+    268c:	eb8143e7 	negs	x7, x1, asr #16
+    2690:	eb817fe7 	negs	x7, x1, asr #31
+    2694:	eb81ffe7 	negs	x7, x1, asr #63
+    2698:	6b0103f0 	negs	w16, w1
+    269c:	6b0103f0 	negs	w16, w1
+    26a0:	6b0107f0 	negs	w16, w1, lsl #1
+    26a4:	6b010bf0 	negs	w16, w1, lsl #2
+    26a8:	6b010ff0 	negs	w16, w1, lsl #3
+    26ac:	6b0113f0 	negs	w16, w1, lsl #4
+    26b0:	6b0117f0 	negs	w16, w1, lsl #5
+    26b4:	6b0143f0 	negs	w16, w1, lsl #16
+    26b8:	6b017ff0 	negs	w16, w1, lsl #31
+    26bc:	6b4103f0 	negs	w16, w1, lsr #0
+    26c0:	6b4107f0 	negs	w16, w1, lsr #1
+    26c4:	6b410bf0 	negs	w16, w1, lsr #2
+    26c8:	6b410ff0 	negs	w16, w1, lsr #3
+    26cc:	6b4113f0 	negs	w16, w1, lsr #4
+    26d0:	6b4117f0 	negs	w16, w1, lsr #5
+    26d4:	6b4143f0 	negs	w16, w1, lsr #16
+    26d8:	6b417ff0 	negs	w16, w1, lsr #31
+    26dc:	6b8103f0 	negs	w16, w1, asr #0
+    26e0:	6b8107f0 	negs	w16, w1, asr #1
+    26e4:	6b810bf0 	negs	w16, w1, asr #2
+    26e8:	6b810ff0 	negs	w16, w1, asr #3
+    26ec:	6b8113f0 	negs	w16, w1, asr #4
+    26f0:	6b8117f0 	negs	w16, w1, asr #5
+    26f4:	6b8143f0 	negs	w16, w1, asr #16
+    26f8:	6b817ff0 	negs	w16, w1, asr #31
+    26fc:	eb0103f0 	negs	x16, x1
+    2700:	eb0103f0 	negs	x16, x1
+    2704:	eb0107f0 	negs	x16, x1, lsl #1
+    2708:	eb010bf0 	negs	x16, x1, lsl #2
+    270c:	eb010ff0 	negs	x16, x1, lsl #3
+    2710:	eb0113f0 	negs	x16, x1, lsl #4
+    2714:	eb0117f0 	negs	x16, x1, lsl #5
+    2718:	eb0143f0 	negs	x16, x1, lsl #16
+    271c:	eb017ff0 	negs	x16, x1, lsl #31
+    2720:	eb01fff0 	negs	x16, x1, lsl #63
+    2724:	eb4103f0 	negs	x16, x1, lsr #0
+    2728:	eb4107f0 	negs	x16, x1, lsr #1
+    272c:	eb410bf0 	negs	x16, x1, lsr #2
+    2730:	eb410ff0 	negs	x16, x1, lsr #3
+    2734:	eb4113f0 	negs	x16, x1, lsr #4
+    2738:	eb4117f0 	negs	x16, x1, lsr #5
+    273c:	eb4143f0 	negs	x16, x1, lsr #16
+    2740:	eb417ff0 	negs	x16, x1, lsr #31
+    2744:	eb41fff0 	negs	x16, x1, lsr #63
+    2748:	eb8103f0 	negs	x16, x1, asr #0
+    274c:	eb8107f0 	negs	x16, x1, asr #1
+    2750:	eb810bf0 	negs	x16, x1, asr #2
+    2754:	eb810ff0 	negs	x16, x1, asr #3
+    2758:	eb8113f0 	negs	x16, x1, asr #4
+    275c:	eb8117f0 	negs	x16, x1, asr #5
+    2760:	eb8143f0 	negs	x16, x1, asr #16
+    2764:	eb817ff0 	negs	x16, x1, asr #31
+    2768:	eb81fff0 	negs	x16, x1, asr #63
diff --git a/gas/testsuite/gas/aarch64/addsub.s b/gas/testsuite/gas/aarch64/addsub.s
index 6eb2389..f610521 100644
--- a/gas/testsuite/gas/aarch64/addsub.s
+++ b/gas/testsuite/gas/aarch64/addsub.s
@@ -222,3 +222,19 @@ func:
 	do_shift	2, \op, W7, W
 	do_shift	2, \op, X7, X
 	.endr
+
+	/*
+	 * Check for correct aliasing
+	 */
+
+	.irp op, NEGS
+	do_shift	2, \op, WZR, W
+	do_shift	2, \op, XZR, X
+	.endr
+
+	.irp op, SUBS
+	do_shift	3, \op, W7, W
+	do_shift	3, \op, X7, X
+	do_shift	0, \op, WZR, W
+	do_shift	0, \op, XZR, X
+	.endr
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index d455a38..2c2b975 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,9 @@
+2018-06-19  Tamar Christina  <tamar.christina@arm.com>
+
+	* aarch64-tbl.h (aarch64_opcode_table): Fix alias flag for negs
+	* aarch64-asm-2.c: Regenerate.
+	* aarch64-dis-2.c: Likewise.
+
 2018-06-21  Maciej W. Rozycki  <macro@mips.com>
 
 	* mips-dis.c (print_mips_disassembler_options): Fix a typo in
diff --git a/opcodes/aarch64-asm-2.c b/opcodes/aarch64-asm-2.c
index 01bc0e1..45b0085 100644
--- a/opcodes/aarch64-asm-2.c
+++ b/opcodes/aarch64-asm-2.c
@@ -66,8 +66,8 @@ aarch64_find_real_opcode (const aarch64_opcode *opcode)
     case 22:	/* sub */
       value = 22;	/* --> sub.  */
       break;
-    case 26:	/* negs */
     case 25:	/* cmp */
+    case 26:	/* negs */
     case 24:	/* subs */
       value = 24;	/* --> subs.  */
       break;
diff --git a/opcodes/aarch64-dis-2.c b/opcodes/aarch64-dis-2.c
index cf0288f..5218297 100644
--- a/opcodes/aarch64-dis-2.c
+++ b/opcodes/aarch64-dis-2.c
@@ -19404,7 +19404,7 @@ aarch64_find_alias_opcode (const aarch64_opcode *opcode)
     case 17: value = 18; break;	/* subs --> cmp.  */
     case 20: value = 21; break;	/* adds --> cmn.  */
     case 22: value = 23; break;	/* sub --> neg.  */
-    case 24: value = 26; break;	/* subs --> negs.  */
+    case 24: value = 25; break;	/* subs --> cmp.  */
     case 150: value = 151; break;	/* umov --> mov.  */
     case 152: value = 153; break;	/* ins --> mov.  */
     case 154: value = 155; break;	/* ins --> mov.  */
@@ -19543,8 +19543,8 @@ aarch64_find_next_alias_opcode (const aarch64_opcode *opcode)
     case 18: value = 17; break;	/* cmp --> subs.  */
     case 21: value = 20; break;	/* cmn --> adds.  */
     case 23: value = 22; break;	/* neg --> sub.  */
-    case 26: value = 25; break;	/* negs --> cmp.  */
-    case 25: value = 24; break;	/* cmp --> subs.  */
+    case 25: value = 26; break;	/* cmp --> negs.  */
+    case 26: value = 24; break;	/* negs --> subs.  */
     case 151: value = 150; break;	/* mov --> umov.  */
     case 153: value = 152; break;	/* mov --> ins.  */
     case 155: value = 154; break;	/* mov --> ins.  */
diff --git a/opcodes/aarch64-tbl.h b/opcodes/aarch64-tbl.h
index 1a35b3f..08eec60 100644
--- a/opcodes/aarch64-tbl.h
+++ b/opcodes/aarch64-tbl.h
@@ -2266,7 +2266,7 @@ struct aarch64_opcode aarch64_opcode_table[] =
   CORE_INSN ("sub",  0x4b000000, 0x7f200000, addsub_shift, 0, OP3 (Rd, Rn, Rm_SFT), QL_I3SAMER, F_HAS_ALIAS | F_SF),
   CORE_INSN ("neg",  0x4b0003e0, 0x7f2003e0, addsub_shift, 0, OP2 (Rd, Rm_SFT),     QL_I2SAME,  F_ALIAS | F_SF),
   CORE_INSN ("subs", 0x6b000000, 0x7f200000, addsub_shift, 0, OP3 (Rd, Rn, Rm_SFT), QL_I3SAMER, F_HAS_ALIAS | F_SF),
-  CORE_INSN ("cmp",  0x6b00001f, 0x7f20001f, addsub_shift, 0, OP2 (Rn, Rm_SFT),     QL_I2SAME,  F_ALIAS | F_SF),
+  CORE_INSN ("cmp",  0x6b00001f, 0x7f20001f, addsub_shift, 0, OP2 (Rn, Rm_SFT),     QL_I2SAME,  F_ALIAS | F_SF | F_P1),
   CORE_INSN ("negs", 0x6b0003e0, 0x7f2003e0, addsub_shift, 0, OP2 (Rd, Rm_SFT),     QL_I2SAME,  F_ALIAS | F_SF),
   /* AdvSIMD across lanes.  */
   SIMD_INSN ("saddlv", 0x0e303800, 0xbf3ffc00, asimdall, 0, OP2 (Fd, Vn), QL_XLANES_L,    F_SIZEQ),


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]