# Check 32bit HLE instructions .allow_index_reg .text _start: # Tests for op imm8 regb/m8 xacquire lock adcb $100,(%ecx) lock xacquire adcb $100,(%ecx) xrelease lock adcb $100,(%ecx) lock xrelease adcb $100,(%ecx) .byte 0xf0; .byte 0xf2; adcb $100,(%ecx) .byte 0xf0; .byte 0xf3; adcb $100,(%ecx) xacquire lock addb $100,(%ecx) lock xacquire addb $100,(%ecx) xrelease lock addb $100,(%ecx) lock xrelease addb $100,(%ecx) .byte 0xf0; .byte 0xf2; addb $100,(%ecx) .byte 0xf0; .byte 0xf3; addb $100,(%ecx) xacquire lock andb $100,(%ecx) lock xacquire andb $100,(%ecx) xrelease lock andb $100,(%ecx) lock xrelease andb $100,(%ecx) .byte 0xf0; .byte 0xf2; andb $100,(%ecx) .byte 0xf0; .byte 0xf3; andb $100,(%ecx) xrelease movb $100,(%ecx) xacquire lock orb $100,(%ecx) lock xacquire orb $100,(%ecx) xrelease lock orb $100,(%ecx) lock xrelease orb $100,(%ecx) .byte 0xf0; .byte 0xf2; orb $100,(%ecx) .byte 0xf0; .byte 0xf3; orb $100,(%ecx) xacquire lock sbbb $100,(%ecx) lock xacquire sbbb $100,(%ecx) xrelease lock sbbb $100,(%ecx) lock xrelease sbbb $100,(%ecx) .byte 0xf0; .byte 0xf2; sbbb $100,(%ecx) .byte 0xf0; .byte 0xf3; sbbb $100,(%ecx) xacquire lock subb $100,(%ecx) lock xacquire subb $100,(%ecx) xrelease lock subb $100,(%ecx) lock xrelease subb $100,(%ecx) .byte 0xf0; .byte 0xf2; subb $100,(%ecx) .byte 0xf0; .byte 0xf3; subb $100,(%ecx) xacquire lock xorb $100,(%ecx) lock xacquire xorb $100,(%ecx) xrelease lock xorb $100,(%ecx) lock xrelease xorb $100,(%ecx) .byte 0xf0; .byte 0xf2; xorb $100,(%ecx) .byte 0xf0; .byte 0xf3; xorb $100,(%ecx) # Tests for op imm16 regs/m16 xacquire lock adcw $1000,(%ecx) lock xacquire adcw $1000,(%ecx) xrelease lock adcw $1000,(%ecx) lock xrelease adcw $1000,(%ecx) .byte 0xf0; .byte 0xf2; adcw $1000,(%ecx) .byte 0xf0; .byte 0xf3; adcw $1000,(%ecx) xacquire lock addw $1000,(%ecx) lock xacquire addw $1000,(%ecx) xrelease lock addw $1000,(%ecx) lock xrelease addw $1000,(%ecx) .byte 0xf0; .byte 0xf2; addw $1000,(%ecx) .byte 0xf0; .byte 0xf3; addw $1000,(%ecx) xacquire lock andw $1000,(%ecx) lock xacquire andw $1000,(%ecx) xrelease lock andw $1000,(%ecx) lock xrelease andw $1000,(%ecx) .byte 0xf0; .byte 0xf2; andw $1000,(%ecx) .byte 0xf0; .byte 0xf3; andw $1000,(%ecx) xrelease movw $1000,(%ecx) xacquire lock orw $1000,(%ecx) lock xacquire orw $1000,(%ecx) xrelease lock orw $1000,(%ecx) lock xrelease orw $1000,(%ecx) .byte 0xf0; .byte 0xf2; orw $1000,(%ecx) .byte 0xf0; .byte 0xf3; orw $1000,(%ecx) xacquire lock sbbw $1000,(%ecx) lock xacquire sbbw $1000,(%ecx) xrelease lock sbbw $1000,(%ecx) lock xrelease sbbw $1000,(%ecx) .byte 0xf0; .byte 0xf2; sbbw $1000,(%ecx) .byte 0xf0; .byte 0xf3; sbbw $1000,(%ecx) xacquire lock subw $1000,(%ecx) lock xacquire subw $1000,(%ecx) xrelease lock subw $1000,(%ecx) lock xrelease subw $1000,(%ecx) .byte 0xf0; .byte 0xf2; subw $1000,(%ecx) .byte 0xf0; .byte 0xf3; subw $1000,(%ecx) xacquire lock xorw $1000,(%ecx) lock xacquire xorw $1000,(%ecx) xrelease lock xorw $1000,(%ecx) lock xrelease xorw $1000,(%ecx) .byte 0xf0; .byte 0xf2; xorw $1000,(%ecx) .byte 0xf0; .byte 0xf3; xorw $1000,(%ecx) # Tests for op imm32 regl/m32 xacquire lock adcl $10000000,(%ecx) lock xacquire adcl $10000000,(%ecx) xrelease lock adcl $10000000,(%ecx) lock xrelease adcl $10000000,(%ecx) .byte 0xf0; .byte 0xf2; adcl $10000000,(%ecx) .byte 0xf0; .byte 0xf3; adcl $10000000,(%ecx) xacquire lock addl $10000000,(%ecx) lock xacquire addl $10000000,(%ecx) xrelease lock addl $10000000,(%ecx) lock xrelease addl $10000000,(%ecx) .byte 0xf0; .byte 0xf2; addl $10000000,(%ecx) .byte 0xf0; .byte 0xf3; addl $10000000,(%ecx) xacquire lock andl $10000000,(%ecx) lock xacquire andl $10000000,(%ecx) xrelease lock andl $10000000,(%ecx) lock xrelease andl $10000000,(%ecx) .byte 0xf0; .byte 0xf2; andl $10000000,(%ecx) .byte 0xf0; .byte 0xf3; andl $10000000,(%ecx) xrelease movl $10000000,(%ecx) xacquire lock orl $10000000,(%ecx) lock xacquire orl $10000000,(%ecx) xrelease lock orl $10000000,(%ecx) lock xrelease orl $10000000,(%ecx) .byte 0xf0; .byte 0xf2; orl $10000000,(%ecx) .byte 0xf0; .byte 0xf3; orl $10000000,(%ecx) xacquire lock sbbl $10000000,(%ecx) lock xacquire sbbl $10000000,(%ecx) xrelease lock sbbl $10000000,(%ecx) lock xrelease sbbl $10000000,(%ecx) .byte 0xf0; .byte 0xf2; sbbl $10000000,(%ecx) .byte 0xf0; .byte 0xf3; sbbl $10000000,(%ecx) xacquire lock subl $10000000,(%ecx) lock xacquire subl $10000000,(%ecx) xrelease lock subl $10000000,(%ecx) lock xrelease subl $10000000,(%ecx) .byte 0xf0; .byte 0xf2; subl $10000000,(%ecx) .byte 0xf0; .byte 0xf3; subl $10000000,(%ecx) xacquire lock xorl $10000000,(%ecx) lock xacquire xorl $10000000,(%ecx) xrelease lock xorl $10000000,(%ecx) lock xrelease xorl $10000000,(%ecx) .byte 0xf0; .byte 0xf2; xorl $10000000,(%ecx) .byte 0xf0; .byte 0xf3; xorl $10000000,(%ecx) # Tests for op imm8 regs/m16 xacquire lock adcw $100,(%ecx) lock xacquire adcw $100,(%ecx) xrelease lock adcw $100,(%ecx) lock xrelease adcw $100,(%ecx) .byte 0xf0; .byte 0xf2; adcw $100,(%ecx) .byte 0xf0; .byte 0xf3; adcw $100,(%ecx) xacquire lock addw $100,(%ecx) lock xacquire addw $100,(%ecx) xrelease lock addw $100,(%ecx) lock xrelease addw $100,(%ecx) .byte 0xf0; .byte 0xf2; addw $100,(%ecx) .byte 0xf0; .byte 0xf3; addw $100,(%ecx) xacquire lock andw $100,(%ecx) lock xacquire andw $100,(%ecx) xrelease lock andw $100,(%ecx) lock xrelease andw $100,(%ecx) .byte 0xf0; .byte 0xf2; andw $100,(%ecx) .byte 0xf0; .byte 0xf3; andw $100,(%ecx) xacquire lock btcw $100,(%ecx) lock xacquire btcw $100,(%ecx) xrelease lock btcw $100,(%ecx) lock xrelease btcw $100,(%ecx) .byte 0xf0; .byte 0xf2; btcw $100,(%ecx) .byte 0xf0; .byte 0xf3; btcw $100,(%ecx) xacquire lock btrw $100,(%ecx) lock xacquire btrw $100,(%ecx) xrelease lock btrw $100,(%ecx) lock xrelease btrw $100,(%ecx) .byte 0xf0; .byte 0xf2; btrw $100,(%ecx) .byte 0xf0; .byte 0xf3; btrw $100,(%ecx) xacquire lock btsw $100,(%ecx) lock xacquire btsw $100,(%ecx) xrelease lock btsw $100,(%ecx) lock xrelease btsw $100,(%ecx) .byte 0xf0; .byte 0xf2; btsw $100,(%ecx) .byte 0xf0; .byte 0xf3; btsw $100,(%ecx) xrelease movw $100,(%ecx) xacquire lock orw $100,(%ecx) lock xacquire orw $100,(%ecx) xrelease lock orw $100,(%ecx) lock xrelease orw $100,(%ecx) .byte 0xf0; .byte 0xf2; orw $100,(%ecx) .byte 0xf0; .byte 0xf3; orw $100,(%ecx) xacquire lock sbbw $100,(%ecx) lock xacquire sbbw $100,(%ecx) xrelease lock sbbw $100,(%ecx) lock xrelease sbbw $100,(%ecx) .byte 0xf0; .byte 0xf2; sbbw $100,(%ecx) .byte 0xf0; .byte 0xf3; sbbw $100,(%ecx) xacquire lock subw $100,(%ecx) lock xacquire subw $100,(%ecx) xrelease lock subw $100,(%ecx) lock xrelease subw $100,(%ecx) .byte 0xf0; .byte 0xf2; subw $100,(%ecx) .byte 0xf0; .byte 0xf3; subw $100,(%ecx) xacquire lock xorw $100,(%ecx) lock xacquire xorw $100,(%ecx) xrelease lock xorw $100,(%ecx) lock xrelease xorw $100,(%ecx) .byte 0xf0; .byte 0xf2; xorw $100,(%ecx) .byte 0xf0; .byte 0xf3; xorw $100,(%ecx) # Tests for op imm8 regl/m32 xacquire lock adcl $100,(%ecx) lock xacquire adcl $100,(%ecx) xrelease lock adcl $100,(%ecx) lock xrelease adcl $100,(%ecx) .byte 0xf0; .byte 0xf2; adcl $100,(%ecx) .byte 0xf0; .byte 0xf3; adcl $100,(%ecx) xacquire lock addl $100,(%ecx) lock xacquire addl $100,(%ecx) xrelease lock addl $100,(%ecx) lock xrelease addl $100,(%ecx) .byte 0xf0; .byte 0xf2; addl $100,(%ecx) .byte 0xf0; .byte 0xf3; addl $100,(%ecx) xacquire lock andl $100,(%ecx) lock xacquire andl $100,(%ecx) xrelease lock andl $100,(%ecx) lock xrelease andl $100,(%ecx) .byte 0xf0; .byte 0xf2; andl $100,(%ecx) .byte 0xf0; .byte 0xf3; andl $100,(%ecx) xacquire lock btcl $100,(%ecx) lock xacquire btcl $100,(%ecx) xrelease lock btcl $100,(%ecx) lock xrelease btcl $100,(%ecx) .byte 0xf0; .byte 0xf2; btcl $100,(%ecx) .byte 0xf0; .byte 0xf3; btcl $100,(%ecx) xacquire lock btrl $100,(%ecx) lock xacquire btrl $100,(%ecx) xrelease lock btrl $100,(%ecx) lock xrelease btrl $100,(%ecx) .byte 0xf0; .byte 0xf2; btrl $100,(%ecx) .byte 0xf0; .byte 0xf3; btrl $100,(%ecx) xacquire lock btsl $100,(%ecx) lock xacquire btsl $100,(%ecx) xrelease lock btsl $100,(%ecx) lock xrelease btsl $100,(%ecx) .byte 0xf0; .byte 0xf2; btsl $100,(%ecx) .byte 0xf0; .byte 0xf3; btsl $100,(%ecx) xrelease movl $100,(%ecx) xacquire lock orl $100,(%ecx) lock xacquire orl $100,(%ecx) xrelease lock orl $100,(%ecx) lock xrelease orl $100,(%ecx) .byte 0xf0; .byte 0xf2; orl $100,(%ecx) .byte 0xf0; .byte 0xf3; orl $100,(%ecx) xacquire lock sbbl $100,(%ecx) lock xacquire sbbl $100,(%ecx) xrelease lock sbbl $100,(%ecx) lock xrelease sbbl $100,(%ecx) .byte 0xf0; .byte 0xf2; sbbl $100,(%ecx) .byte 0xf0; .byte 0xf3; sbbl $100,(%ecx) xacquire lock subl $100,(%ecx) lock xacquire subl $100,(%ecx) xrelease lock subl $100,(%ecx) lock xrelease subl $100,(%ecx) .byte 0xf0; .byte 0xf2; subl $100,(%ecx) .byte 0xf0; .byte 0xf3; subl $100,(%ecx) xacquire lock xorl $100,(%ecx) lock xacquire xorl $100,(%ecx) xrelease lock xorl $100,(%ecx) lock xrelease xorl $100,(%ecx) .byte 0xf0; .byte 0xf2; xorl $100,(%ecx) .byte 0xf0; .byte 0xf3; xorl $100,(%ecx) # Tests for op imm8 regb/m8 xacquire lock adcb $100,(%ecx) lock xacquire adcb $100,(%ecx) xrelease lock adcb $100,(%ecx) lock xrelease adcb $100,(%ecx) .byte 0xf0; .byte 0xf2; adcb $100,(%ecx) .byte 0xf0; .byte 0xf3; adcb $100,(%ecx) xacquire lock addb $100,(%ecx) lock xacquire addb $100,(%ecx) xrelease lock addb $100,(%ecx) lock xrelease addb $100,(%ecx) .byte 0xf0; .byte 0xf2; addb $100,(%ecx) .byte 0xf0; .byte 0xf3; addb $100,(%ecx) xacquire lock andb $100,(%ecx) lock xacquire andb $100,(%ecx) xrelease lock andb $100,(%ecx) lock xrelease andb $100,(%ecx) .byte 0xf0; .byte 0xf2; andb $100,(%ecx) .byte 0xf0; .byte 0xf3; andb $100,(%ecx) xrelease movb $100,(%ecx) xacquire lock orb $100,(%ecx) lock xacquire orb $100,(%ecx) xrelease lock orb $100,(%ecx) lock xrelease orb $100,(%ecx) .byte 0xf0; .byte 0xf2; orb $100,(%ecx) .byte 0xf0; .byte 0xf3; orb $100,(%ecx) xacquire lock sbbb $100,(%ecx) lock xacquire sbbb $100,(%ecx) xrelease lock sbbb $100,(%ecx) lock xrelease sbbb $100,(%ecx) .byte 0xf0; .byte 0xf2; sbbb $100,(%ecx) .byte 0xf0; .byte 0xf3; sbbb $100,(%ecx) xacquire lock subb $100,(%ecx) lock xacquire subb $100,(%ecx) xrelease lock subb $100,(%ecx) lock xrelease subb $100,(%ecx) .byte 0xf0; .byte 0xf2; subb $100,(%ecx) .byte 0xf0; .byte 0xf3; subb $100,(%ecx) xacquire lock xorb $100,(%ecx) lock xacquire xorb $100,(%ecx) xrelease lock xorb $100,(%ecx) lock xrelease xorb $100,(%ecx) .byte 0xf0; .byte 0xf2; xorb $100,(%ecx) .byte 0xf0; .byte 0xf3; xorb $100,(%ecx) # Tests for op regb regb/m8 # Tests for op regb/m8 regb xacquire lock adcb %al,(%ecx) lock xacquire adcb %al,(%ecx) xrelease lock adcb %al,(%ecx) lock xrelease adcb %al,(%ecx) .byte 0xf0; .byte 0xf2; adcb %al,(%ecx) .byte 0xf0; .byte 0xf3; adcb %al,(%ecx) xacquire lock addb %al,(%ecx) lock xacquire addb %al,(%ecx) xrelease lock addb %al,(%ecx) lock xrelease addb %al,(%ecx) .byte 0xf0; .byte 0xf2; addb %al,(%ecx) .byte 0xf0; .byte 0xf3; addb %al,(%ecx) xacquire lock andb %al,(%ecx) lock xacquire andb %al,(%ecx) xrelease lock andb %al,(%ecx) lock xrelease andb %al,(%ecx) .byte 0xf0; .byte 0xf2; andb %al,(%ecx) .byte 0xf0; .byte 0xf3; andb %al,(%ecx) xrelease movb %al,(%ecx) xrelease movb %al,0x12345678 xacquire lock orb %al,(%ecx) lock xacquire orb %al,(%ecx) xrelease lock orb %al,(%ecx) lock xrelease orb %al,(%ecx) .byte 0xf0; .byte 0xf2; orb %al,(%ecx) .byte 0xf0; .byte 0xf3; orb %al,(%ecx) xacquire lock sbbb %al,(%ecx) lock xacquire sbbb %al,(%ecx) xrelease lock sbbb %al,(%ecx) lock xrelease sbbb %al,(%ecx) .byte 0xf0; .byte 0xf2; sbbb %al,(%ecx) .byte 0xf0; .byte 0xf3; sbbb %al,(%ecx) xacquire lock subb %al,(%ecx) lock xacquire subb %al,(%ecx) xrelease lock subb %al,(%ecx) lock xrelease subb %al,(%ecx) .byte 0xf0; .byte 0xf2; subb %al,(%ecx) .byte 0xf0; .byte 0xf3; subb %al,(%ecx) xacquire lock xchgb %al,(%ecx) lock xacquire xchgb %al,(%ecx) xacquire xchgb %al,(%ecx) xrelease lock xchgb %al,(%ecx) lock xrelease xchgb %al,(%ecx) xrelease xchgb %al,(%ecx) .byte 0xf0; .byte 0xf2; xchgb %al,(%ecx) .byte 0xf0; .byte 0xf3; xchgb %al,(%ecx) xacquire lock xorb %al,(%ecx) lock xacquire xorb %al,(%ecx) xrelease lock xorb %al,(%ecx) lock xrelease xorb %al,(%ecx) .byte 0xf0; .byte 0xf2; xorb %al,(%ecx) .byte 0xf0; .byte 0xf3; xorb %al,(%ecx) # Tests for op regs regs/m16 # Tests for op regs/m16 regs xacquire lock adcw %ax,(%ecx) lock xacquire adcw %ax,(%ecx) xrelease lock adcw %ax,(%ecx) lock xrelease adcw %ax,(%ecx) .byte 0xf0; .byte 0xf2; adcw %ax,(%ecx) .byte 0xf0; .byte 0xf3; adcw %ax,(%ecx) xacquire lock addw %ax,(%ecx) lock xacquire addw %ax,(%ecx) xrelease lock addw %ax,(%ecx) lock xrelease addw %ax,(%ecx) .byte 0xf0; .byte 0xf2; addw %ax,(%ecx) .byte 0xf0; .byte 0xf3; addw %ax,(%ecx) xacquire lock andw %ax,(%ecx) lock xacquire andw %ax,(%ecx) xrelease lock andw %ax,(%ecx) lock xrelease andw %ax,(%ecx) .byte 0xf0; .byte 0xf2; andw %ax,(%ecx) .byte 0xf0; .byte 0xf3; andw %ax,(%ecx) xrelease movw %ax,(%ecx) xrelease movw %ax,0x12345678 xacquire lock orw %ax,(%ecx) lock xacquire orw %ax,(%ecx) xrelease lock orw %ax,(%ecx) lock xrelease orw %ax,(%ecx) .byte 0xf0; .byte 0xf2; orw %ax,(%ecx) .byte 0xf0; .byte 0xf3; orw %ax,(%ecx) xacquire lock sbbw %ax,(%ecx) lock xacquire sbbw %ax,(%ecx) xrelease lock sbbw %ax,(%ecx) lock xrelease sbbw %ax,(%ecx) .byte 0xf0; .byte 0xf2; sbbw %ax,(%ecx) .byte 0xf0; .byte 0xf3; sbbw %ax,(%ecx) xacquire lock subw %ax,(%ecx) lock xacquire subw %ax,(%ecx) xrelease lock subw %ax,(%ecx) lock xrelease subw %ax,(%ecx) .byte 0xf0; .byte 0xf2; subw %ax,(%ecx) .byte 0xf0; .byte 0xf3; subw %ax,(%ecx) xacquire lock xchgw %ax,(%ecx) lock xacquire xchgw %ax,(%ecx) xacquire xchgw %ax,(%ecx) xrelease lock xchgw %ax,(%ecx) lock xrelease xchgw %ax,(%ecx) xrelease xchgw %ax,(%ecx) .byte 0xf0; .byte 0xf2; xchgw %ax,(%ecx) .byte 0xf0; .byte 0xf3; xchgw %ax,(%ecx) xacquire lock xorw %ax,(%ecx) lock xacquire xorw %ax,(%ecx) xrelease lock xorw %ax,(%ecx) lock xrelease xorw %ax,(%ecx) .byte 0xf0; .byte 0xf2; xorw %ax,(%ecx) .byte 0xf0; .byte 0xf3; xorw %ax,(%ecx) # Tests for op regl regl/m32 # Tests for op regl/m32 regl xacquire lock adcl %eax,(%ecx) lock xacquire adcl %eax,(%ecx) xrelease lock adcl %eax,(%ecx) lock xrelease adcl %eax,(%ecx) .byte 0xf0; .byte 0xf2; adcl %eax,(%ecx) .byte 0xf0; .byte 0xf3; adcl %eax,(%ecx) xacquire lock addl %eax,(%ecx) lock xacquire addl %eax,(%ecx) xrelease lock addl %eax,(%ecx) lock xrelease addl %eax,(%ecx) .byte 0xf0; .byte 0xf2; addl %eax,(%ecx) .byte 0xf0; .byte 0xf3; addl %eax,(%ecx) xacquire lock andl %eax,(%ecx) lock xacquire andl %eax,(%ecx) xrelease lock andl %eax,(%ecx) lock xrelease andl %eax,(%ecx) .byte 0xf0; .byte 0xf2; andl %eax,(%ecx) .byte 0xf0; .byte 0xf3; andl %eax,(%ecx) xrelease movl %eax,(%ecx) xrelease movl %eax,0x12345678 xacquire lock orl %eax,(%ecx) lock xacquire orl %eax,(%ecx) xrelease lock orl %eax,(%ecx) lock xrelease orl %eax,(%ecx) .byte 0xf0; .byte 0xf2; orl %eax,(%ecx) .byte 0xf0; .byte 0xf3; orl %eax,(%ecx) xacquire lock sbbl %eax,(%ecx) lock xacquire sbbl %eax,(%ecx) xrelease lock sbbl %eax,(%ecx) lock xrelease sbbl %eax,(%ecx) .byte 0xf0; .byte 0xf2; sbbl %eax,(%ecx) .byte 0xf0; .byte 0xf3; sbbl %eax,(%ecx) xacquire lock subl %eax,(%ecx) lock xacquire subl %eax,(%ecx) xrelease lock subl %eax,(%ecx) lock xrelease subl %eax,(%ecx) .byte 0xf0; .byte 0xf2; subl %eax,(%ecx) .byte 0xf0; .byte 0xf3; subl %eax,(%ecx) xacquire lock xchgl %eax,(%ecx) lock xacquire xchgl %eax,(%ecx) xacquire xchgl %eax,(%ecx) xrelease lock xchgl %eax,(%ecx) lock xrelease xchgl %eax,(%ecx) xrelease xchgl %eax,(%ecx) .byte 0xf0; .byte 0xf2; xchgl %eax,(%ecx) .byte 0xf0; .byte 0xf3; xchgl %eax,(%ecx) xacquire lock xorl %eax,(%ecx) lock xacquire xorl %eax,(%ecx) xrelease lock xorl %eax,(%ecx) lock xrelease xorl %eax,(%ecx) .byte 0xf0; .byte 0xf2; xorl %eax,(%ecx) .byte 0xf0; .byte 0xf3; xorl %eax,(%ecx) # Tests for op regs, regs/m16 xacquire lock btcw %ax,(%ecx) lock xacquire btcw %ax,(%ecx) xrelease lock btcw %ax,(%ecx) lock xrelease btcw %ax,(%ecx) .byte 0xf0; .byte 0xf2; btcw %ax,(%ecx) .byte 0xf0; .byte 0xf3; btcw %ax,(%ecx) xacquire lock btrw %ax,(%ecx) lock xacquire btrw %ax,(%ecx) xrelease lock btrw %ax,(%ecx) lock xrelease btrw %ax,(%ecx) .byte 0xf0; .byte 0xf2; btrw %ax,(%ecx) .byte 0xf0; .byte 0xf3; btrw %ax,(%ecx) xacquire lock btsw %ax,(%ecx) lock xacquire btsw %ax,(%ecx) xrelease lock btsw %ax,(%ecx) lock xrelease btsw %ax,(%ecx) .byte 0xf0; .byte 0xf2; btsw %ax,(%ecx) .byte 0xf0; .byte 0xf3; btsw %ax,(%ecx) xacquire lock cmpxchgw %ax,(%ecx) lock xacquire cmpxchgw %ax,(%ecx) xrelease lock cmpxchgw %ax,(%ecx) lock xrelease cmpxchgw %ax,(%ecx) .byte 0xf0; .byte 0xf2; cmpxchgw %ax,(%ecx) .byte 0xf0; .byte 0xf3; cmpxchgw %ax,(%ecx) xacquire lock xaddw %ax,(%ecx) lock xacquire xaddw %ax,(%ecx) xrelease lock xaddw %ax,(%ecx) lock xrelease xaddw %ax,(%ecx) .byte 0xf0; .byte 0xf2; xaddw %ax,(%ecx) .byte 0xf0; .byte 0xf3; xaddw %ax,(%ecx) # Tests for op regl regl/m32 xacquire lock btcl %eax,(%ecx) lock xacquire btcl %eax,(%ecx) xrelease lock btcl %eax,(%ecx) lock xrelease btcl %eax,(%ecx) .byte 0xf0; .byte 0xf2; btcl %eax,(%ecx) .byte 0xf0; .byte 0xf3; btcl %eax,(%ecx) xacquire lock btrl %eax,(%ecx) lock xacquire btrl %eax,(%ecx) xrelease lock btrl %eax,(%ecx) lock xrelease btrl %eax,(%ecx) .byte 0xf0; .byte 0xf2; btrl %eax,(%ecx) .byte 0xf0; .byte 0xf3; btrl %eax,(%ecx) xacquire lock btsl %eax,(%ecx) lock xacquire btsl %eax,(%ecx) xrelease lock btsl %eax,(%ecx) lock xrelease btsl %eax,(%ecx) .byte 0xf0; .byte 0xf2; btsl %eax,(%ecx) .byte 0xf0; .byte 0xf3; btsl %eax,(%ecx) xacquire lock cmpxchgl %eax,(%ecx) lock xacquire cmpxchgl %eax,(%ecx) xrelease lock cmpxchgl %eax,(%ecx) lock xrelease cmpxchgl %eax,(%ecx) .byte 0xf0; .byte 0xf2; cmpxchgl %eax,(%ecx) .byte 0xf0; .byte 0xf3; cmpxchgl %eax,(%ecx) xacquire lock xaddl %eax,(%ecx) lock xacquire xaddl %eax,(%ecx) xrelease lock xaddl %eax,(%ecx) lock xrelease xaddl %eax,(%ecx) .byte 0xf0; .byte 0xf2; xaddl %eax,(%ecx) .byte 0xf0; .byte 0xf3; xaddl %eax,(%ecx) # Tests for op regb/m8 xacquire lock decb (%ecx) lock xacquire decb (%ecx) xrelease lock decb (%ecx) lock xrelease decb (%ecx) .byte 0xf0; .byte 0xf2; decb (%ecx) .byte 0xf0; .byte 0xf3; decb (%ecx) xacquire lock incb (%ecx) lock xacquire incb (%ecx) xrelease lock incb (%ecx) lock xrelease incb (%ecx) .byte 0xf0; .byte 0xf2; incb (%ecx) .byte 0xf0; .byte 0xf3; incb (%ecx) xacquire lock negb (%ecx) lock xacquire negb (%ecx) xrelease lock negb (%ecx) lock xrelease negb (%ecx) .byte 0xf0; .byte 0xf2; negb (%ecx) .byte 0xf0; .byte 0xf3; negb (%ecx) xacquire lock notb (%ecx) lock xacquire notb (%ecx) xrelease lock notb (%ecx) lock xrelease notb (%ecx) .byte 0xf0; .byte 0xf2; notb (%ecx) .byte 0xf0; .byte 0xf3; notb (%ecx) # Tests for op regs/m16 xacquire lock decw (%ecx) lock xacquire decw (%ecx) xrelease lock decw (%ecx) lock xrelease decw (%ecx) .byte 0xf0; .byte 0xf2; decw (%ecx) .byte 0xf0; .byte 0xf3; decw (%ecx) xacquire lock incw (%ecx) lock xacquire incw (%ecx) xrelease lock incw (%ecx) lock xrelease incw (%ecx) .byte 0xf0; .byte 0xf2; incw (%ecx) .byte 0xf0; .byte 0xf3; incw (%ecx) xacquire lock negw (%ecx) lock xacquire negw (%ecx) xrelease lock negw (%ecx) lock xrelease negw (%ecx) .byte 0xf0; .byte 0xf2; negw (%ecx) .byte 0xf0; .byte 0xf3; negw (%ecx) xacquire lock notw (%ecx) lock xacquire notw (%ecx) xrelease lock notw (%ecx) lock xrelease notw (%ecx) .byte 0xf0; .byte 0xf2; notw (%ecx) .byte 0xf0; .byte 0xf3; notw (%ecx) # Tests for op regl/m32 xacquire lock decl (%ecx) lock xacquire decl (%ecx) xrelease lock decl (%ecx) lock xrelease decl (%ecx) .byte 0xf0; .byte 0xf2; decl (%ecx) .byte 0xf0; .byte 0xf3; decl (%ecx) xacquire lock incl (%ecx) lock xacquire incl (%ecx) xrelease lock incl (%ecx) lock xrelease incl (%ecx) .byte 0xf0; .byte 0xf2; incl (%ecx) .byte 0xf0; .byte 0xf3; incl (%ecx) xacquire lock negl (%ecx) lock xacquire negl (%ecx) xrelease lock negl (%ecx) lock xrelease negl (%ecx) .byte 0xf0; .byte 0xf2; negl (%ecx) .byte 0xf0; .byte 0xf3; negl (%ecx) xacquire lock notl (%ecx) lock xacquire notl (%ecx) xrelease lock notl (%ecx) lock xrelease notl (%ecx) .byte 0xf0; .byte 0xf2; notl (%ecx) .byte 0xf0; .byte 0xf3; notl (%ecx) # Tests for op m64 xacquire lock cmpxchg8bq (%ecx) lock xacquire cmpxchg8bq (%ecx) xrelease lock cmpxchg8bq (%ecx) lock xrelease cmpxchg8bq (%ecx) .byte 0xf0; .byte 0xf2; cmpxchg8bq (%ecx) .byte 0xf0; .byte 0xf3; cmpxchg8bq (%ecx) # Tests for op regb, regb/m8 xacquire lock cmpxchgb %cl,(%ecx) lock xacquire cmpxchgb %cl,(%ecx) xrelease lock cmpxchgb %cl,(%ecx) lock xrelease cmpxchgb %cl,(%ecx) .byte 0xf0; .byte 0xf2; cmpxchgb %cl,(%ecx) .byte 0xf0; .byte 0xf3; cmpxchgb %cl,(%ecx) xacquire lock xaddb %cl,(%ecx) lock xacquire xaddb %cl,(%ecx) xrelease lock xaddb %cl,(%ecx) lock xrelease xaddb %cl,(%ecx) .byte 0xf0; .byte 0xf2; xaddb %cl,(%ecx) .byte 0xf0; .byte 0xf3; xaddb %cl,(%ecx) .intel_syntax noprefix # Tests for op imm8 regb/m8 xacquire lock adc BYTE PTR [ecx],100 lock xacquire adc BYTE PTR [ecx],100 xrelease lock adc BYTE PTR [ecx],100 lock xrelease adc BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf2; adc BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf3; adc BYTE PTR [ecx],100 xacquire lock add BYTE PTR [ecx],100 lock xacquire add BYTE PTR [ecx],100 xrelease lock add BYTE PTR [ecx],100 lock xrelease add BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf2; add BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf3; add BYTE PTR [ecx],100 xacquire lock and BYTE PTR [ecx],100 lock xacquire and BYTE PTR [ecx],100 xrelease lock and BYTE PTR [ecx],100 lock xrelease and BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf2; and BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf3; and BYTE PTR [ecx],100 xrelease mov BYTE PTR [ecx],100 xacquire lock or BYTE PTR [ecx],100 lock xacquire or BYTE PTR [ecx],100 xrelease lock or BYTE PTR [ecx],100 lock xrelease or BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf2; or BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf3; or BYTE PTR [ecx],100 xacquire lock sbb BYTE PTR [ecx],100 lock xacquire sbb BYTE PTR [ecx],100 xrelease lock sbb BYTE PTR [ecx],100 lock xrelease sbb BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf2; sbb BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf3; sbb BYTE PTR [ecx],100 xacquire lock sub BYTE PTR [ecx],100 lock xacquire sub BYTE PTR [ecx],100 xrelease lock sub BYTE PTR [ecx],100 lock xrelease sub BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf2; sub BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf3; sub BYTE PTR [ecx],100 xacquire lock xor BYTE PTR [ecx],100 lock xacquire xor BYTE PTR [ecx],100 xrelease lock xor BYTE PTR [ecx],100 lock xrelease xor BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf2; xor BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf3; xor BYTE PTR [ecx],100 # Tests for op imm16 regs/m16 xacquire lock adc WORD PTR [ecx],1000 lock xacquire adc WORD PTR [ecx],1000 xrelease lock adc WORD PTR [ecx],1000 lock xrelease adc WORD PTR [ecx],1000 .byte 0xf0; .byte 0xf2; adc WORD PTR [ecx],1000 .byte 0xf0; .byte 0xf3; adc WORD PTR [ecx],1000 xacquire lock add WORD PTR [ecx],1000 lock xacquire add WORD PTR [ecx],1000 xrelease lock add WORD PTR [ecx],1000 lock xrelease add WORD PTR [ecx],1000 .byte 0xf0; .byte 0xf2; add WORD PTR [ecx],1000 .byte 0xf0; .byte 0xf3; add WORD PTR [ecx],1000 xacquire lock and WORD PTR [ecx],1000 lock xacquire and WORD PTR [ecx],1000 xrelease lock and WORD PTR [ecx],1000 lock xrelease and WORD PTR [ecx],1000 .byte 0xf0; .byte 0xf2; and WORD PTR [ecx],1000 .byte 0xf0; .byte 0xf3; and WORD PTR [ecx],1000 xrelease mov WORD PTR [ecx],1000 xacquire lock or WORD PTR [ecx],1000 lock xacquire or WORD PTR [ecx],1000 xrelease lock or WORD PTR [ecx],1000 lock xrelease or WORD PTR [ecx],1000 .byte 0xf0; .byte 0xf2; or WORD PTR [ecx],1000 .byte 0xf0; .byte 0xf3; or WORD PTR [ecx],1000 xacquire lock sbb WORD PTR [ecx],1000 lock xacquire sbb WORD PTR [ecx],1000 xrelease lock sbb WORD PTR [ecx],1000 lock xrelease sbb WORD PTR [ecx],1000 .byte 0xf0; .byte 0xf2; sbb WORD PTR [ecx],1000 .byte 0xf0; .byte 0xf3; sbb WORD PTR [ecx],1000 xacquire lock sub WORD PTR [ecx],1000 lock xacquire sub WORD PTR [ecx],1000 xrelease lock sub WORD PTR [ecx],1000 lock xrelease sub WORD PTR [ecx],1000 .byte 0xf0; .byte 0xf2; sub WORD PTR [ecx],1000 .byte 0xf0; .byte 0xf3; sub WORD PTR [ecx],1000 xacquire lock xor WORD PTR [ecx],1000 lock xacquire xor WORD PTR [ecx],1000 xrelease lock xor WORD PTR [ecx],1000 lock xrelease xor WORD PTR [ecx],1000 .byte 0xf0; .byte 0xf2; xor WORD PTR [ecx],1000 .byte 0xf0; .byte 0xf3; xor WORD PTR [ecx],1000 # Tests for op imm32 regl/m32 xacquire lock adc DWORD PTR [ecx],10000000 lock xacquire adc DWORD PTR [ecx],10000000 xrelease lock adc DWORD PTR [ecx],10000000 lock xrelease adc DWORD PTR [ecx],10000000 .byte 0xf0; .byte 0xf2; adc DWORD PTR [ecx],10000000 .byte 0xf0; .byte 0xf3; adc DWORD PTR [ecx],10000000 xacquire lock add DWORD PTR [ecx],10000000 lock xacquire add DWORD PTR [ecx],10000000 xrelease lock add DWORD PTR [ecx],10000000 lock xrelease add DWORD PTR [ecx],10000000 .byte 0xf0; .byte 0xf2; add DWORD PTR [ecx],10000000 .byte 0xf0; .byte 0xf3; add DWORD PTR [ecx],10000000 xacquire lock and DWORD PTR [ecx],10000000 lock xacquire and DWORD PTR [ecx],10000000 xrelease lock and DWORD PTR [ecx],10000000 lock xrelease and DWORD PTR [ecx],10000000 .byte 0xf0; .byte 0xf2; and DWORD PTR [ecx],10000000 .byte 0xf0; .byte 0xf3; and DWORD PTR [ecx],10000000 xrelease mov DWORD PTR [ecx],10000000 xacquire lock or DWORD PTR [ecx],10000000 lock xacquire or DWORD PTR [ecx],10000000 xrelease lock or DWORD PTR [ecx],10000000 lock xrelease or DWORD PTR [ecx],10000000 .byte 0xf0; .byte 0xf2; or DWORD PTR [ecx],10000000 .byte 0xf0; .byte 0xf3; or DWORD PTR [ecx],10000000 xacquire lock sbb DWORD PTR [ecx],10000000 lock xacquire sbb DWORD PTR [ecx],10000000 xrelease lock sbb DWORD PTR [ecx],10000000 lock xrelease sbb DWORD PTR [ecx],10000000 .byte 0xf0; .byte 0xf2; sbb DWORD PTR [ecx],10000000 .byte 0xf0; .byte 0xf3; sbb DWORD PTR [ecx],10000000 xacquire lock sub DWORD PTR [ecx],10000000 lock xacquire sub DWORD PTR [ecx],10000000 xrelease lock sub DWORD PTR [ecx],10000000 lock xrelease sub DWORD PTR [ecx],10000000 .byte 0xf0; .byte 0xf2; sub DWORD PTR [ecx],10000000 .byte 0xf0; .byte 0xf3; sub DWORD PTR [ecx],10000000 xacquire lock xor DWORD PTR [ecx],10000000 lock xacquire xor DWORD PTR [ecx],10000000 xrelease lock xor DWORD PTR [ecx],10000000 lock xrelease xor DWORD PTR [ecx],10000000 .byte 0xf0; .byte 0xf2; xor DWORD PTR [ecx],10000000 .byte 0xf0; .byte 0xf3; xor DWORD PTR [ecx],10000000 # Tests for op imm8 regs/m16 xacquire lock adc WORD PTR [ecx],100 lock xacquire adc WORD PTR [ecx],100 xrelease lock adc WORD PTR [ecx],100 lock xrelease adc WORD PTR [ecx],100 .byte 0xf0; .byte 0xf2; adc WORD PTR [ecx],100 .byte 0xf0; .byte 0xf3; adc WORD PTR [ecx],100 xacquire lock add WORD PTR [ecx],100 lock xacquire add WORD PTR [ecx],100 xrelease lock add WORD PTR [ecx],100 lock xrelease add WORD PTR [ecx],100 .byte 0xf0; .byte 0xf2; add WORD PTR [ecx],100 .byte 0xf0; .byte 0xf3; add WORD PTR [ecx],100 xacquire lock and WORD PTR [ecx],100 lock xacquire and WORD PTR [ecx],100 xrelease lock and WORD PTR [ecx],100 lock xrelease and WORD PTR [ecx],100 .byte 0xf0; .byte 0xf2; and WORD PTR [ecx],100 .byte 0xf0; .byte 0xf3; and WORD PTR [ecx],100 xacquire lock btc WORD PTR [ecx],100 lock xacquire btc WORD PTR [ecx],100 xrelease lock btc WORD PTR [ecx],100 lock xrelease btc WORD PTR [ecx],100 .byte 0xf0; .byte 0xf2; btc WORD PTR [ecx],100 .byte 0xf0; .byte 0xf3; btc WORD PTR [ecx],100 xacquire lock btr WORD PTR [ecx],100 lock xacquire btr WORD PTR [ecx],100 xrelease lock btr WORD PTR [ecx],100 lock xrelease btr WORD PTR [ecx],100 .byte 0xf0; .byte 0xf2; btr WORD PTR [ecx],100 .byte 0xf0; .byte 0xf3; btr WORD PTR [ecx],100 xacquire lock bts WORD PTR [ecx],100 lock xacquire bts WORD PTR [ecx],100 xrelease lock bts WORD PTR [ecx],100 lock xrelease bts WORD PTR [ecx],100 .byte 0xf0; .byte 0xf2; bts WORD PTR [ecx],100 .byte 0xf0; .byte 0xf3; bts WORD PTR [ecx],100 xrelease mov WORD PTR [ecx],100 xacquire lock or WORD PTR [ecx],100 lock xacquire or WORD PTR [ecx],100 xrelease lock or WORD PTR [ecx],100 lock xrelease or WORD PTR [ecx],100 .byte 0xf0; .byte 0xf2; or WORD PTR [ecx],100 .byte 0xf0; .byte 0xf3; or WORD PTR [ecx],100 xacquire lock sbb WORD PTR [ecx],100 lock xacquire sbb WORD PTR [ecx],100 xrelease lock sbb WORD PTR [ecx],100 lock xrelease sbb WORD PTR [ecx],100 .byte 0xf0; .byte 0xf2; sbb WORD PTR [ecx],100 .byte 0xf0; .byte 0xf3; sbb WORD PTR [ecx],100 xacquire lock sub WORD PTR [ecx],100 lock xacquire sub WORD PTR [ecx],100 xrelease lock sub WORD PTR [ecx],100 lock xrelease sub WORD PTR [ecx],100 .byte 0xf0; .byte 0xf2; sub WORD PTR [ecx],100 .byte 0xf0; .byte 0xf3; sub WORD PTR [ecx],100 xacquire lock xor WORD PTR [ecx],100 lock xacquire xor WORD PTR [ecx],100 xrelease lock xor WORD PTR [ecx],100 lock xrelease xor WORD PTR [ecx],100 .byte 0xf0; .byte 0xf2; xor WORD PTR [ecx],100 .byte 0xf0; .byte 0xf3; xor WORD PTR [ecx],100 # Tests for op imm8 regl/m32 xacquire lock adc DWORD PTR [ecx],100 lock xacquire adc DWORD PTR [ecx],100 xrelease lock adc DWORD PTR [ecx],100 lock xrelease adc DWORD PTR [ecx],100 .byte 0xf0; .byte 0xf2; adc DWORD PTR [ecx],100 .byte 0xf0; .byte 0xf3; adc DWORD PTR [ecx],100 xacquire lock add DWORD PTR [ecx],100 lock xacquire add DWORD PTR [ecx],100 xrelease lock add DWORD PTR [ecx],100 lock xrelease add DWORD PTR [ecx],100 .byte 0xf0; .byte 0xf2; add DWORD PTR [ecx],100 .byte 0xf0; .byte 0xf3; add DWORD PTR [ecx],100 xacquire lock and DWORD PTR [ecx],100 lock xacquire and DWORD PTR [ecx],100 xrelease lock and DWORD PTR [ecx],100 lock xrelease and DWORD PTR [ecx],100 .byte 0xf0; .byte 0xf2; and DWORD PTR [ecx],100 .byte 0xf0; .byte 0xf3; and DWORD PTR [ecx],100 xacquire lock btc DWORD PTR [ecx],100 lock xacquire btc DWORD PTR [ecx],100 xrelease lock btc DWORD PTR [ecx],100 lock xrelease btc DWORD PTR [ecx],100 .byte 0xf0; .byte 0xf2; btc DWORD PTR [ecx],100 .byte 0xf0; .byte 0xf3; btc DWORD PTR [ecx],100 xacquire lock btr DWORD PTR [ecx],100 lock xacquire btr DWORD PTR [ecx],100 xrelease lock btr DWORD PTR [ecx],100 lock xrelease btr DWORD PTR [ecx],100 .byte 0xf0; .byte 0xf2; btr DWORD PTR [ecx],100 .byte 0xf0; .byte 0xf3; btr DWORD PTR [ecx],100 xacquire lock bts DWORD PTR [ecx],100 lock xacquire bts DWORD PTR [ecx],100 xrelease lock bts DWORD PTR [ecx],100 lock xrelease bts DWORD PTR [ecx],100 .byte 0xf0; .byte 0xf2; bts DWORD PTR [ecx],100 .byte 0xf0; .byte 0xf3; bts DWORD PTR [ecx],100 xrelease mov DWORD PTR [ecx],100 xacquire lock or DWORD PTR [ecx],100 lock xacquire or DWORD PTR [ecx],100 xrelease lock or DWORD PTR [ecx],100 lock xrelease or DWORD PTR [ecx],100 .byte 0xf0; .byte 0xf2; or DWORD PTR [ecx],100 .byte 0xf0; .byte 0xf3; or DWORD PTR [ecx],100 xacquire lock sbb DWORD PTR [ecx],100 lock xacquire sbb DWORD PTR [ecx],100 xrelease lock sbb DWORD PTR [ecx],100 lock xrelease sbb DWORD PTR [ecx],100 .byte 0xf0; .byte 0xf2; sbb DWORD PTR [ecx],100 .byte 0xf0; .byte 0xf3; sbb DWORD PTR [ecx],100 xacquire lock sub DWORD PTR [ecx],100 lock xacquire sub DWORD PTR [ecx],100 xrelease lock sub DWORD PTR [ecx],100 lock xrelease sub DWORD PTR [ecx],100 .byte 0xf0; .byte 0xf2; sub DWORD PTR [ecx],100 .byte 0xf0; .byte 0xf3; sub DWORD PTR [ecx],100 xacquire lock xor DWORD PTR [ecx],100 lock xacquire xor DWORD PTR [ecx],100 xrelease lock xor DWORD PTR [ecx],100 lock xrelease xor DWORD PTR [ecx],100 .byte 0xf0; .byte 0xf2; xor DWORD PTR [ecx],100 .byte 0xf0; .byte 0xf3; xor DWORD PTR [ecx],100 # Tests for op imm8 regb/m8 xacquire lock adc BYTE PTR [ecx],100 lock xacquire adc BYTE PTR [ecx],100 xrelease lock adc BYTE PTR [ecx],100 lock xrelease adc BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf2; adc BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf3; adc BYTE PTR [ecx],100 xacquire lock add BYTE PTR [ecx],100 lock xacquire add BYTE PTR [ecx],100 xrelease lock add BYTE PTR [ecx],100 lock xrelease add BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf2; add BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf3; add BYTE PTR [ecx],100 xacquire lock and BYTE PTR [ecx],100 lock xacquire and BYTE PTR [ecx],100 xrelease lock and BYTE PTR [ecx],100 lock xrelease and BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf2; and BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf3; and BYTE PTR [ecx],100 xrelease mov BYTE PTR [ecx],100 xacquire lock or BYTE PTR [ecx],100 lock xacquire or BYTE PTR [ecx],100 xrelease lock or BYTE PTR [ecx],100 lock xrelease or BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf2; or BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf3; or BYTE PTR [ecx],100 xacquire lock sbb BYTE PTR [ecx],100 lock xacquire sbb BYTE PTR [ecx],100 xrelease lock sbb BYTE PTR [ecx],100 lock xrelease sbb BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf2; sbb BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf3; sbb BYTE PTR [ecx],100 xacquire lock sub BYTE PTR [ecx],100 lock xacquire sub BYTE PTR [ecx],100 xrelease lock sub BYTE PTR [ecx],100 lock xrelease sub BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf2; sub BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf3; sub BYTE PTR [ecx],100 xacquire lock xor BYTE PTR [ecx],100 lock xacquire xor BYTE PTR [ecx],100 xrelease lock xor BYTE PTR [ecx],100 lock xrelease xor BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf2; xor BYTE PTR [ecx],100 .byte 0xf0; .byte 0xf3; xor BYTE PTR [ecx],100 # Tests for op regb regb/m8 # Tests for op regb/m8 regb xacquire lock adc BYTE PTR [ecx],al lock xacquire adc BYTE PTR [ecx],al xrelease lock adc BYTE PTR [ecx],al lock xrelease adc BYTE PTR [ecx],al .byte 0xf0; .byte 0xf2; adc BYTE PTR [ecx],al .byte 0xf0; .byte 0xf3; adc BYTE PTR [ecx],al xacquire lock add BYTE PTR [ecx],al lock xacquire add BYTE PTR [ecx],al xrelease lock add BYTE PTR [ecx],al lock xrelease add BYTE PTR [ecx],al .byte 0xf0; .byte 0xf2; add BYTE PTR [ecx],al .byte 0xf0; .byte 0xf3; add BYTE PTR [ecx],al xacquire lock and BYTE PTR [ecx],al lock xacquire and BYTE PTR [ecx],al xrelease lock and BYTE PTR [ecx],al lock xrelease and BYTE PTR [ecx],al .byte 0xf0; .byte 0xf2; and BYTE PTR [ecx],al .byte 0xf0; .byte 0xf3; and BYTE PTR [ecx],al xrelease mov BYTE PTR [ecx],al xacquire lock or BYTE PTR [ecx],al lock xacquire or BYTE PTR [ecx],al xrelease lock or BYTE PTR [ecx],al lock xrelease or BYTE PTR [ecx],al .byte 0xf0; .byte 0xf2; or BYTE PTR [ecx],al .byte 0xf0; .byte 0xf3; or BYTE PTR [ecx],al xacquire lock sbb BYTE PTR [ecx],al lock xacquire sbb BYTE PTR [ecx],al xrelease lock sbb BYTE PTR [ecx],al lock xrelease sbb BYTE PTR [ecx],al .byte 0xf0; .byte 0xf2; sbb BYTE PTR [ecx],al .byte 0xf0; .byte 0xf3; sbb BYTE PTR [ecx],al xacquire lock sub BYTE PTR [ecx],al lock xacquire sub BYTE PTR [ecx],al xrelease lock sub BYTE PTR [ecx],al lock xrelease sub BYTE PTR [ecx],al .byte 0xf0; .byte 0xf2; sub BYTE PTR [ecx],al .byte 0xf0; .byte 0xf3; sub BYTE PTR [ecx],al xacquire lock xchg BYTE PTR [ecx],al lock xacquire xchg BYTE PTR [ecx],al xacquire xchg BYTE PTR [ecx],al xrelease lock xchg BYTE PTR [ecx],al lock xrelease xchg BYTE PTR [ecx],al xrelease xchg BYTE PTR [ecx],al .byte 0xf0; .byte 0xf2; xchg BYTE PTR [ecx],al .byte 0xf0; .byte 0xf3; xchg BYTE PTR [ecx],al xacquire lock xor BYTE PTR [ecx],al lock xacquire xor BYTE PTR [ecx],al xrelease lock xor BYTE PTR [ecx],al lock xrelease xor BYTE PTR [ecx],al .byte 0xf0; .byte 0xf2; xor BYTE PTR [ecx],al .byte 0xf0; .byte 0xf3; xor BYTE PTR [ecx],al # Tests for op regs regs/m16 # Tests for op regs/m16 regs xacquire lock adc WORD PTR [ecx],ax lock xacquire adc WORD PTR [ecx],ax xrelease lock adc WORD PTR [ecx],ax lock xrelease adc WORD PTR [ecx],ax .byte 0xf0; .byte 0xf2; adc WORD PTR [ecx],ax .byte 0xf0; .byte 0xf3; adc WORD PTR [ecx],ax xacquire lock add WORD PTR [ecx],ax lock xacquire add WORD PTR [ecx],ax xrelease lock add WORD PTR [ecx],ax lock xrelease add WORD PTR [ecx],ax .byte 0xf0; .byte 0xf2; add WORD PTR [ecx],ax .byte 0xf0; .byte 0xf3; add WORD PTR [ecx],ax xacquire lock and WORD PTR [ecx],ax lock xacquire and WORD PTR [ecx],ax xrelease lock and WORD PTR [ecx],ax lock xrelease and WORD PTR [ecx],ax .byte 0xf0; .byte 0xf2; and WORD PTR [ecx],ax .byte 0xf0; .byte 0xf3; and WORD PTR [ecx],ax xrelease mov WORD PTR [ecx],ax xacquire lock or WORD PTR [ecx],ax lock xacquire or WORD PTR [ecx],ax xrelease lock or WORD PTR [ecx],ax lock xrelease or WORD PTR [ecx],ax .byte 0xf0; .byte 0xf2; or WORD PTR [ecx],ax .byte 0xf0; .byte 0xf3; or WORD PTR [ecx],ax xacquire lock sbb WORD PTR [ecx],ax lock xacquire sbb WORD PTR [ecx],ax xrelease lock sbb WORD PTR [ecx],ax lock xrelease sbb WORD PTR [ecx],ax .byte 0xf0; .byte 0xf2; sbb WORD PTR [ecx],ax .byte 0xf0; .byte 0xf3; sbb WORD PTR [ecx],ax xacquire lock sub WORD PTR [ecx],ax lock xacquire sub WORD PTR [ecx],ax xrelease lock sub WORD PTR [ecx],ax lock xrelease sub WORD PTR [ecx],ax .byte 0xf0; .byte 0xf2; sub WORD PTR [ecx],ax .byte 0xf0; .byte 0xf3; sub WORD PTR [ecx],ax xacquire lock xchg WORD PTR [ecx],ax lock xacquire xchg WORD PTR [ecx],ax xacquire xchg WORD PTR [ecx],ax xrelease lock xchg WORD PTR [ecx],ax lock xrelease xchg WORD PTR [ecx],ax xrelease xchg WORD PTR [ecx],ax .byte 0xf0; .byte 0xf2; xchg WORD PTR [ecx],ax .byte 0xf0; .byte 0xf3; xchg WORD PTR [ecx],ax xacquire lock xor WORD PTR [ecx],ax lock xacquire xor WORD PTR [ecx],ax xrelease lock xor WORD PTR [ecx],ax lock xrelease xor WORD PTR [ecx],ax .byte 0xf0; .byte 0xf2; xor WORD PTR [ecx],ax .byte 0xf0; .byte 0xf3; xor WORD PTR [ecx],ax # Tests for op regl regl/m32 # Tests for op regl/m32 regl xacquire lock adc DWORD PTR [ecx],eax lock xacquire adc DWORD PTR [ecx],eax xrelease lock adc DWORD PTR [ecx],eax lock xrelease adc DWORD PTR [ecx],eax .byte 0xf0; .byte 0xf2; adc DWORD PTR [ecx],eax .byte 0xf0; .byte 0xf3; adc DWORD PTR [ecx],eax xacquire lock add DWORD PTR [ecx],eax lock xacquire add DWORD PTR [ecx],eax xrelease lock add DWORD PTR [ecx],eax lock xrelease add DWORD PTR [ecx],eax .byte 0xf0; .byte 0xf2; add DWORD PTR [ecx],eax .byte 0xf0; .byte 0xf3; add DWORD PTR [ecx],eax xacquire lock and DWORD PTR [ecx],eax lock xacquire and DWORD PTR [ecx],eax xrelease lock and DWORD PTR [ecx],eax lock xrelease and DWORD PTR [ecx],eax .byte 0xf0; .byte 0xf2; and DWORD PTR [ecx],eax .byte 0xf0; .byte 0xf3; and DWORD PTR [ecx],eax xrelease mov DWORD PTR [ecx],eax xacquire lock or DWORD PTR [ecx],eax lock xacquire or DWORD PTR [ecx],eax xrelease lock or DWORD PTR [ecx],eax lock xrelease or DWORD PTR [ecx],eax .byte 0xf0; .byte 0xf2; or DWORD PTR [ecx],eax .byte 0xf0; .byte 0xf3; or DWORD PTR [ecx],eax xacquire lock sbb DWORD PTR [ecx],eax lock xacquire sbb DWORD PTR [ecx],eax xrelease lock sbb DWORD PTR [ecx],eax lock xrelease sbb DWORD PTR [ecx],eax .byte 0xf0; .byte 0xf2; sbb DWORD PTR [ecx],eax .byte 0xf0; .byte 0xf3; sbb DWORD PTR [ecx],eax xacquire lock sub DWORD PTR [ecx],eax lock xacquire sub DWORD PTR [ecx],eax xrelease lock sub DWORD PTR [ecx],eax lock xrelease sub DWORD PTR [ecx],eax .byte 0xf0; .byte 0xf2; sub DWORD PTR [ecx],eax .byte 0xf0; .byte 0xf3; sub DWORD PTR [ecx],eax xacquire lock xchg DWORD PTR [ecx],eax lock xacquire xchg DWORD PTR [ecx],eax xacquire xchg DWORD PTR [ecx],eax xrelease lock xchg DWORD PTR [ecx],eax lock xrelease xchg DWORD PTR [ecx],eax xrelease xchg DWORD PTR [ecx],eax .byte 0xf0; .byte 0xf2; xchg DWORD PTR [ecx],eax .byte 0xf0; .byte 0xf3; xchg DWORD PTR [ecx],eax xacquire lock xor DWORD PTR [ecx],eax lock xacquire xor DWORD PTR [ecx],eax xrelease lock xor DWORD PTR [ecx],eax lock xrelease xor DWORD PTR [ecx],eax .byte 0xf0; .byte 0xf2; xor DWORD PTR [ecx],eax .byte 0xf0; .byte 0xf3; xor DWORD PTR [ecx],eax # Tests for op regs, regs/m16 xacquire lock btc WORD PTR [ecx],ax lock xacquire btc WORD PTR [ecx],ax xrelease lock btc WORD PTR [ecx],ax lock xrelease btc WORD PTR [ecx],ax .byte 0xf0; .byte 0xf2; btc WORD PTR [ecx],ax .byte 0xf0; .byte 0xf3; btc WORD PTR [ecx],ax xacquire lock btr WORD PTR [ecx],ax lock xacquire btr WORD PTR [ecx],ax xrelease lock btr WORD PTR [ecx],ax lock xrelease btr WORD PTR [ecx],ax .byte 0xf0; .byte 0xf2; btr WORD PTR [ecx],ax .byte 0xf0; .byte 0xf3; btr WORD PTR [ecx],ax xacquire lock bts WORD PTR [ecx],ax lock xacquire bts WORD PTR [ecx],ax xrelease lock bts WORD PTR [ecx],ax lock xrelease bts WORD PTR [ecx],ax .byte 0xf0; .byte 0xf2; bts WORD PTR [ecx],ax .byte 0xf0; .byte 0xf3; bts WORD PTR [ecx],ax xacquire lock cmpxchg WORD PTR [ecx],ax lock xacquire cmpxchg WORD PTR [ecx],ax xrelease lock cmpxchg WORD PTR [ecx],ax lock xrelease cmpxchg WORD PTR [ecx],ax .byte 0xf0; .byte 0xf2; cmpxchg WORD PTR [ecx],ax .byte 0xf0; .byte 0xf3; cmpxchg WORD PTR [ecx],ax xacquire lock xadd WORD PTR [ecx],ax lock xacquire xadd WORD PTR [ecx],ax xrelease lock xadd WORD PTR [ecx],ax lock xrelease xadd WORD PTR [ecx],ax .byte 0xf0; .byte 0xf2; xadd WORD PTR [ecx],ax .byte 0xf0; .byte 0xf3; xadd WORD PTR [ecx],ax # Tests for op regl regl/m32 xacquire lock btc DWORD PTR [ecx],eax lock xacquire btc DWORD PTR [ecx],eax xrelease lock btc DWORD PTR [ecx],eax lock xrelease btc DWORD PTR [ecx],eax .byte 0xf0; .byte 0xf2; btc DWORD PTR [ecx],eax .byte 0xf0; .byte 0xf3; btc DWORD PTR [ecx],eax xacquire lock btr DWORD PTR [ecx],eax lock xacquire btr DWORD PTR [ecx],eax xrelease lock btr DWORD PTR [ecx],eax lock xrelease btr DWORD PTR [ecx],eax .byte 0xf0; .byte 0xf2; btr DWORD PTR [ecx],eax .byte 0xf0; .byte 0xf3; btr DWORD PTR [ecx],eax xacquire lock bts DWORD PTR [ecx],eax lock xacquire bts DWORD PTR [ecx],eax xrelease lock bts DWORD PTR [ecx],eax lock xrelease bts DWORD PTR [ecx],eax .byte 0xf0; .byte 0xf2; bts DWORD PTR [ecx],eax .byte 0xf0; .byte 0xf3; bts DWORD PTR [ecx],eax xacquire lock cmpxchg DWORD PTR [ecx],eax lock xacquire cmpxchg DWORD PTR [ecx],eax xrelease lock cmpxchg DWORD PTR [ecx],eax lock xrelease cmpxchg DWORD PTR [ecx],eax .byte 0xf0; .byte 0xf2; cmpxchg DWORD PTR [ecx],eax .byte 0xf0; .byte 0xf3; cmpxchg DWORD PTR [ecx],eax xacquire lock xadd DWORD PTR [ecx],eax lock xacquire xadd DWORD PTR [ecx],eax xrelease lock xadd DWORD PTR [ecx],eax lock xrelease xadd DWORD PTR [ecx],eax .byte 0xf0; .byte 0xf2; xadd DWORD PTR [ecx],eax .byte 0xf0; .byte 0xf3; xadd DWORD PTR [ecx],eax # Tests for op regb/m8 xacquire lock dec BYTE PTR [ecx] lock xacquire dec BYTE PTR [ecx] xrelease lock dec BYTE PTR [ecx] lock xrelease dec BYTE PTR [ecx] .byte 0xf0; .byte 0xf2; dec BYTE PTR [ecx] .byte 0xf0; .byte 0xf3; dec BYTE PTR [ecx] xacquire lock inc BYTE PTR [ecx] lock xacquire inc BYTE PTR [ecx] xrelease lock inc BYTE PTR [ecx] lock xrelease inc BYTE PTR [ecx] .byte 0xf0; .byte 0xf2; inc BYTE PTR [ecx] .byte 0xf0; .byte 0xf3; inc BYTE PTR [ecx] xacquire lock neg BYTE PTR [ecx] lock xacquire neg BYTE PTR [ecx] xrelease lock neg BYTE PTR [ecx] lock xrelease neg BYTE PTR [ecx] .byte 0xf0; .byte 0xf2; neg BYTE PTR [ecx] .byte 0xf0; .byte 0xf3; neg BYTE PTR [ecx] xacquire lock not BYTE PTR [ecx] lock xacquire not BYTE PTR [ecx] xrelease lock not BYTE PTR [ecx] lock xrelease not BYTE PTR [ecx] .byte 0xf0; .byte 0xf2; not BYTE PTR [ecx] .byte 0xf0; .byte 0xf3; not BYTE PTR [ecx] # Tests for op regs/m16 xacquire lock dec WORD PTR [ecx] lock xacquire dec WORD PTR [ecx] xrelease lock dec WORD PTR [ecx] lock xrelease dec WORD PTR [ecx] .byte 0xf0; .byte 0xf2; dec WORD PTR [ecx] .byte 0xf0; .byte 0xf3; dec WORD PTR [ecx] xacquire lock inc WORD PTR [ecx] lock xacquire inc WORD PTR [ecx] xrelease lock inc WORD PTR [ecx] lock xrelease inc WORD PTR [ecx] .byte 0xf0; .byte 0xf2; inc WORD PTR [ecx] .byte 0xf0; .byte 0xf3; inc WORD PTR [ecx] xacquire lock neg WORD PTR [ecx] lock xacquire neg WORD PTR [ecx] xrelease lock neg WORD PTR [ecx] lock xrelease neg WORD PTR [ecx] .byte 0xf0; .byte 0xf2; neg WORD PTR [ecx] .byte 0xf0; .byte 0xf3; neg WORD PTR [ecx] xacquire lock not WORD PTR [ecx] lock xacquire not WORD PTR [ecx] xrelease lock not WORD PTR [ecx] lock xrelease not WORD PTR [ecx] .byte 0xf0; .byte 0xf2; not WORD PTR [ecx] .byte 0xf0; .byte 0xf3; not WORD PTR [ecx] # Tests for op regl/m32 xacquire lock dec DWORD PTR [ecx] lock xacquire dec DWORD PTR [ecx] xrelease lock dec DWORD PTR [ecx] lock xrelease dec DWORD PTR [ecx] .byte 0xf0; .byte 0xf2; dec DWORD PTR [ecx] .byte 0xf0; .byte 0xf3; dec DWORD PTR [ecx] xacquire lock inc DWORD PTR [ecx] lock xacquire inc DWORD PTR [ecx] xrelease lock inc DWORD PTR [ecx] lock xrelease inc DWORD PTR [ecx] .byte 0xf0; .byte 0xf2; inc DWORD PTR [ecx] .byte 0xf0; .byte 0xf3; inc DWORD PTR [ecx] xacquire lock neg DWORD PTR [ecx] lock xacquire neg DWORD PTR [ecx] xrelease lock neg DWORD PTR [ecx] lock xrelease neg DWORD PTR [ecx] .byte 0xf0; .byte 0xf2; neg DWORD PTR [ecx] .byte 0xf0; .byte 0xf3; neg DWORD PTR [ecx] xacquire lock not DWORD PTR [ecx] lock xacquire not DWORD PTR [ecx] xrelease lock not DWORD PTR [ecx] lock xrelease not DWORD PTR [ecx] .byte 0xf0; .byte 0xf2; not DWORD PTR [ecx] .byte 0xf0; .byte 0xf3; not DWORD PTR [ecx] # Tests for op m64 xacquire lock cmpxchg8b QWORD PTR [ecx] lock xacquire cmpxchg8b QWORD PTR [ecx] xrelease lock cmpxchg8b QWORD PTR [ecx] lock xrelease cmpxchg8b QWORD PTR [ecx] .byte 0xf0; .byte 0xf2; cmpxchg8b QWORD PTR [ecx] .byte 0xf0; .byte 0xf3; cmpxchg8b QWORD PTR [ecx] # Tests for op regb, regb/m8 xacquire lock cmpxchg BYTE PTR [ecx],cl lock xacquire cmpxchg BYTE PTR [ecx],cl xrelease lock cmpxchg BYTE PTR [ecx],cl lock xrelease cmpxchg BYTE PTR [ecx],cl .byte 0xf0; .byte 0xf2; cmpxchg BYTE PTR [ecx],cl .byte 0xf0; .byte 0xf3; cmpxchg BYTE PTR [ecx],cl xacquire lock xadd BYTE PTR [ecx],cl lock xacquire xadd BYTE PTR [ecx],cl xrelease lock xadd BYTE PTR [ecx],cl lock xrelease xadd BYTE PTR [ecx],cl .byte 0xf0; .byte 0xf2; xadd BYTE PTR [ecx],cl .byte 0xf0; .byte 0xf3; xadd BYTE PTR [ecx],cl