Check destination operand for lockable instructions.

gas/

2009-11-13  H.J. Lu  <hongjiu.lu@intel.com>

	* config/tc-i386.c (md_assemble): Check destination operand
	for lockable instructions.

gas/testsuite/

2009-11-13  H.J. Lu  <hongjiu.lu@intel.com>

	* gas/i386/lock-1-intel.d: Updated.
	* gas/i386/lock-1.d: Likewise.
	* gas/i386/lock-1.s: Likewise.
	* gas/i386/lockbad-1.l: Likewise.
	* gas/i386/lockbad-1.s: Likewise.
	* gas/i386/x86-64-lock-1-intel.d: Likewise.
	* gas/i386/x86-64-lock-1.d: Likewise.
	* gas/i386/x86-64-lock-1.s: Likewise.
	* gas/i386/x86-64-lockbad-1.l: Likewise.
	* gas/i386/x86-64-lockbad-1.s: Likewise.
This commit is contained in:
H.J. Lu 2009-11-14 06:04:34 +00:00
parent 68a3e151da
commit c1ba026631
13 changed files with 269 additions and 156 deletions

View File

@ -1,3 +1,8 @@
2009-11-13 H.J. Lu <hongjiu.lu@intel.com>
* config/tc-i386.c (md_assemble): Check destination operand
for lockable instructions.
2009-11-13 H.J. Lu <hongjiu.lu@intel.com>
* config/tc-i386.c (_i386_insn): Don't use bit field on

View File

@ -2932,10 +2932,13 @@ md_assemble (char *line)
if (!add_prefix (FWAIT_OPCODE))
return;
/* Check for lock without a lockable instruction. */
/* Check for lock without a lockable instruction. Destination operand
must be memory unless it is xchg (0x86). */
if (i.prefix[LOCK_PREFIX]
&& (!i.tm.opcode_modifier.islockable
|| i.mem_operands == 0))
|| i.mem_operands == 0
|| (i.tm.base_opcode != 0x86
&& !operand_type_check (i.types[i.operands - 1], anymem))))
{
as_bad (_("expecting lockable instruction after `lock'"));
return;

View File

@ -1,3 +1,16 @@
2009-11-13 H.J. Lu <hongjiu.lu@intel.com>
* gas/i386/lock-1-intel.d: Updated.
* gas/i386/lock-1.d: Likewise.
* gas/i386/lock-1.s: Likewise.
* gas/i386/lockbad-1.l: Likewise.
* gas/i386/lockbad-1.s: Likewise.
* gas/i386/x86-64-lock-1-intel.d: Likewise.
* gas/i386/x86-64-lock-1.d: Likewise.
* gas/i386/x86-64-lock-1.s: Likewise.
* gas/i386/x86-64-lockbad-1.l: Likewise.
* gas/i386/x86-64-lockbad-1.s: Likewise.
2009-11-13 H.J. Lu <hongjiu.lu@intel.com>
* gas/i386/rex.s: Add a test for VEX insn.

View File

@ -8,11 +8,11 @@
Disassembly of section .text:
0+ <foo>:
[ ]*[a-f0-9]+: f0 03 03 lock add eax,DWORD PTR \[ebx\]
[ ]*[a-f0-9]+: f0 01 03 lock add DWORD PTR \[ebx\],eax
[ ]*[a-f0-9]+: f0 83 03 64 lock add DWORD PTR \[ebx\],0x64
[ ]*[a-f0-9]+: f0 13 03 lock adc eax,DWORD PTR \[ebx\]
[ ]*[a-f0-9]+: f0 11 03 lock adc DWORD PTR \[ebx\],eax
[ ]*[a-f0-9]+: f0 83 13 64 lock adc DWORD PTR \[ebx\],0x64
[ ]*[a-f0-9]+: f0 23 03 lock and eax,DWORD PTR \[ebx\]
[ ]*[a-f0-9]+: f0 21 03 lock and DWORD PTR \[ebx\],eax
[ ]*[a-f0-9]+: f0 83 23 64 lock and DWORD PTR \[ebx\],0x64
[ ]*[a-f0-9]+: f0 0f bb 03 lock btc DWORD PTR \[ebx\],eax
[ ]*[a-f0-9]+: f0 0f ba 3b 64 lock btc DWORD PTR \[ebx\],0x64
@ -26,22 +26,22 @@ Disassembly of section .text:
[ ]*[a-f0-9]+: f0 ff 03 lock inc DWORD PTR \[ebx\]
[ ]*[a-f0-9]+: f0 f7 1b lock neg DWORD PTR \[ebx\]
[ ]*[a-f0-9]+: f0 f7 13 lock not DWORD PTR \[ebx\]
[ ]*[a-f0-9]+: f0 0b 03 lock or eax,DWORD PTR \[ebx\]
[ ]*[a-f0-9]+: f0 09 03 lock or DWORD PTR \[ebx\],eax
[ ]*[a-f0-9]+: f0 83 0b 64 lock or DWORD PTR \[ebx\],0x64
[ ]*[a-f0-9]+: f0 1b 03 lock sbb eax,DWORD PTR \[ebx\]
[ ]*[a-f0-9]+: f0 19 03 lock sbb DWORD PTR \[ebx\],eax
[ ]*[a-f0-9]+: f0 83 1b 64 lock sbb DWORD PTR \[ebx\],0x64
[ ]*[a-f0-9]+: f0 2b 03 lock sub eax,DWORD PTR \[ebx\]
[ ]*[a-f0-9]+: f0 29 03 lock sub DWORD PTR \[ebx\],eax
[ ]*[a-f0-9]+: f0 83 2b 64 lock sub DWORD PTR \[ebx\],0x64
[ ]*[a-f0-9]+: f0 0f c1 03 lock xadd DWORD PTR \[ebx\],eax
[ ]*[a-f0-9]+: f0 87 03 lock xchg DWORD PTR \[ebx\],eax
[ ]*[a-f0-9]+: f0 87 03 lock xchg DWORD PTR \[ebx\],eax
[ ]*[a-f0-9]+: f0 33 03 lock xor eax,DWORD PTR \[ebx\]
[ ]*[a-f0-9]+: f0 31 03 lock xor DWORD PTR \[ebx\],eax
[ ]*[a-f0-9]+: f0 83 33 64 lock xor DWORD PTR \[ebx\],0x64
[ ]*[a-f0-9]+: f0 03 03 lock add eax,DWORD PTR \[ebx\]
[ ]*[a-f0-9]+: f0 01 03 lock add DWORD PTR \[ebx\],eax
[ ]*[a-f0-9]+: f0 83 03 64 lock add DWORD PTR \[ebx\],0x64
[ ]*[a-f0-9]+: f0 13 03 lock adc eax,DWORD PTR \[ebx\]
[ ]*[a-f0-9]+: f0 11 03 lock adc DWORD PTR \[ebx\],eax
[ ]*[a-f0-9]+: f0 83 13 64 lock adc DWORD PTR \[ebx\],0x64
[ ]*[a-f0-9]+: f0 23 03 lock and eax,DWORD PTR \[ebx\]
[ ]*[a-f0-9]+: f0 21 03 lock and DWORD PTR \[ebx\],eax
[ ]*[a-f0-9]+: f0 83 23 64 lock and DWORD PTR \[ebx\],0x64
[ ]*[a-f0-9]+: f0 0f bb 03 lock btc DWORD PTR \[ebx\],eax
[ ]*[a-f0-9]+: f0 0f ba 3b 64 lock btc DWORD PTR \[ebx\],0x64
@ -55,15 +55,15 @@ Disassembly of section .text:
[ ]*[a-f0-9]+: f0 ff 03 lock inc DWORD PTR \[ebx\]
[ ]*[a-f0-9]+: f0 f7 1b lock neg DWORD PTR \[ebx\]
[ ]*[a-f0-9]+: f0 f7 13 lock not DWORD PTR \[ebx\]
[ ]*[a-f0-9]+: f0 0b 03 lock or eax,DWORD PTR \[ebx\]
[ ]*[a-f0-9]+: f0 09 03 lock or DWORD PTR \[ebx\],eax
[ ]*[a-f0-9]+: f0 83 0b 64 lock or DWORD PTR \[ebx\],0x64
[ ]*[a-f0-9]+: f0 1b 03 lock sbb eax,DWORD PTR \[ebx\]
[ ]*[a-f0-9]+: f0 19 03 lock sbb DWORD PTR \[ebx\],eax
[ ]*[a-f0-9]+: f0 83 1b 64 lock sbb DWORD PTR \[ebx\],0x64
[ ]*[a-f0-9]+: f0 2b 03 lock sub eax,DWORD PTR \[ebx\]
[ ]*[a-f0-9]+: f0 29 03 lock sub DWORD PTR \[ebx\],eax
[ ]*[a-f0-9]+: f0 83 2b 64 lock sub DWORD PTR \[ebx\],0x64
[ ]*[a-f0-9]+: f0 0f c1 03 lock xadd DWORD PTR \[ebx\],eax
[ ]*[a-f0-9]+: f0 87 03 lock xchg DWORD PTR \[ebx\],eax
[ ]*[a-f0-9]+: f0 87 03 lock xchg DWORD PTR \[ebx\],eax
[ ]*[a-f0-9]+: f0 33 03 lock xor eax,DWORD PTR \[ebx\]
[ ]*[a-f0-9]+: f0 31 03 lock xor DWORD PTR \[ebx\],eax
[ ]*[a-f0-9]+: f0 83 33 64 lock xor DWORD PTR \[ebx\],0x64
#pass

View File

@ -7,11 +7,11 @@
Disassembly of section .text:
0+ <foo>:
[ ]*[a-f0-9]+: f0 03 03 lock add \(%ebx\),%eax
[ ]*[a-f0-9]+: f0 01 03 lock add %eax,\(%ebx\)
[ ]*[a-f0-9]+: f0 83 03 64 lock addl \$0x64,\(%ebx\)
[ ]*[a-f0-9]+: f0 13 03 lock adc \(%ebx\),%eax
[ ]*[a-f0-9]+: f0 11 03 lock adc %eax,\(%ebx\)
[ ]*[a-f0-9]+: f0 83 13 64 lock adcl \$0x64,\(%ebx\)
[ ]*[a-f0-9]+: f0 23 03 lock and \(%ebx\),%eax
[ ]*[a-f0-9]+: f0 21 03 lock and %eax,\(%ebx\)
[ ]*[a-f0-9]+: f0 83 23 64 lock andl \$0x64,\(%ebx\)
[ ]*[a-f0-9]+: f0 0f bb 03 lock btc %eax,\(%ebx\)
[ ]*[a-f0-9]+: f0 0f ba 3b 64 lock btcl \$0x64,\(%ebx\)
@ -25,22 +25,22 @@ Disassembly of section .text:
[ ]*[a-f0-9]+: f0 ff 03 lock incl \(%ebx\)
[ ]*[a-f0-9]+: f0 f7 1b lock negl \(%ebx\)
[ ]*[a-f0-9]+: f0 f7 13 lock notl \(%ebx\)
[ ]*[a-f0-9]+: f0 0b 03 lock or \(%ebx\),%eax
[ ]*[a-f0-9]+: f0 09 03 lock or %eax,\(%ebx\)
[ ]*[a-f0-9]+: f0 83 0b 64 lock orl \$0x64,\(%ebx\)
[ ]*[a-f0-9]+: f0 1b 03 lock sbb \(%ebx\),%eax
[ ]*[a-f0-9]+: f0 19 03 lock sbb %eax,\(%ebx\)
[ ]*[a-f0-9]+: f0 83 1b 64 lock sbbl \$0x64,\(%ebx\)
[ ]*[a-f0-9]+: f0 2b 03 lock sub \(%ebx\),%eax
[ ]*[a-f0-9]+: f0 29 03 lock sub %eax,\(%ebx\)
[ ]*[a-f0-9]+: f0 83 2b 64 lock subl \$0x64,\(%ebx\)
[ ]*[a-f0-9]+: f0 0f c1 03 lock xadd %eax,\(%ebx\)
[ ]*[a-f0-9]+: f0 87 03 lock xchg %eax,\(%ebx\)
[ ]*[a-f0-9]+: f0 87 03 lock xchg %eax,\(%ebx\)
[ ]*[a-f0-9]+: f0 33 03 lock xor \(%ebx\),%eax
[ ]*[a-f0-9]+: f0 31 03 lock xor %eax,\(%ebx\)
[ ]*[a-f0-9]+: f0 83 33 64 lock xorl \$0x64,\(%ebx\)
[ ]*[a-f0-9]+: f0 03 03 lock add \(%ebx\),%eax
[ ]*[a-f0-9]+: f0 01 03 lock add %eax,\(%ebx\)
[ ]*[a-f0-9]+: f0 83 03 64 lock addl \$0x64,\(%ebx\)
[ ]*[a-f0-9]+: f0 13 03 lock adc \(%ebx\),%eax
[ ]*[a-f0-9]+: f0 11 03 lock adc %eax,\(%ebx\)
[ ]*[a-f0-9]+: f0 83 13 64 lock adcl \$0x64,\(%ebx\)
[ ]*[a-f0-9]+: f0 23 03 lock and \(%ebx\),%eax
[ ]*[a-f0-9]+: f0 21 03 lock and %eax,\(%ebx\)
[ ]*[a-f0-9]+: f0 83 23 64 lock andl \$0x64,\(%ebx\)
[ ]*[a-f0-9]+: f0 0f bb 03 lock btc %eax,\(%ebx\)
[ ]*[a-f0-9]+: f0 0f ba 3b 64 lock btcl \$0x64,\(%ebx\)
@ -54,15 +54,15 @@ Disassembly of section .text:
[ ]*[a-f0-9]+: f0 ff 03 lock incl \(%ebx\)
[ ]*[a-f0-9]+: f0 f7 1b lock negl \(%ebx\)
[ ]*[a-f0-9]+: f0 f7 13 lock notl \(%ebx\)
[ ]*[a-f0-9]+: f0 0b 03 lock or \(%ebx\),%eax
[ ]*[a-f0-9]+: f0 09 03 lock or %eax,\(%ebx\)
[ ]*[a-f0-9]+: f0 83 0b 64 lock orl \$0x64,\(%ebx\)
[ ]*[a-f0-9]+: f0 1b 03 lock sbb \(%ebx\),%eax
[ ]*[a-f0-9]+: f0 19 03 lock sbb %eax,\(%ebx\)
[ ]*[a-f0-9]+: f0 83 1b 64 lock sbbl \$0x64,\(%ebx\)
[ ]*[a-f0-9]+: f0 2b 03 lock sub \(%ebx\),%eax
[ ]*[a-f0-9]+: f0 29 03 lock sub %eax,\(%ebx\)
[ ]*[a-f0-9]+: f0 83 2b 64 lock subl \$0x64,\(%ebx\)
[ ]*[a-f0-9]+: f0 0f c1 03 lock xadd %eax,\(%ebx\)
[ ]*[a-f0-9]+: f0 87 03 lock xchg %eax,\(%ebx\)
[ ]*[a-f0-9]+: f0 87 03 lock xchg %eax,\(%ebx\)
[ ]*[a-f0-9]+: f0 33 03 lock xor \(%ebx\),%eax
[ ]*[a-f0-9]+: f0 31 03 lock xor %eax,\(%ebx\)
[ ]*[a-f0-9]+: f0 83 33 64 lock xorl \$0x64,\(%ebx\)
#pass

View File

@ -2,11 +2,11 @@
.text
foo:
lock add (%ebx), %eax
lock add %eax, (%ebx)
lock add $0x64, (%ebx)
lock adc (%ebx), %eax
lock adc %eax, (%ebx)
lock adc $0x64, (%ebx)
lock and (%ebx), %eax
lock and %eax, (%ebx)
lock and $0x64, (%ebx)
lock btc %eax, (%ebx)
lock btc $0x64, (%ebx)
@ -20,24 +20,24 @@ foo:
lock incl (%ebx)
lock negl (%ebx)
lock notl (%ebx)
lock or (%ebx), %eax
lock or %eax, (%ebx)
lock or $0x64, (%ebx)
lock sbb (%ebx), %eax
lock sbb %eax, (%ebx)
lock sbb $0x64, (%ebx)
lock sub (%ebx), %eax
lock sub %eax, (%ebx)
lock sub $0x64, (%ebx)
lock xadd %eax, (%ebx)
lock xchg (%ebx), %eax
lock xchg %eax, (%ebx)
lock xor (%ebx), %eax
lock xor %eax, (%ebx)
lock xor $0x64, (%ebx)
.intel_syntax noprefix
lock add eax,DWORD PTR [ebx]
lock add DWORD PTR [ebx],eax
lock add DWORD PTR [ebx],0x64
lock adc eax,DWORD PTR [ebx]
lock adc DWORD PTR [ebx],eax
lock adc DWORD PTR [ebx],0x64
lock and eax,DWORD PTR [ebx]
lock and DWORD PTR [ebx],eax
lock and DWORD PTR [ebx],0x64
lock btc DWORD PTR [ebx],eax
lock btc DWORD PTR [ebx],0x64
@ -51,14 +51,14 @@ foo:
lock inc DWORD PTR [ebx]
lock neg DWORD PTR [ebx]
lock not DWORD PTR [ebx]
lock or eax,DWORD PTR [ebx]
lock or DWORD PTR [ebx],eax
lock or DWORD PTR [ebx],0x64
lock sbb eax,DWORD PTR [ebx]
lock sbb DWORD PTR [ebx],eax
lock sbb DWORD PTR [ebx],0x64
lock sub eax,DWORD PTR [ebx]
lock sub DWORD PTR [ebx],eax
lock sub DWORD PTR [ebx],0x64
lock xadd DWORD PTR [ebx],eax
lock xchg DWORD PTR [ebx],eax
lock xchg DWORD PTR [ebx],eax
lock xor eax,DWORD PTR [ebx]
lock xor DWORD PTR [ebx],eax
lock xor DWORD PTR [ebx],0x64

View File

@ -29,16 +29,15 @@
.*:33: Error: .*
.*:34: Error: .*
.*:35: Error: .*
.*:37: Error: .*
.*:38: Error: .*
.*:39: Error: .*
.*:40: Error: .*
.*:41: Error: .*
.*:42: Error: .*
.*:43: Error: .*
.*:44: Error: .*
.*:45: Error: .*
.*:46: Error: .*
.*:47: Error: .*
.*:48: Error: .*
.*:49: Error: .*
.*:50: Error: .*
.*:51: Error: .*
@ -59,6 +58,21 @@
.*:66: Error: .*
.*:67: Error: .*
.*:68: Error: .*
.*:69: Error: .*
.*:70: Error: .*
.*:71: Error: .*
.*:72: Error: .*
.*:73: Error: .*
.*:74: Error: .*
.*:75: Error: .*
.*:76: Error: .*
.*:78: Error: .*
.*:79: Error: .*
.*:80: Error: .*
.*:81: Error: .*
.*:82: Error: .*
.*:83: Error: .*
.*:84: Error: .*
GAS LISTING .*
@ -98,38 +112,54 @@ GAS LISTING .*
[ ]*34[ ]+lock xor %ebx, %eax
[ ]*35[ ]+lock xor \$0x64, %ebx
[ ]*36[ ]+
[ ]*37[ ]+\.intel_syntax noprefix
[ ]*38[ ]+lock mov eax,ebx
[ ]*39[ ]+lock mov eax,DWORD PTR \[ebx\]
[ ]*40[ ]+
[ ]*41[ ]+lock add eax,ebx
[ ]*42[ ]+lock add ebx,0x64
[ ]*43[ ]+lock adc eax,ebx
[ ]*44[ ]+lock adc ebx,0x64
[ ]*45[ ]+lock and eax,ebx
[ ]*46[ ]+lock and ebx,0x64
[ ]*47[ ]+lock btc ebx,eax
[ ]*48[ ]+lock btc ebx,0x64
[ ]*49[ ]+lock btr ebx,eax
[ ]*50[ ]+lock btr ebx,0x64
[ ]*51[ ]+lock bts ebx,eax
[ ]*52[ ]+lock bts ebx,0x64
[ ]*53[ ]+lock cmpxchg ebx,eax
[ ]*54[ ]+lock dec ebx
[ ]*55[ ]+lock inc ebx
[ ]*56[ ]+lock neg ebx
[ ]*57[ ]+lock not ebx
[ ]*37[ ]+lock add \(%ebx\), %eax
[ ]*38[ ]+lock adc \(%ebx\), %eax
[ ]*39[ ]+lock and \(%ebx\), %eax
[ ]*40[ ]+lock or \(%ebx\), %eax
[ ]*41[ ]+lock sbb \(%ebx\), %eax
[ ]*42[ ]+lock sub \(%ebx\), %eax
[ ]*43[ ]+lock xor \(%ebx\), %eax
[ ]*44[ ]+
[ ]*45[ ]+\.intel_syntax noprefix
[ ]*46[ ]+lock mov eax,ebx
[ ]*47[ ]+lock mov eax,DWORD PTR \[ebx\]
[ ]*48[ ]+
[ ]*49[ ]+lock add eax,ebx
[ ]*50[ ]+lock add ebx,0x64
[ ]*51[ ]+lock adc eax,ebx
[ ]*52[ ]+lock adc ebx,0x64
[ ]*53[ ]+lock and eax,ebx
[ ]*54[ ]+lock and ebx,0x64
[ ]*55[ ]+lock btc ebx,eax
[ ]*56[ ]+lock btc ebx,0x64
[ ]*57[ ]+lock btr ebx,eax
GAS LISTING .*
[ ]*58[ ]+lock or eax,ebx
[ ]*59[ ]+lock or ebx,0x64
[ ]*60[ ]+lock sbb eax,ebx
[ ]*61[ ]+lock sbb ebx,0x64
[ ]*62[ ]+lock sub eax,ebx
[ ]*63[ ]+lock sub ebx,0x64
[ ]*64[ ]+lock xadd ebx,eax
[ ]*65[ ]+lock xchg ebx,eax
[ ]*66[ ]+lock xchg ebx,eax
[ ]*67[ ]+lock xor eax,ebx
[ ]*68[ ]+lock xor ebx,0x64
[ ]*58[ ]+lock btr ebx,0x64
[ ]*59[ ]+lock bts ebx,eax
[ ]*60[ ]+lock bts ebx,0x64
[ ]*61[ ]+lock cmpxchg ebx,eax
[ ]*62[ ]+lock dec ebx
[ ]*63[ ]+lock inc ebx
[ ]*64[ ]+lock neg ebx
[ ]*65[ ]+lock not ebx
[ ]*66[ ]+lock or eax,ebx
[ ]*67[ ]+lock or ebx,0x64
[ ]*68[ ]+lock sbb eax,ebx
[ ]*69[ ]+lock sbb ebx,0x64
[ ]*70[ ]+lock sub eax,ebx
[ ]*71[ ]+lock sub ebx,0x64
[ ]*72[ ]+lock xadd ebx,eax
[ ]*73[ ]+lock xchg ebx,eax
[ ]*74[ ]+lock xchg ebx,eax
[ ]*75[ ]+lock xor eax,ebx
[ ]*76[ ]+lock xor ebx,0x64
[ ]*77[ ]+
[ ]*78[ ]+lock add eax,DWORD PTR \[ebx\]
[ ]*79[ ]+lock adc eax,DWORD PTR \[ebx\]
[ ]*80[ ]+lock and eax,DWORD PTR \[ebx\]
[ ]*81[ ]+lock or eax,DWORD PTR \[ebx\]
[ ]*82[ ]+lock sbb eax,DWORD PTR \[ebx\]
[ ]*83[ ]+lock sub eax,DWORD PTR \[ebx\]
[ ]*84[ ]+lock xor eax,DWORD PTR \[ebx\]

View File

@ -34,6 +34,14 @@ foo:
lock xor %ebx, %eax
lock xor $0x64, %ebx
lock add (%ebx), %eax
lock adc (%ebx), %eax
lock and (%ebx), %eax
lock or (%ebx), %eax
lock sbb (%ebx), %eax
lock sub (%ebx), %eax
lock xor (%ebx), %eax
.intel_syntax noprefix
lock mov eax,ebx
lock mov eax,DWORD PTR [ebx]
@ -66,3 +74,11 @@ foo:
lock xchg ebx,eax
lock xor eax,ebx
lock xor ebx,0x64
lock add eax,DWORD PTR [ebx]
lock adc eax,DWORD PTR [ebx]
lock and eax,DWORD PTR [ebx]
lock or eax,DWORD PTR [ebx]
lock sbb eax,DWORD PTR [ebx]
lock sub eax,DWORD PTR [ebx]
lock xor eax,DWORD PTR [ebx]

View File

@ -8,11 +8,11 @@
Disassembly of section .text:
0+ <foo>:
[ ]*[a-f0-9]+: f0 03 03 lock add eax,DWORD PTR \[rbx\]
[ ]*[a-f0-9]+: f0 01 03 lock add DWORD PTR \[rbx\],eax
[ ]*[a-f0-9]+: f0 83 03 64 lock add DWORD PTR \[rbx\],0x64
[ ]*[a-f0-9]+: f0 13 03 lock adc eax,DWORD PTR \[rbx\]
[ ]*[a-f0-9]+: f0 11 03 lock adc DWORD PTR \[rbx\],eax
[ ]*[a-f0-9]+: f0 83 13 64 lock adc DWORD PTR \[rbx\],0x64
[ ]*[a-f0-9]+: f0 23 03 lock and eax,DWORD PTR \[rbx\]
[ ]*[a-f0-9]+: f0 21 03 lock and DWORD PTR \[rbx\],eax
[ ]*[a-f0-9]+: f0 83 23 64 lock and DWORD PTR \[rbx\],0x64
[ ]*[a-f0-9]+: f0 0f bb 03 lock btc DWORD PTR \[rbx\],eax
[ ]*[a-f0-9]+: f0 0f ba 3b 64 lock btc DWORD PTR \[rbx\],0x64
@ -26,22 +26,22 @@ Disassembly of section .text:
[ ]*[a-f0-9]+: f0 ff 03 lock inc DWORD PTR \[rbx\]
[ ]*[a-f0-9]+: f0 f7 1b lock neg DWORD PTR \[rbx\]
[ ]*[a-f0-9]+: f0 f7 13 lock not DWORD PTR \[rbx\]
[ ]*[a-f0-9]+: f0 0b 03 lock or eax,DWORD PTR \[rbx\]
[ ]*[a-f0-9]+: f0 09 03 lock or DWORD PTR \[rbx\],eax
[ ]*[a-f0-9]+: f0 83 0b 64 lock or DWORD PTR \[rbx\],0x64
[ ]*[a-f0-9]+: f0 1b 03 lock sbb eax,DWORD PTR \[rbx\]
[ ]*[a-f0-9]+: f0 19 03 lock sbb DWORD PTR \[rbx\],eax
[ ]*[a-f0-9]+: f0 83 1b 64 lock sbb DWORD PTR \[rbx\],0x64
[ ]*[a-f0-9]+: f0 2b 03 lock sub eax,DWORD PTR \[rbx\]
[ ]*[a-f0-9]+: f0 29 03 lock sub DWORD PTR \[rbx\],eax
[ ]*[a-f0-9]+: f0 83 2b 64 lock sub DWORD PTR \[rbx\],0x64
[ ]*[a-f0-9]+: f0 0f c1 03 lock xadd DWORD PTR \[rbx\],eax
[ ]*[a-f0-9]+: f0 87 03 lock xchg DWORD PTR \[rbx\],eax
[ ]*[a-f0-9]+: f0 87 03 lock xchg DWORD PTR \[rbx\],eax
[ ]*[a-f0-9]+: f0 33 03 lock xor eax,DWORD PTR \[rbx\]
[ ]*[a-f0-9]+: f0 31 03 lock xor DWORD PTR \[rbx\],eax
[ ]*[a-f0-9]+: f0 83 33 64 lock xor DWORD PTR \[rbx\],0x64
[ ]*[a-f0-9]+: f0 03 03 lock add eax,DWORD PTR \[rbx\]
[ ]*[a-f0-9]+: f0 01 03 lock add DWORD PTR \[rbx\],eax
[ ]*[a-f0-9]+: f0 83 03 64 lock add DWORD PTR \[rbx\],0x64
[ ]*[a-f0-9]+: f0 13 03 lock adc eax,DWORD PTR \[rbx\]
[ ]*[a-f0-9]+: f0 11 03 lock adc DWORD PTR \[rbx\],eax
[ ]*[a-f0-9]+: f0 83 13 64 lock adc DWORD PTR \[rbx\],0x64
[ ]*[a-f0-9]+: f0 23 03 lock and eax,DWORD PTR \[rbx\]
[ ]*[a-f0-9]+: f0 21 03 lock and DWORD PTR \[rbx\],eax
[ ]*[a-f0-9]+: f0 83 23 64 lock and DWORD PTR \[rbx\],0x64
[ ]*[a-f0-9]+: f0 0f bb 03 lock btc DWORD PTR \[rbx\],eax
[ ]*[a-f0-9]+: f0 0f ba 3b 64 lock btc DWORD PTR \[rbx\],0x64
@ -55,15 +55,15 @@ Disassembly of section .text:
[ ]*[a-f0-9]+: f0 ff 03 lock inc DWORD PTR \[rbx\]
[ ]*[a-f0-9]+: f0 f7 1b lock neg DWORD PTR \[rbx\]
[ ]*[a-f0-9]+: f0 f7 13 lock not DWORD PTR \[rbx\]
[ ]*[a-f0-9]+: f0 0b 03 lock or eax,DWORD PTR \[rbx\]
[ ]*[a-f0-9]+: f0 09 03 lock or DWORD PTR \[rbx\],eax
[ ]*[a-f0-9]+: f0 83 0b 64 lock or DWORD PTR \[rbx\],0x64
[ ]*[a-f0-9]+: f0 1b 03 lock sbb eax,DWORD PTR \[rbx\]
[ ]*[a-f0-9]+: f0 19 03 lock sbb DWORD PTR \[rbx\],eax
[ ]*[a-f0-9]+: f0 83 1b 64 lock sbb DWORD PTR \[rbx\],0x64
[ ]*[a-f0-9]+: f0 2b 03 lock sub eax,DWORD PTR \[rbx\]
[ ]*[a-f0-9]+: f0 29 03 lock sub DWORD PTR \[rbx\],eax
[ ]*[a-f0-9]+: f0 83 2b 64 lock sub DWORD PTR \[rbx\],0x64
[ ]*[a-f0-9]+: f0 0f c1 03 lock xadd DWORD PTR \[rbx\],eax
[ ]*[a-f0-9]+: f0 87 03 lock xchg DWORD PTR \[rbx\],eax
[ ]*[a-f0-9]+: f0 87 03 lock xchg DWORD PTR \[rbx\],eax
[ ]*[a-f0-9]+: f0 33 03 lock xor eax,DWORD PTR \[rbx\]
[ ]*[a-f0-9]+: f0 31 03 lock xor DWORD PTR \[rbx\],eax
[ ]*[a-f0-9]+: f0 83 33 64 lock xor DWORD PTR \[rbx\],0x64
#pass

View File

@ -7,11 +7,11 @@
Disassembly of section .text:
0+ <foo>:
[ ]*[a-f0-9]+: f0 03 03 lock add \(%rbx\),%eax
[ ]*[a-f0-9]+: f0 01 03 lock add %eax,\(%rbx\)
[ ]*[a-f0-9]+: f0 83 03 64 lock addl \$0x64,\(%rbx\)
[ ]*[a-f0-9]+: f0 13 03 lock adc \(%rbx\),%eax
[ ]*[a-f0-9]+: f0 11 03 lock adc %eax,\(%rbx\)
[ ]*[a-f0-9]+: f0 83 13 64 lock adcl \$0x64,\(%rbx\)
[ ]*[a-f0-9]+: f0 23 03 lock and \(%rbx\),%eax
[ ]*[a-f0-9]+: f0 21 03 lock and %eax,\(%rbx\)
[ ]*[a-f0-9]+: f0 83 23 64 lock andl \$0x64,\(%rbx\)
[ ]*[a-f0-9]+: f0 0f bb 03 lock btc %eax,\(%rbx\)
[ ]*[a-f0-9]+: f0 0f ba 3b 64 lock btcl \$0x64,\(%rbx\)
@ -25,22 +25,22 @@ Disassembly of section .text:
[ ]*[a-f0-9]+: f0 ff 03 lock incl \(%rbx\)
[ ]*[a-f0-9]+: f0 f7 1b lock negl \(%rbx\)
[ ]*[a-f0-9]+: f0 f7 13 lock notl \(%rbx\)
[ ]*[a-f0-9]+: f0 0b 03 lock or \(%rbx\),%eax
[ ]*[a-f0-9]+: f0 09 03 lock or %eax,\(%rbx\)
[ ]*[a-f0-9]+: f0 83 0b 64 lock orl \$0x64,\(%rbx\)
[ ]*[a-f0-9]+: f0 1b 03 lock sbb \(%rbx\),%eax
[ ]*[a-f0-9]+: f0 19 03 lock sbb %eax,\(%rbx\)
[ ]*[a-f0-9]+: f0 83 1b 64 lock sbbl \$0x64,\(%rbx\)
[ ]*[a-f0-9]+: f0 2b 03 lock sub \(%rbx\),%eax
[ ]*[a-f0-9]+: f0 29 03 lock sub %eax,\(%rbx\)
[ ]*[a-f0-9]+: f0 83 2b 64 lock subl \$0x64,\(%rbx\)
[ ]*[a-f0-9]+: f0 0f c1 03 lock xadd %eax,\(%rbx\)
[ ]*[a-f0-9]+: f0 87 03 lock xchg %eax,\(%rbx\)
[ ]*[a-f0-9]+: f0 87 03 lock xchg %eax,\(%rbx\)
[ ]*[a-f0-9]+: f0 33 03 lock xor \(%rbx\),%eax
[ ]*[a-f0-9]+: f0 31 03 lock xor %eax,\(%rbx\)
[ ]*[a-f0-9]+: f0 83 33 64 lock xorl \$0x64,\(%rbx\)
[ ]*[a-f0-9]+: f0 03 03 lock add \(%rbx\),%eax
[ ]*[a-f0-9]+: f0 01 03 lock add %eax,\(%rbx\)
[ ]*[a-f0-9]+: f0 83 03 64 lock addl \$0x64,\(%rbx\)
[ ]*[a-f0-9]+: f0 13 03 lock adc \(%rbx\),%eax
[ ]*[a-f0-9]+: f0 11 03 lock adc %eax,\(%rbx\)
[ ]*[a-f0-9]+: f0 83 13 64 lock adcl \$0x64,\(%rbx\)
[ ]*[a-f0-9]+: f0 23 03 lock and \(%rbx\),%eax
[ ]*[a-f0-9]+: f0 21 03 lock and %eax,\(%rbx\)
[ ]*[a-f0-9]+: f0 83 23 64 lock andl \$0x64,\(%rbx\)
[ ]*[a-f0-9]+: f0 0f bb 03 lock btc %eax,\(%rbx\)
[ ]*[a-f0-9]+: f0 0f ba 3b 64 lock btcl \$0x64,\(%rbx\)
@ -54,15 +54,15 @@ Disassembly of section .text:
[ ]*[a-f0-9]+: f0 ff 03 lock incl \(%rbx\)
[ ]*[a-f0-9]+: f0 f7 1b lock negl \(%rbx\)
[ ]*[a-f0-9]+: f0 f7 13 lock notl \(%rbx\)
[ ]*[a-f0-9]+: f0 0b 03 lock or \(%rbx\),%eax
[ ]*[a-f0-9]+: f0 09 03 lock or %eax,\(%rbx\)
[ ]*[a-f0-9]+: f0 83 0b 64 lock orl \$0x64,\(%rbx\)
[ ]*[a-f0-9]+: f0 1b 03 lock sbb \(%rbx\),%eax
[ ]*[a-f0-9]+: f0 19 03 lock sbb %eax,\(%rbx\)
[ ]*[a-f0-9]+: f0 83 1b 64 lock sbbl \$0x64,\(%rbx\)
[ ]*[a-f0-9]+: f0 2b 03 lock sub \(%rbx\),%eax
[ ]*[a-f0-9]+: f0 29 03 lock sub %eax,\(%rbx\)
[ ]*[a-f0-9]+: f0 83 2b 64 lock subl \$0x64,\(%rbx\)
[ ]*[a-f0-9]+: f0 0f c1 03 lock xadd %eax,\(%rbx\)
[ ]*[a-f0-9]+: f0 87 03 lock xchg %eax,\(%rbx\)
[ ]*[a-f0-9]+: f0 87 03 lock xchg %eax,\(%rbx\)
[ ]*[a-f0-9]+: f0 33 03 lock xor \(%rbx\),%eax
[ ]*[a-f0-9]+: f0 31 03 lock xor %eax,\(%rbx\)
[ ]*[a-f0-9]+: f0 83 33 64 lock xorl \$0x64,\(%rbx\)
#pass

View File

@ -2,11 +2,11 @@
.text
foo:
lock add (%rbx), %eax
lock add %eax, (%rbx)
lock add $0x64, (%rbx)
lock adc (%rbx), %eax
lock adc %eax, (%rbx)
lock adc $0x64, (%rbx)
lock and (%rbx), %eax
lock and %eax, (%rbx)
lock and $0x64, (%rbx)
lock btc %eax, (%rbx)
lock btc $0x64, (%rbx)
@ -20,24 +20,24 @@ foo:
lock incl (%rbx)
lock negl (%rbx)
lock notl (%rbx)
lock or (%rbx), %eax
lock or %eax, (%rbx)
lock or $0x64, (%rbx)
lock sbb (%rbx), %eax
lock sbb %eax, (%rbx)
lock sbb $0x64, (%rbx)
lock sub (%rbx), %eax
lock sub %eax, (%rbx)
lock sub $0x64, (%rbx)
lock xadd %eax, (%rbx)
lock xchg (%rbx), %eax
lock xchg %eax, (%rbx)
lock xor (%rbx), %eax
lock xor %eax, (%rbx)
lock xor $0x64, (%rbx)
.intel_syntax noprefix
lock add eax,DWORD PTR [rbx]
lock add DWORD PTR [rbx],eax
lock add DWORD PTR [rbx],0x64
lock adc eax,DWORD PTR [rbx]
lock adc DWORD PTR [rbx],eax
lock adc DWORD PTR [rbx],0x64
lock and eax,DWORD PTR [rbx]
lock and DWORD PTR [rbx],eax
lock and DWORD PTR [rbx],0x64
lock btc DWORD PTR [rbx],eax
lock btc DWORD PTR [rbx],0x64
@ -51,14 +51,14 @@ foo:
lock inc DWORD PTR [rbx]
lock neg DWORD PTR [rbx]
lock not DWORD PTR [rbx]
lock or eax,DWORD PTR [rbx]
lock or DWORD PTR [rbx],eax
lock or DWORD PTR [rbx],0x64
lock sbb eax,DWORD PTR [rbx]
lock sbb DWORD PTR [rbx],eax
lock sbb DWORD PTR [rbx],0x64
lock sub eax,DWORD PTR [rbx]
lock sub DWORD PTR [rbx],eax
lock sub DWORD PTR [rbx],0x64
lock xadd DWORD PTR [rbx],eax
lock xchg DWORD PTR [rbx],eax
lock xchg DWORD PTR [rbx],eax
lock xor eax,DWORD PTR [rbx]
lock xor DWORD PTR [rbx],eax
lock xor DWORD PTR [rbx],0x64

View File

@ -29,16 +29,15 @@
.*:33: Error: .*
.*:34: Error: .*
.*:35: Error: .*
.*:37: Error: .*
.*:38: Error: .*
.*:39: Error: .*
.*:40: Error: .*
.*:41: Error: .*
.*:42: Error: .*
.*:43: Error: .*
.*:44: Error: .*
.*:45: Error: .*
.*:46: Error: .*
.*:47: Error: .*
.*:48: Error: .*
.*:49: Error: .*
.*:50: Error: .*
.*:51: Error: .*
@ -59,6 +58,21 @@
.*:66: Error: .*
.*:67: Error: .*
.*:68: Error: .*
.*:69: Error: .*
.*:70: Error: .*
.*:71: Error: .*
.*:72: Error: .*
.*:73: Error: .*
.*:74: Error: .*
.*:75: Error: .*
.*:76: Error: .*
.*:78: Error: .*
.*:79: Error: .*
.*:80: Error: .*
.*:81: Error: .*
.*:82: Error: .*
.*:83: Error: .*
.*:84: Error: .*
GAS LISTING .*
@ -98,38 +112,54 @@ GAS LISTING .*
[ ]*34[ ]+lock xor %ebx, %eax
[ ]*35[ ]+lock xor \$0x64, %ebx
[ ]*36[ ]+
[ ]*37[ ]+\.intel_syntax noprefix
[ ]*38[ ]+lock mov eax,ebx
[ ]*39[ ]+lock mov eax,DWORD PTR \[rbx\]
[ ]*40[ ]+
[ ]*41[ ]+lock add eax,ebx
[ ]*42[ ]+lock add ebx,0x64
[ ]*43[ ]+lock adc eax,ebx
[ ]*44[ ]+lock adc ebx,0x64
[ ]*45[ ]+lock and eax,ebx
[ ]*46[ ]+lock and ebx,0x64
[ ]*47[ ]+lock btc ebx,eax
[ ]*48[ ]+lock btc ebx,0x64
[ ]*49[ ]+lock btr ebx,eax
[ ]*50[ ]+lock btr ebx,0x64
[ ]*51[ ]+lock bts ebx,eax
[ ]*52[ ]+lock bts ebx,0x64
[ ]*53[ ]+lock cmpxchg ebx,eax
[ ]*54[ ]+lock dec ebx
[ ]*55[ ]+lock inc ebx
[ ]*56[ ]+lock neg ebx
[ ]*57[ ]+lock not ebx
[ ]*37[ ]+lock add \(%rbx\), %eax
[ ]*38[ ]+lock adc \(%rbx\), %eax
[ ]*39[ ]+lock and \(%rbx\), %eax
[ ]*40[ ]+lock or \(%rbx\), %eax
[ ]*41[ ]+lock sbb \(%rbx\), %eax
[ ]*42[ ]+lock sub \(%rbx\), %eax
[ ]*43[ ]+lock xor \(%rbx\), %eax
[ ]*44[ ]+
[ ]*45[ ]+\.intel_syntax noprefix
[ ]*46[ ]+lock mov eax,ebx
[ ]*47[ ]+lock mov eax,DWORD PTR \[rbx\]
[ ]*48[ ]+
[ ]*49[ ]+lock add eax,ebx
[ ]*50[ ]+lock add ebx,0x64
[ ]*51[ ]+lock adc eax,ebx
[ ]*52[ ]+lock adc ebx,0x64
[ ]*53[ ]+lock and eax,ebx
[ ]*54[ ]+lock and ebx,0x64
[ ]*55[ ]+lock btc ebx,eax
[ ]*56[ ]+lock btc ebx,0x64
[ ]*57[ ]+lock btr ebx,eax
GAS LISTING .*
[ ]*58[ ]+lock or eax,ebx
[ ]*59[ ]+lock or ebx,0x64
[ ]*60[ ]+lock sbb eax,ebx
[ ]*61[ ]+lock sbb ebx,0x64
[ ]*62[ ]+lock sub eax,ebx
[ ]*63[ ]+lock sub ebx,0x64
[ ]*64[ ]+lock xadd ebx,eax
[ ]*65[ ]+lock xchg ebx,eax
[ ]*66[ ]+lock xchg ebx,eax
[ ]*67[ ]+lock xor eax,ebx
[ ]*68[ ]+lock xor ebx,0x64
[ ]*58[ ]+lock btr ebx,0x64
[ ]*59[ ]+lock bts ebx,eax
[ ]*60[ ]+lock bts ebx,0x64
[ ]*61[ ]+lock cmpxchg ebx,eax
[ ]*62[ ]+lock dec ebx
[ ]*63[ ]+lock inc ebx
[ ]*64[ ]+lock neg ebx
[ ]*65[ ]+lock not ebx
[ ]*66[ ]+lock or eax,ebx
[ ]*67[ ]+lock or ebx,0x64
[ ]*68[ ]+lock sbb eax,ebx
[ ]*69[ ]+lock sbb ebx,0x64
[ ]*70[ ]+lock sub eax,ebx
[ ]*71[ ]+lock sub ebx,0x64
[ ]*72[ ]+lock xadd ebx,eax
[ ]*73[ ]+lock xchg ebx,eax
[ ]*74[ ]+lock xchg ebx,eax
[ ]*75[ ]+lock xor eax,ebx
[ ]*76[ ]+lock xor ebx,0x64
[ ]*77[ ]+
[ ]*78[ ]+lock add eax,DWORD PTR \[rbx\]
[ ]*79[ ]+lock adc eax,DWORD PTR \[rbx\]
[ ]*80[ ]+lock and eax,DWORD PTR \[rbx\]
[ ]*81[ ]+lock or eax,DWORD PTR \[rbx\]
[ ]*82[ ]+lock sbb eax,DWORD PTR \[rbx\]
[ ]*83[ ]+lock sub eax,DWORD PTR \[rbx\]
[ ]*84[ ]+lock xor eax,DWORD PTR \[rbx\]

View File

@ -34,6 +34,14 @@ foo:
lock xor %ebx, %eax
lock xor $0x64, %ebx
lock add (%rbx), %eax
lock adc (%rbx), %eax
lock and (%rbx), %eax
lock or (%rbx), %eax
lock sbb (%rbx), %eax
lock sub (%rbx), %eax
lock xor (%rbx), %eax
.intel_syntax noprefix
lock mov eax,ebx
lock mov eax,DWORD PTR [rbx]
@ -66,3 +74,11 @@ foo:
lock xchg ebx,eax
lock xor eax,ebx
lock xor ebx,0x64
lock add eax,DWORD PTR [rbx]
lock adc eax,DWORD PTR [rbx]
lock and eax,DWORD PTR [rbx]
lock or eax,DWORD PTR [rbx]
lock sbb eax,DWORD PTR [rbx]
lock sub eax,DWORD PTR [rbx]
lock xor eax,DWORD PTR [rbx]