diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2006-12-14 20:13:28 +0000 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2006-12-14 20:13:28 +0000 |
commit | f5804c90c7ec45c1e5831d5f7e97ac74d61db1a6 (patch) | |
tree | 784c143f83408de4aea18d777deb6b13c3df2086 | |
parent | 6008641eec7579d885ad251aadab19132570ad4d (diff) | |
download | gdb-f5804c90c7ec45c1e5831d5f7e97ac74d61db1a6.zip gdb-f5804c90c7ec45c1e5831d5f7e97ac74d61db1a6.tar.gz gdb-f5804c90c7ec45c1e5831d5f7e97ac74d61db1a6.tar.bz2 |
gas/testsuite/
2006-12-14 H.J. Lu <hongjiu.lu@intel.com>
* gas/i386/x86-64-inval.s: Add cmpxchg16b.
* gas/i386/x86_64.s: Likewise.
* gas/i386/x86-64-inval.l: Updated.
* gas/i386/x86_64.d: Likewise.
opcodes/
2006-12-14 H.J. Lu <hongjiu.lu@intel.com>
* i386-dis.c (CMPXCHG8B_Fixup): New.
(grps): Use CMPXCHG8B_Fixup for cmpxchg8b.
-rw-r--r-- | gas/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/x86-64-inval.l | 3 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/x86-64-inval.s | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/x86_64.d | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/x86_64.s | 5 | ||||
-rw-r--r-- | opcodes/ChangeLog | 5 | ||||
-rw-r--r-- | opcodes/i386-dis.c | 17 |
7 files changed, 40 insertions, 1 deletions
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 4e8b4ff..cfd50e7 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2006-12-14 H.J. Lu <hongjiu.lu@intel.com> + + * gas/i386/x86-64-inval.s: Add cmpxchg16b. + * gas/i386/x86_64.s: Likewise. + * gas/i386/x86-64-inval.l: Updated. + * gas/i386/x86_64.d: Likewise. + 2006-12-13 H.J. Lu <hongjiu.lu@intel.com> PR gas/3712 diff --git a/gas/testsuite/gas/i386/x86-64-inval.l b/gas/testsuite/gas/i386/x86-64-inval.l index 2e45b46..2cbb867 100644 --- a/gas/testsuite/gas/i386/x86-64-inval.l +++ b/gas/testsuite/gas/i386/x86-64-inval.l @@ -49,6 +49,7 @@ .*:50: Error: .* .*:51: Error: .* .*:52: Error: .* +.*:54: Error: .* GAS LISTING .* @@ -104,3 +105,5 @@ GAS LISTING .* 50 [ ]*popfl # can't have 32-bit stack operands 51 [ ]*retl # can't have 32-bit stack operands 52 [ ]*insertq \$4,\$2,%xmm2,%ebx # The last operand must be XMM register. + 53 [ ]*.intel_syntax noprefix + 54 [ ]*cmpxchg16b dword ptr \[rax\] # Must be xmmword diff --git a/gas/testsuite/gas/i386/x86-64-inval.s b/gas/testsuite/gas/i386/x86-64-inval.s index 68f4cb5..7178ede 100644 --- a/gas/testsuite/gas/i386/x86-64-inval.s +++ b/gas/testsuite/gas/i386/x86-64-inval.s @@ -50,3 +50,5 @@ foo: jcxz foo # No prefix exists to select CX as a counter popfl # can't have 32-bit stack operands retl # can't have 32-bit stack operands insertq $4,$2,%xmm2,%ebx # The last operand must be XMM register. + .intel_syntax noprefix + cmpxchg16b dword ptr [rax] # Must be xmmword diff --git a/gas/testsuite/gas/i386/x86_64.d b/gas/testsuite/gas/i386/x86_64.d index cdd49ef..1289b45 100644 --- a/gas/testsuite/gas/i386/x86_64.d +++ b/gas/testsuite/gas/i386/x86_64.d @@ -156,4 +156,6 @@ Disassembly of section .text: 2fc: 66 89 04 25 11 22 33 ff mov[ ]+%ax,0xffffffffff332211 304: 89 04 25 11 22 33 ff mov[ ]+%eax,0xffffffffff332211 30b: 48 89 04 25 11 22 33 ff mov[ ]+%rax,0xffffffffff332211 + 313: 48 0f c7 08[ ]+cmpxchg16b \(%rax\) + 317: 48 0f c7 08[ ]+cmpxchg16b \(%rax\) #pass diff --git a/gas/testsuite/gas/i386/x86_64.s b/gas/testsuite/gas/i386/x86_64.s index 3e5532a..c89d393 100644 --- a/gas/testsuite/gas/i386/x86_64.s +++ b/gas/testsuite/gas/i386/x86_64.s @@ -188,5 +188,10 @@ movw %ax,0xffffffffff332211 movl %eax,0xffffffffff332211 movq %rax,0xffffffffff332211 +cmpxchg16b (%rax) + +.intel_syntax noprefix +cmpxchg16b xmmword ptr [rax] + # Get a good alignment. .p2align 4,0 diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 97fcec5..9bebc48 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,8 @@ +2006-12-14 H.J. Lu <hongjiu.lu@intel.com> + + * i386-dis.c (CMPXCHG8B_Fixup): New. + (grps): Use CMPXCHG8B_Fixup for cmpxchg8b. + 2006-12-11 H.J. Lu <hongjiu.lu@intel.com> * i386-dis.c (Eq): Replaced by ... diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c index 8b6f532..009d0f6 100644 --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -104,6 +104,7 @@ static void INVLPG_Fixup (int, int); static void BadOp (void); static void VMX_Fixup (int, int); static void REP_Fixup (int, int); +static void CMPXCHG8B_Fixup (int, int); struct dis_private { /* Points to first byte not fetched. */ @@ -1638,7 +1639,7 @@ static const struct dis386 grps[][8] = { /* GRP9 */ { { "(bad)", XX, XX, XX, XX }, - { "cmpxchg8b", Mq, XX, XX, XX }, + { "cmpxchg8b", CMPXCHG8B_Fixup, q_mode, XX, XX, XX }, { "(bad)", XX, XX, XX, XX }, { "(bad)", XX, XX, XX, XX }, { "(bad)", XX, XX, XX, XX }, @@ -5767,3 +5768,17 @@ REP_Fixup (int bytemode, int sizeflag) break; } } + +static void +CMPXCHG8B_Fixup (int bytemode, int sizeflag) +{ + USED_REX (REX_MODE64); + if (rex & REX_MODE64) + { + /* Change cmpxchg8b to cmpxchg16b. */ + char *p = obuf + strlen (obuf) - 2; + strcpy (p, "16b"); + bytemode = x_mode; + } + OP_M (bytemode, sizeflag); +} |