This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[PATCH, committed] Fix PR binutils/20196: Opcode regressions for e6500
- From: Peter Bergner <bergner at vnet dot ibm dot com>
- To: binutils <binutils at sourceware dot org>
- Cc: Sebastian Huber <sebastian dot huber at embedded-brains dot de>, Alan Modra <amodra at gmail dot com>
- Date: Fri, 3 Jun 2016 18:46:37 -0500
- Subject: [PATCH, committed] Fix PR binutils/20196: Opcode regressions for e6500
- Authentication-results: sourceware.org; auth=none
The following patch, which was committed over a year ago:
https://sourceware.org/ml/binutils/2015-04/msg00332.html
disabled the ISA 2.06 instructions lbarx, lharx, stbcx. and sthcx. instructions
from POWER7, since they weren't actually implemented until POWER8. However,
they were implemented in the E6500 and the patch above broke the E6500, but
we never knew because the e6500.s test case doesn't have tests for those insns.
Oops, I never added test cases for these insns to power8.s either. :-)
This patch re-adds support for those instructions to the E6500 and adds tests
in several files to make sure we don't regress in the future. Committed.
Peter
opcodes/
PR binutils/20196
* ppc-opc.c (powerpc_opcodes <lbarx, lharx, stbcx., sthcx.>): Enable
opcodes for E6500.
gas/
PR binutils/20196
* gas/testsuite/gas/ppc/e6500.s <lbarx, lharx, lwarx, ldarx,
stbcx., sthcx., stwcx., stdcx.>: Add tests.
* gas/testsuite/gas/ppc/e6500.d: Likewise.
* gas/testsuite/gas/ppc/power8.s: Likewise.
* gas/testsuite/gas/ppc/power8.d: Likewise.
* gas/testsuite/gas/ppc/power4.s <lwarx, ldarx, stwcx.,
stdcx.>: Add tests.
* gas/testsuite/gas/ppc/power4.d: Likewise.
diff --git a/opcodes/ppc-opc.c b/opcodes/ppc-opc.c
index d73bca8..a5948e5 100644
--- a/opcodes/ppc-opc.c
+++ b/opcodes/ppc-opc.c
@@ -4824,7 +4824,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{"mfvrd", X(31,51)|1, XX1RB_MASK|1, PPCVSX2, PPCNONE, {RA, VS}},
{"eratilx", X(31,51), X_MASK, PPCA2, PPCNONE, {ERAT_T, RA, RB}},
-{"lbarx", X(31,52), XEH_MASK, POWER8|PPCVLE, PPCNONE, {RT, RA0, RB, EH}},
+{"lbarx", X(31,52), XEH_MASK, POWER8|E6500|PPCVLE, PPCNONE, {RT, RA0, RB, EH}},
{"ldux", X(31,53), X_MASK, PPC64|PPCVLE, PPCNONE, {RT, RAL, RB}},
@@ -4904,7 +4904,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{"mfvrwz", X(31,115)|1, XX1RB_MASK|1, PPCVSX2, PPCNONE, {RA, VS}},
{"mfvsrwz", X(31,115), XX1RB_MASK, PPCVSX2, PPCNONE, {RA, XS6}},
-{"lharx", X(31,116), XEH_MASK, POWER8|PPCVLE, PPCNONE, {RT, RA0, RB, EH}},
+{"lharx", X(31,116), XEH_MASK, POWER8|E6500|PPCVLE, PPCNONE, {RT, RA0, RB, EH}},
{"clf", X(31,118), XTO_MASK, POWER, PPCNONE, {RA, RB}},
@@ -5954,7 +5954,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{"tendall.", XRC(31,686,1)|(1<<25), XRTRARB_MASK, PPCHTM, PPCNONE, {0}},
{"tend.", XRC(31,686,1), XRTARARB_MASK, PPCHTM, PPCNONE, {HTM_A}},
-{"stbcx.", XRC(31,694,1), X_MASK, POWER8, PPCNONE, {RS, RA0, RB}},
+{"stbcx.", XRC(31,694,1), X_MASK, POWER8|E6500, PPCNONE, {RS, RA0, RB}},
{"stfsux", X(31,695), X_MASK, COM, PPCEFS, {FRS, RAS, RB}},
@@ -5986,7 +5986,7 @@ const struct powerpc_opcode powerpc_opcodes[] = {
{"stswi", X(31,725), X_MASK, PPCCOM|PPCVLE, E500|E500MC, {RS, RA0, NB}},
{"stsi", X(31,725), X_MASK, PWRCOM, PPCNONE, {RS, RA0, NB}},
-{"sthcx.", XRC(31,726,1), X_MASK, POWER8, PPCNONE, {RS, RA0, RB}},
+{"sthcx.", XRC(31,726,1), X_MASK, POWER8|E6500, PPCNONE, {RS, RA0, RB}},
{"stfdx", X(31,727), X_MASK, COM, PPCEFS, {FRS, RA0, RB}},
diff --git a/gas/testsuite/gas/ppc/e6500.d b/gas/testsuite/gas/ppc/e6500.d
index c8d8f57..3ed94dc 100644
--- a/gas/testsuite/gas/ppc/e6500.d
+++ b/gas/testsuite/gas/ppc/e6500.d
@@ -73,3 +73,20 @@ Disassembly of section \.text:
fc: (7c 43 09 8d|8d 09 43 7c) icblq. 2,r3,r1
100: (7c 10 02 dc|dc 02 10 7c) mftmr r0,16
104: (7c 10 03 dc|dc 03 10 7c) mttmr 16,r0
+.*: (7e 80 38 68|68 38 80 7e) lbarx r20,0,r7
+.*: (7e 81 38 68|68 38 81 7e) lbarx r20,r1,r7
+.*: (7e a0 40 e8|e8 40 a0 7e) lharx r21,0,r8
+.*: (7e a1 40 e8|e8 40 a1 7e) lharx r21,r1,r8
+.*: (7e c0 48 28|28 48 c0 7e) lwarx r22,0,r9
+.*: (7e c1 48 28|28 48 c1 7e) lwarx r22,r1,r9
+.*: (7e e0 50 a8|a8 50 e0 7e) ldarx r23,0,r10
+.*: (7e e1 50 a8|a8 50 e1 7e) ldarx r23,r1,r10
+.*: (7d 40 3d 6d|6d 3d 40 7d) stbcx\. r10,0,r7
+.*: (7d 41 3d 6d|6d 3d 41 7d) stbcx\. r10,r1,r7
+.*: (7d 60 45 ad|ad 45 60 7d) sthcx\. r11,0,r8
+.*: (7d 61 45 ad|ad 45 61 7d) sthcx\. r11,r1,r8
+.*: (7d 80 49 2d|2d 49 80 7d) stwcx\. r12,0,r9
+.*: (7d 81 49 2d|2d 49 81 7d) stwcx\. r12,r1,r9
+.*: (7d a0 51 ad|ad 51 a0 7d) stdcx\. r13,0,r10
+.*: (7d a1 51 ad|ad 51 a1 7d) stdcx\. r13,r1,r10
+#pass
diff --git a/gas/testsuite/gas/ppc/e6500.s b/gas/testsuite/gas/ppc/e6500.s
index 2167cc6..d4b7f84 100644
--- a/gas/testsuite/gas/ppc/e6500.s
+++ b/gas/testsuite/gas/ppc/e6500.s
@@ -67,3 +67,19 @@ start:
icblq. 2,3,1
mftmr 0,16
mttmr 16,0
+ lbarx 20,0,7
+ lbarx 20,1,7
+ lharx 21,0,8
+ lharx 21,1,8
+ lwarx 22,0,9
+ lwarx 22,1,9
+ ldarx 23,0,10
+ ldarx 23,1,10
+ stbcx. 10,0,7
+ stbcx. 10,1,7
+ sthcx. 11,0,8
+ sthcx. 11,1,8
+ stwcx. 12,0,9
+ stwcx. 12,1,9
+ stdcx. 13,0,10
+ stdcx. 13,1,10
diff --git a/gas/testsuite/gas/ppc/power4.d b/gas/testsuite/gas/ppc/power4.d
index 8a09c05..cb487a7 100644
--- a/gas/testsuite/gas/ppc/power4.d
+++ b/gas/testsuite/gas/ppc/power4.d
@@ -10,7 +10,7 @@ start address 0x0+
Sections:
Idx Name +Size +VMA +LMA +File off +Algn
- +0 \.text +0+e8 +0+ +0+ +.*
+ +0 \.text +0+108 +0+ +0+ +.*
+CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
+1 \.data +0+20 +0+ +0+ +.*
+CONTENTS, ALLOC, LOAD, DATA
@@ -106,3 +106,12 @@ Disassembly of section \.text:
.*: (7c 20 04 ac|ac 04 20 7c) lwsync
.*: (7c 40 04 ac|ac 04 40 7c) ptesync
.*: (7c 40 04 ac|ac 04 40 7c) ptesync
+.*: (7e 80 30 28|28 30 80 7e) lwarx r20,0,r6
+.*: (7e 81 30 28|28 30 81 7e) lwarx r20,r1,r6
+.*: (7e a0 38 a8|a8 38 a0 7e) ldarx r21,0,r7
+.*: (7e a1 38 a8|a8 38 a1 7e) ldarx r21,r1,r7
+.*: (7e c0 41 2d|2d 41 c0 7e) stwcx\. r22,0,r8
+.*: (7e c1 41 2d|2d 41 c1 7e) stwcx\. r22,r1,r8
+.*: (7e e0 49 ad|ad 49 e0 7e) stdcx\. r23,0,r9
+.*: (7e e1 49 ad|ad 49 e1 7e) stdcx\. r23,r1,r9
+#pass
diff --git a/gas/testsuite/gas/ppc/power4.s b/gas/testsuite/gas/ppc/power4.s
index 583284c..b2ede93 100644
--- a/gas/testsuite/gas/ppc/power4.s
+++ b/gas/testsuite/gas/ppc/power4.s
@@ -79,6 +79,14 @@ dsym1:
sync 1
ptesync
sync 2
+ lwarx 20,0,6
+ lwarx 20,1,6
+ ldarx 21,0,7
+ ldarx 21,1,7
+ stwcx. 22,0,8
+ stwcx. 22,1,8
+ stdcx. 23,0,9
+ stdcx. 23,1,9
.section ".data"
usym0: .llong 0xcafebabe
diff --git a/gas/testsuite/gas/ppc/power8.d b/gas/testsuite/gas/ppc/power8.d
index aaa64c8..5c97ab9 100644
--- a/gas/testsuite/gas/ppc/power8.d
+++ b/gas/testsuite/gas/ppc/power8.d
@@ -160,4 +160,36 @@ Disassembly of section \.text:
.*: (7d 20 3f 99|99 3f 20 7d) stxvd2x vs41,0,r7
.*: (7d 75 47 98|98 47 75 7d) stxvd2x vs11,r21,r8
.*: (7d 75 47 98|98 47 75 7d) stxvd2x vs11,r21,r8
+.*: (7e 80 38 68|68 38 80 7e) lbarx r20,0,r7
+.*: (7e 80 38 68|68 38 80 7e) lbarx r20,0,r7
+.*: (7e 80 38 69|69 38 80 7e) lbarx r20,0,r7,1
+.*: (7e 81 38 68|68 38 81 7e) lbarx r20,r1,r7
+.*: (7e 81 38 68|68 38 81 7e) lbarx r20,r1,r7
+.*: (7e 81 38 69|69 38 81 7e) lbarx r20,r1,r7,1
+.*: (7e a0 40 a8|a8 40 a0 7e) ldarx r21,0,r8
+.*: (7e a0 40 a8|a8 40 a0 7e) ldarx r21,0,r8
+.*: (7e a0 40 a9|a9 40 a0 7e) ldarx r21,0,r8,1
+.*: (7e a1 40 a8|a8 40 a1 7e) ldarx r21,r1,r8
+.*: (7e a1 40 a8|a8 40 a1 7e) ldarx r21,r1,r8
+.*: (7e a1 40 a9|a9 40 a1 7e) ldarx r21,r1,r8,1
+.*: (7e c0 48 e8|e8 48 c0 7e) lharx r22,0,r9
+.*: (7e c0 48 e8|e8 48 c0 7e) lharx r22,0,r9
+.*: (7e c0 48 e9|e9 48 c0 7e) lharx r22,0,r9,1
+.*: (7e c1 48 e8|e8 48 c1 7e) lharx r22,r1,r9
+.*: (7e c1 48 e8|e8 48 c1 7e) lharx r22,r1,r9
+.*: (7e c1 48 e9|e9 48 c1 7e) lharx r22,r1,r9,1
+.*: (7e e0 50 28|28 50 e0 7e) lwarx r23,0,r10
+.*: (7e e0 50 28|28 50 e0 7e) lwarx r23,0,r10
+.*: (7e e0 50 29|29 50 e0 7e) lwarx r23,0,r10,1
+.*: (7e e1 50 28|28 50 e1 7e) lwarx r23,r1,r10
+.*: (7e e1 50 28|28 50 e1 7e) lwarx r23,r1,r10
+.*: (7e e1 50 29|29 50 e1 7e) lwarx r23,r1,r10,1
+.*: (7d 40 3d 6d|6d 3d 40 7d) stbcx\. r10,0,r7
+.*: (7d 41 3d 6d|6d 3d 41 7d) stbcx\. r10,r1,r7
+.*: (7d 60 45 ad|ad 45 60 7d) sthcx\. r11,0,r8
+.*: (7d 61 45 ad|ad 45 61 7d) sthcx\. r11,r1,r8
+.*: (7d 80 49 2d|2d 49 80 7d) stwcx\. r12,0,r9
+.*: (7d 81 49 2d|2d 49 81 7d) stwcx\. r12,r1,r9
+.*: (7d a0 51 ad|ad 51 a0 7d) stdcx\. r13,0,r10
+.*: (7d a1 51 ad|ad 51 a1 7d) stdcx\. r13,r1,r10
#pass
diff --git a/gas/testsuite/gas/ppc/power8.s b/gas/testsuite/gas/ppc/power8.s
index 0b350eb..728caae 100644
--- a/gas/testsuite/gas/ppc/power8.s
+++ b/gas/testsuite/gas/ppc/power8.s
@@ -152,3 +152,35 @@ power8:
stxvd2x 41,0,7
stxvx 11,21,8
stxvd2x 11,21,8
+ lbarx 20,0,7
+ lbarx 20,0,7,0
+ lbarx 20,0,7,1
+ lbarx 20,1,7
+ lbarx 20,1,7,0
+ lbarx 20,1,7,1
+ ldarx 21,0,8
+ ldarx 21,0,8,0
+ ldarx 21,0,8,1
+ ldarx 21,1,8
+ ldarx 21,1,8,0
+ ldarx 21,1,8,1
+ lharx 22,0,9
+ lharx 22,0,9,0
+ lharx 22,0,9,1
+ lharx 22,1,9
+ lharx 22,1,9,0
+ lharx 22,1,9,1
+ lwarx 23,0,10
+ lwarx 23,0,10,0
+ lwarx 23,0,10,1
+ lwarx 23,1,10
+ lwarx 23,1,10,0
+ lwarx 23,1,10,1
+ stbcx. 10,0,7
+ stbcx. 10,1,7
+ sthcx. 11,0,8
+ sthcx. 11,1,8
+ stwcx. 12,0,9
+ stwcx. 12,1,9
+ stdcx. 13,0,10
+ stdcx. 13,1,10