i386: Check for reserved VEX.vvvv and EVEX.vvvv
[external/binutils.git] / gas / testsuite / gas / i386 / x86-64-hle.s
1 # Check 64bit HLE instructions
2
3         .allow_index_reg
4         .text
5 _start:
6
7
8 # Tests for op imm32 rax
9
10 # Tests for op imm8 regb/m8
11         xacquire lock adcb $100,(%rcx)
12         lock xacquire adcb $100,(%rcx)
13         xrelease lock adcb $100,(%rcx)
14         lock xrelease adcb $100,(%rcx)
15         .byte 0xf0; .byte 0xf2; adcb $100,(%rcx)
16         .byte 0xf0; .byte 0xf3; adcb $100,(%rcx)
17         xacquire lock addb $100,(%rcx)
18         lock xacquire addb $100,(%rcx)
19         xrelease lock addb $100,(%rcx)
20         lock xrelease addb $100,(%rcx)
21         .byte 0xf0; .byte 0xf2; addb $100,(%rcx)
22         .byte 0xf0; .byte 0xf3; addb $100,(%rcx)
23         xacquire lock andb $100,(%rcx)
24         lock xacquire andb $100,(%rcx)
25         xrelease lock andb $100,(%rcx)
26         lock xrelease andb $100,(%rcx)
27         .byte 0xf0; .byte 0xf2; andb $100,(%rcx)
28         .byte 0xf0; .byte 0xf3; andb $100,(%rcx)
29         xrelease movb $100,(%rcx)
30         xacquire lock orb $100,(%rcx)
31         lock xacquire orb $100,(%rcx)
32         xrelease lock orb $100,(%rcx)
33         lock xrelease orb $100,(%rcx)
34         .byte 0xf0; .byte 0xf2; orb $100,(%rcx)
35         .byte 0xf0; .byte 0xf3; orb $100,(%rcx)
36         xacquire lock sbbb $100,(%rcx)
37         lock xacquire sbbb $100,(%rcx)
38         xrelease lock sbbb $100,(%rcx)
39         lock xrelease sbbb $100,(%rcx)
40         .byte 0xf0; .byte 0xf2; sbbb $100,(%rcx)
41         .byte 0xf0; .byte 0xf3; sbbb $100,(%rcx)
42         xacquire lock subb $100,(%rcx)
43         lock xacquire subb $100,(%rcx)
44         xrelease lock subb $100,(%rcx)
45         lock xrelease subb $100,(%rcx)
46         .byte 0xf0; .byte 0xf2; subb $100,(%rcx)
47         .byte 0xf0; .byte 0xf3; subb $100,(%rcx)
48         xacquire lock xorb $100,(%rcx)
49         lock xacquire xorb $100,(%rcx)
50         xrelease lock xorb $100,(%rcx)
51         lock xrelease xorb $100,(%rcx)
52         .byte 0xf0; .byte 0xf2; xorb $100,(%rcx)
53         .byte 0xf0; .byte 0xf3; xorb $100,(%rcx)
54
55 # Tests for op imm16 regs/m16
56         xacquire lock adcw $1000,(%rcx)
57         lock xacquire adcw $1000,(%rcx)
58         xrelease lock adcw $1000,(%rcx)
59         lock xrelease adcw $1000,(%rcx)
60         .byte 0xf0; .byte 0xf2; adcw $1000,(%rcx)
61         .byte 0xf0; .byte 0xf3; adcw $1000,(%rcx)
62         xacquire lock addw $1000,(%rcx)
63         lock xacquire addw $1000,(%rcx)
64         xrelease lock addw $1000,(%rcx)
65         lock xrelease addw $1000,(%rcx)
66         .byte 0xf0; .byte 0xf2; addw $1000,(%rcx)
67         .byte 0xf0; .byte 0xf3; addw $1000,(%rcx)
68         xacquire lock andw $1000,(%rcx)
69         lock xacquire andw $1000,(%rcx)
70         xrelease lock andw $1000,(%rcx)
71         lock xrelease andw $1000,(%rcx)
72         .byte 0xf0; .byte 0xf2; andw $1000,(%rcx)
73         .byte 0xf0; .byte 0xf3; andw $1000,(%rcx)
74         xrelease movw $1000,(%rcx)
75         xacquire lock orw $1000,(%rcx)
76         lock xacquire orw $1000,(%rcx)
77         xrelease lock orw $1000,(%rcx)
78         lock xrelease orw $1000,(%rcx)
79         .byte 0xf0; .byte 0xf2; orw $1000,(%rcx)
80         .byte 0xf0; .byte 0xf3; orw $1000,(%rcx)
81         xacquire lock sbbw $1000,(%rcx)
82         lock xacquire sbbw $1000,(%rcx)
83         xrelease lock sbbw $1000,(%rcx)
84         lock xrelease sbbw $1000,(%rcx)
85         .byte 0xf0; .byte 0xf2; sbbw $1000,(%rcx)
86         .byte 0xf0; .byte 0xf3; sbbw $1000,(%rcx)
87         xacquire lock subw $1000,(%rcx)
88         lock xacquire subw $1000,(%rcx)
89         xrelease lock subw $1000,(%rcx)
90         lock xrelease subw $1000,(%rcx)
91         .byte 0xf0; .byte 0xf2; subw $1000,(%rcx)
92         .byte 0xf0; .byte 0xf3; subw $1000,(%rcx)
93         xacquire lock xorw $1000,(%rcx)
94         lock xacquire xorw $1000,(%rcx)
95         xrelease lock xorw $1000,(%rcx)
96         lock xrelease xorw $1000,(%rcx)
97         .byte 0xf0; .byte 0xf2; xorw $1000,(%rcx)
98         .byte 0xf0; .byte 0xf3; xorw $1000,(%rcx)
99
100 # Tests for op imm32 regl/m32
101         xacquire lock adcl $10000000,(%rcx)
102         lock xacquire adcl $10000000,(%rcx)
103         xrelease lock adcl $10000000,(%rcx)
104         lock xrelease adcl $10000000,(%rcx)
105         .byte 0xf0; .byte 0xf2; adcl $10000000,(%rcx)
106         .byte 0xf0; .byte 0xf3; adcl $10000000,(%rcx)
107         xacquire lock addl $10000000,(%rcx)
108         lock xacquire addl $10000000,(%rcx)
109         xrelease lock addl $10000000,(%rcx)
110         lock xrelease addl $10000000,(%rcx)
111         .byte 0xf0; .byte 0xf2; addl $10000000,(%rcx)
112         .byte 0xf0; .byte 0xf3; addl $10000000,(%rcx)
113         xacquire lock andl $10000000,(%rcx)
114         lock xacquire andl $10000000,(%rcx)
115         xrelease lock andl $10000000,(%rcx)
116         lock xrelease andl $10000000,(%rcx)
117         .byte 0xf0; .byte 0xf2; andl $10000000,(%rcx)
118         .byte 0xf0; .byte 0xf3; andl $10000000,(%rcx)
119         xrelease movl $10000000,(%rcx)
120         xacquire lock orl $10000000,(%rcx)
121         lock xacquire orl $10000000,(%rcx)
122         xrelease lock orl $10000000,(%rcx)
123         lock xrelease orl $10000000,(%rcx)
124         .byte 0xf0; .byte 0xf2; orl $10000000,(%rcx)
125         .byte 0xf0; .byte 0xf3; orl $10000000,(%rcx)
126         xacquire lock sbbl $10000000,(%rcx)
127         lock xacquire sbbl $10000000,(%rcx)
128         xrelease lock sbbl $10000000,(%rcx)
129         lock xrelease sbbl $10000000,(%rcx)
130         .byte 0xf0; .byte 0xf2; sbbl $10000000,(%rcx)
131         .byte 0xf0; .byte 0xf3; sbbl $10000000,(%rcx)
132         xacquire lock subl $10000000,(%rcx)
133         lock xacquire subl $10000000,(%rcx)
134         xrelease lock subl $10000000,(%rcx)
135         lock xrelease subl $10000000,(%rcx)
136         .byte 0xf0; .byte 0xf2; subl $10000000,(%rcx)
137         .byte 0xf0; .byte 0xf3; subl $10000000,(%rcx)
138         xacquire lock xorl $10000000,(%rcx)
139         lock xacquire xorl $10000000,(%rcx)
140         xrelease lock xorl $10000000,(%rcx)
141         lock xrelease xorl $10000000,(%rcx)
142         .byte 0xf0; .byte 0xf2; xorl $10000000,(%rcx)
143         .byte 0xf0; .byte 0xf3; xorl $10000000,(%rcx)
144
145 # Tests for op imm32 regq/m64
146         xacquire lock adcq $10000000,(%rcx)
147         lock xacquire adcq $10000000,(%rcx)
148         xrelease lock adcq $10000000,(%rcx)
149         lock xrelease adcq $10000000,(%rcx)
150         .byte 0xf0; .byte 0xf2; adcq $10000000,(%rcx)
151         .byte 0xf0; .byte 0xf3; adcq $10000000,(%rcx)
152         xacquire lock addq $10000000,(%rcx)
153         lock xacquire addq $10000000,(%rcx)
154         xrelease lock addq $10000000,(%rcx)
155         lock xrelease addq $10000000,(%rcx)
156         .byte 0xf0; .byte 0xf2; addq $10000000,(%rcx)
157         .byte 0xf0; .byte 0xf3; addq $10000000,(%rcx)
158         xacquire lock andq $10000000,(%rcx)
159         lock xacquire andq $10000000,(%rcx)
160         xrelease lock andq $10000000,(%rcx)
161         lock xrelease andq $10000000,(%rcx)
162         .byte 0xf0; .byte 0xf2; andq $10000000,(%rcx)
163         .byte 0xf0; .byte 0xf3; andq $10000000,(%rcx)
164         xrelease movq $10000000,(%rcx)
165         xacquire lock orq $10000000,(%rcx)
166         lock xacquire orq $10000000,(%rcx)
167         xrelease lock orq $10000000,(%rcx)
168         lock xrelease orq $10000000,(%rcx)
169         .byte 0xf0; .byte 0xf2; orq $10000000,(%rcx)
170         .byte 0xf0; .byte 0xf3; orq $10000000,(%rcx)
171         xacquire lock sbbq $10000000,(%rcx)
172         lock xacquire sbbq $10000000,(%rcx)
173         xrelease lock sbbq $10000000,(%rcx)
174         lock xrelease sbbq $10000000,(%rcx)
175         .byte 0xf0; .byte 0xf2; sbbq $10000000,(%rcx)
176         .byte 0xf0; .byte 0xf3; sbbq $10000000,(%rcx)
177         xacquire lock subq $10000000,(%rcx)
178         lock xacquire subq $10000000,(%rcx)
179         xrelease lock subq $10000000,(%rcx)
180         lock xrelease subq $10000000,(%rcx)
181         .byte 0xf0; .byte 0xf2; subq $10000000,(%rcx)
182         .byte 0xf0; .byte 0xf3; subq $10000000,(%rcx)
183         xacquire lock xorq $10000000,(%rcx)
184         lock xacquire xorq $10000000,(%rcx)
185         xrelease lock xorq $10000000,(%rcx)
186         lock xrelease xorq $10000000,(%rcx)
187         .byte 0xf0; .byte 0xf2; xorq $10000000,(%rcx)
188         .byte 0xf0; .byte 0xf3; xorq $10000000,(%rcx)
189
190 # Tests for op imm8 regs/m16
191         xacquire lock adcw $100,(%rcx)
192         lock xacquire adcw $100,(%rcx)
193         xrelease lock adcw $100,(%rcx)
194         lock xrelease adcw $100,(%rcx)
195         .byte 0xf0; .byte 0xf2; adcw $100,(%rcx)
196         .byte 0xf0; .byte 0xf3; adcw $100,(%rcx)
197         xacquire lock addw $100,(%rcx)
198         lock xacquire addw $100,(%rcx)
199         xrelease lock addw $100,(%rcx)
200         lock xrelease addw $100,(%rcx)
201         .byte 0xf0; .byte 0xf2; addw $100,(%rcx)
202         .byte 0xf0; .byte 0xf3; addw $100,(%rcx)
203         xacquire lock andw $100,(%rcx)
204         lock xacquire andw $100,(%rcx)
205         xrelease lock andw $100,(%rcx)
206         lock xrelease andw $100,(%rcx)
207         .byte 0xf0; .byte 0xf2; andw $100,(%rcx)
208         .byte 0xf0; .byte 0xf3; andw $100,(%rcx)
209         xacquire lock btcw $100,(%rcx)
210         lock xacquire btcw $100,(%rcx)
211         xrelease lock btcw $100,(%rcx)
212         lock xrelease btcw $100,(%rcx)
213         .byte 0xf0; .byte 0xf2; btcw $100,(%rcx)
214         .byte 0xf0; .byte 0xf3; btcw $100,(%rcx)
215         xacquire lock btrw $100,(%rcx)
216         lock xacquire btrw $100,(%rcx)
217         xrelease lock btrw $100,(%rcx)
218         lock xrelease btrw $100,(%rcx)
219         .byte 0xf0; .byte 0xf2; btrw $100,(%rcx)
220         .byte 0xf0; .byte 0xf3; btrw $100,(%rcx)
221         xacquire lock btsw $100,(%rcx)
222         lock xacquire btsw $100,(%rcx)
223         xrelease lock btsw $100,(%rcx)
224         lock xrelease btsw $100,(%rcx)
225         .byte 0xf0; .byte 0xf2; btsw $100,(%rcx)
226         .byte 0xf0; .byte 0xf3; btsw $100,(%rcx)
227         xrelease movw $100,(%rcx)
228         xacquire lock orw $100,(%rcx)
229         lock xacquire orw $100,(%rcx)
230         xrelease lock orw $100,(%rcx)
231         lock xrelease orw $100,(%rcx)
232         .byte 0xf0; .byte 0xf2; orw $100,(%rcx)
233         .byte 0xf0; .byte 0xf3; orw $100,(%rcx)
234         xacquire lock sbbw $100,(%rcx)
235         lock xacquire sbbw $100,(%rcx)
236         xrelease lock sbbw $100,(%rcx)
237         lock xrelease sbbw $100,(%rcx)
238         .byte 0xf0; .byte 0xf2; sbbw $100,(%rcx)
239         .byte 0xf0; .byte 0xf3; sbbw $100,(%rcx)
240         xacquire lock subw $100,(%rcx)
241         lock xacquire subw $100,(%rcx)
242         xrelease lock subw $100,(%rcx)
243         lock xrelease subw $100,(%rcx)
244         .byte 0xf0; .byte 0xf2; subw $100,(%rcx)
245         .byte 0xf0; .byte 0xf3; subw $100,(%rcx)
246         xacquire lock xorw $100,(%rcx)
247         lock xacquire xorw $100,(%rcx)
248         xrelease lock xorw $100,(%rcx)
249         lock xrelease xorw $100,(%rcx)
250         .byte 0xf0; .byte 0xf2; xorw $100,(%rcx)
251         .byte 0xf0; .byte 0xf3; xorw $100,(%rcx)
252
253 # Tests for op imm8 regl/m32
254         xacquire lock adcl $100,(%rcx)
255         lock xacquire adcl $100,(%rcx)
256         xrelease lock adcl $100,(%rcx)
257         lock xrelease adcl $100,(%rcx)
258         .byte 0xf0; .byte 0xf2; adcl $100,(%rcx)
259         .byte 0xf0; .byte 0xf3; adcl $100,(%rcx)
260         xacquire lock addl $100,(%rcx)
261         lock xacquire addl $100,(%rcx)
262         xrelease lock addl $100,(%rcx)
263         lock xrelease addl $100,(%rcx)
264         .byte 0xf0; .byte 0xf2; addl $100,(%rcx)
265         .byte 0xf0; .byte 0xf3; addl $100,(%rcx)
266         xacquire lock andl $100,(%rcx)
267         lock xacquire andl $100,(%rcx)
268         xrelease lock andl $100,(%rcx)
269         lock xrelease andl $100,(%rcx)
270         .byte 0xf0; .byte 0xf2; andl $100,(%rcx)
271         .byte 0xf0; .byte 0xf3; andl $100,(%rcx)
272         xacquire lock btcl $100,(%rcx)
273         lock xacquire btcl $100,(%rcx)
274         xrelease lock btcl $100,(%rcx)
275         lock xrelease btcl $100,(%rcx)
276         .byte 0xf0; .byte 0xf2; btcl $100,(%rcx)
277         .byte 0xf0; .byte 0xf3; btcl $100,(%rcx)
278         xacquire lock btrl $100,(%rcx)
279         lock xacquire btrl $100,(%rcx)
280         xrelease lock btrl $100,(%rcx)
281         lock xrelease btrl $100,(%rcx)
282         .byte 0xf0; .byte 0xf2; btrl $100,(%rcx)
283         .byte 0xf0; .byte 0xf3; btrl $100,(%rcx)
284         xacquire lock btsl $100,(%rcx)
285         lock xacquire btsl $100,(%rcx)
286         xrelease lock btsl $100,(%rcx)
287         lock xrelease btsl $100,(%rcx)
288         .byte 0xf0; .byte 0xf2; btsl $100,(%rcx)
289         .byte 0xf0; .byte 0xf3; btsl $100,(%rcx)
290         xrelease movl $100,(%rcx)
291         xacquire lock orl $100,(%rcx)
292         lock xacquire orl $100,(%rcx)
293         xrelease lock orl $100,(%rcx)
294         lock xrelease orl $100,(%rcx)
295         .byte 0xf0; .byte 0xf2; orl $100,(%rcx)
296         .byte 0xf0; .byte 0xf3; orl $100,(%rcx)
297         xacquire lock sbbl $100,(%rcx)
298         lock xacquire sbbl $100,(%rcx)
299         xrelease lock sbbl $100,(%rcx)
300         lock xrelease sbbl $100,(%rcx)
301         .byte 0xf0; .byte 0xf2; sbbl $100,(%rcx)
302         .byte 0xf0; .byte 0xf3; sbbl $100,(%rcx)
303         xacquire lock subl $100,(%rcx)
304         lock xacquire subl $100,(%rcx)
305         xrelease lock subl $100,(%rcx)
306         lock xrelease subl $100,(%rcx)
307         .byte 0xf0; .byte 0xf2; subl $100,(%rcx)
308         .byte 0xf0; .byte 0xf3; subl $100,(%rcx)
309         xacquire lock xorl $100,(%rcx)
310         lock xacquire xorl $100,(%rcx)
311         xrelease lock xorl $100,(%rcx)
312         lock xrelease xorl $100,(%rcx)
313         .byte 0xf0; .byte 0xf2; xorl $100,(%rcx)
314         .byte 0xf0; .byte 0xf3; xorl $100,(%rcx)
315
316 # Tests for op imm8 regq/m64
317         xacquire lock adcq $100,(%rcx)
318         lock xacquire adcq $100,(%rcx)
319         xrelease lock adcq $100,(%rcx)
320         lock xrelease adcq $100,(%rcx)
321         .byte 0xf0; .byte 0xf2; adcq $100,(%rcx)
322         .byte 0xf0; .byte 0xf3; adcq $100,(%rcx)
323         xacquire lock addq $100,(%rcx)
324         lock xacquire addq $100,(%rcx)
325         xrelease lock addq $100,(%rcx)
326         lock xrelease addq $100,(%rcx)
327         .byte 0xf0; .byte 0xf2; addq $100,(%rcx)
328         .byte 0xf0; .byte 0xf3; addq $100,(%rcx)
329         xacquire lock andq $100,(%rcx)
330         lock xacquire andq $100,(%rcx)
331         xrelease lock andq $100,(%rcx)
332         lock xrelease andq $100,(%rcx)
333         .byte 0xf0; .byte 0xf2; andq $100,(%rcx)
334         .byte 0xf0; .byte 0xf3; andq $100,(%rcx)
335         xacquire lock btcq $100,(%rcx)
336         lock xacquire btcq $100,(%rcx)
337         xrelease lock btcq $100,(%rcx)
338         lock xrelease btcq $100,(%rcx)
339         .byte 0xf0; .byte 0xf2; btcq $100,(%rcx)
340         .byte 0xf0; .byte 0xf3; btcq $100,(%rcx)
341         xacquire lock btrq $100,(%rcx)
342         lock xacquire btrq $100,(%rcx)
343         xrelease lock btrq $100,(%rcx)
344         lock xrelease btrq $100,(%rcx)
345         .byte 0xf0; .byte 0xf2; btrq $100,(%rcx)
346         .byte 0xf0; .byte 0xf3; btrq $100,(%rcx)
347         xacquire lock btsq $100,(%rcx)
348         lock xacquire btsq $100,(%rcx)
349         xrelease lock btsq $100,(%rcx)
350         lock xrelease btsq $100,(%rcx)
351         .byte 0xf0; .byte 0xf2; btsq $100,(%rcx)
352         .byte 0xf0; .byte 0xf3; btsq $100,(%rcx)
353         xrelease movq $100,(%rcx)
354         xacquire lock orq $100,(%rcx)
355         lock xacquire orq $100,(%rcx)
356         xrelease lock orq $100,(%rcx)
357         lock xrelease orq $100,(%rcx)
358         .byte 0xf0; .byte 0xf2; orq $100,(%rcx)
359         .byte 0xf0; .byte 0xf3; orq $100,(%rcx)
360         xacquire lock sbbq $100,(%rcx)
361         lock xacquire sbbq $100,(%rcx)
362         xrelease lock sbbq $100,(%rcx)
363         lock xrelease sbbq $100,(%rcx)
364         .byte 0xf0; .byte 0xf2; sbbq $100,(%rcx)
365         .byte 0xf0; .byte 0xf3; sbbq $100,(%rcx)
366         xacquire lock subq $100,(%rcx)
367         lock xacquire subq $100,(%rcx)
368         xrelease lock subq $100,(%rcx)
369         lock xrelease subq $100,(%rcx)
370         .byte 0xf0; .byte 0xf2; subq $100,(%rcx)
371         .byte 0xf0; .byte 0xf3; subq $100,(%rcx)
372         xacquire lock xorq $100,(%rcx)
373         lock xacquire xorq $100,(%rcx)
374         xrelease lock xorq $100,(%rcx)
375         lock xrelease xorq $100,(%rcx)
376         .byte 0xf0; .byte 0xf2; xorq $100,(%rcx)
377         .byte 0xf0; .byte 0xf3; xorq $100,(%rcx)
378
379 # Tests for op imm8 regb/m8
380         xacquire lock adcb $100,(%rcx)
381         lock xacquire adcb $100,(%rcx)
382         xrelease lock adcb $100,(%rcx)
383         lock xrelease adcb $100,(%rcx)
384         .byte 0xf0; .byte 0xf2; adcb $100,(%rcx)
385         .byte 0xf0; .byte 0xf3; adcb $100,(%rcx)
386         xacquire lock addb $100,(%rcx)
387         lock xacquire addb $100,(%rcx)
388         xrelease lock addb $100,(%rcx)
389         lock xrelease addb $100,(%rcx)
390         .byte 0xf0; .byte 0xf2; addb $100,(%rcx)
391         .byte 0xf0; .byte 0xf3; addb $100,(%rcx)
392         xacquire lock andb $100,(%rcx)
393         lock xacquire andb $100,(%rcx)
394         xrelease lock andb $100,(%rcx)
395         lock xrelease andb $100,(%rcx)
396         .byte 0xf0; .byte 0xf2; andb $100,(%rcx)
397         .byte 0xf0; .byte 0xf3; andb $100,(%rcx)
398         xrelease movb $100,(%rcx)
399         xacquire lock orb $100,(%rcx)
400         lock xacquire orb $100,(%rcx)
401         xrelease lock orb $100,(%rcx)
402         lock xrelease orb $100,(%rcx)
403         .byte 0xf0; .byte 0xf2; orb $100,(%rcx)
404         .byte 0xf0; .byte 0xf3; orb $100,(%rcx)
405         xacquire lock sbbb $100,(%rcx)
406         lock xacquire sbbb $100,(%rcx)
407         xrelease lock sbbb $100,(%rcx)
408         lock xrelease sbbb $100,(%rcx)
409         .byte 0xf0; .byte 0xf2; sbbb $100,(%rcx)
410         .byte 0xf0; .byte 0xf3; sbbb $100,(%rcx)
411         xacquire lock subb $100,(%rcx)
412         lock xacquire subb $100,(%rcx)
413         xrelease lock subb $100,(%rcx)
414         lock xrelease subb $100,(%rcx)
415         .byte 0xf0; .byte 0xf2; subb $100,(%rcx)
416         .byte 0xf0; .byte 0xf3; subb $100,(%rcx)
417         xacquire lock xorb $100,(%rcx)
418         lock xacquire xorb $100,(%rcx)
419         xrelease lock xorb $100,(%rcx)
420         lock xrelease xorb $100,(%rcx)
421         .byte 0xf0; .byte 0xf2; xorb $100,(%rcx)
422         .byte 0xf0; .byte 0xf3; xorb $100,(%rcx)
423
424 # Tests for op regb regb/m8
425 # Tests for op regb/m8 regb
426         xacquire lock adcb %al,(%rcx)
427         lock xacquire adcb %al,(%rcx)
428         xrelease lock adcb %al,(%rcx)
429         lock xrelease adcb %al,(%rcx)
430         .byte 0xf0; .byte 0xf2; adcb %al,(%rcx)
431         .byte 0xf0; .byte 0xf3; adcb %al,(%rcx)
432         xacquire lock addb %al,(%rcx)
433         lock xacquire addb %al,(%rcx)
434         xrelease lock addb %al,(%rcx)
435         lock xrelease addb %al,(%rcx)
436         .byte 0xf0; .byte 0xf2; addb %al,(%rcx)
437         .byte 0xf0; .byte 0xf3; addb %al,(%rcx)
438         xacquire lock andb %al,(%rcx)
439         lock xacquire andb %al,(%rcx)
440         xrelease lock andb %al,(%rcx)
441         lock xrelease andb %al,(%rcx)
442         .byte 0xf0; .byte 0xf2; andb %al,(%rcx)
443         .byte 0xf0; .byte 0xf3; andb %al,(%rcx)
444         xrelease movb %al,(%rcx)
445         xacquire lock orb %al,(%rcx)
446         lock xacquire orb %al,(%rcx)
447         xrelease lock orb %al,(%rcx)
448         lock xrelease orb %al,(%rcx)
449         .byte 0xf0; .byte 0xf2; orb %al,(%rcx)
450         .byte 0xf0; .byte 0xf3; orb %al,(%rcx)
451         xacquire lock sbbb %al,(%rcx)
452         lock xacquire sbbb %al,(%rcx)
453         xrelease lock sbbb %al,(%rcx)
454         lock xrelease sbbb %al,(%rcx)
455         .byte 0xf0; .byte 0xf2; sbbb %al,(%rcx)
456         .byte 0xf0; .byte 0xf3; sbbb %al,(%rcx)
457         xacquire lock subb %al,(%rcx)
458         lock xacquire subb %al,(%rcx)
459         xrelease lock subb %al,(%rcx)
460         lock xrelease subb %al,(%rcx)
461         .byte 0xf0; .byte 0xf2; subb %al,(%rcx)
462         .byte 0xf0; .byte 0xf3; subb %al,(%rcx)
463         xacquire lock xchgb %al,(%rcx)
464         lock xacquire xchgb %al,(%rcx)
465         xacquire xchgb %al,(%rcx)
466         xrelease lock xchgb %al,(%rcx)
467         lock xrelease xchgb %al,(%rcx)
468         xrelease xchgb %al,(%rcx)
469         .byte 0xf0; .byte 0xf2; xchgb %al,(%rcx)
470         .byte 0xf0; .byte 0xf3; xchgb %al,(%rcx)
471         xacquire lock xorb %al,(%rcx)
472         lock xacquire xorb %al,(%rcx)
473         xrelease lock xorb %al,(%rcx)
474         lock xrelease xorb %al,(%rcx)
475         .byte 0xf0; .byte 0xf2; xorb %al,(%rcx)
476         .byte 0xf0; .byte 0xf3; xorb %al,(%rcx)
477
478 # Tests for op regs regs/m16
479 # Tests for op regs/m16 regs
480         xacquire lock adcw %ax,(%rcx)
481         lock xacquire adcw %ax,(%rcx)
482         xrelease lock adcw %ax,(%rcx)
483         lock xrelease adcw %ax,(%rcx)
484         .byte 0xf0; .byte 0xf2; adcw %ax,(%rcx)
485         .byte 0xf0; .byte 0xf3; adcw %ax,(%rcx)
486         xacquire lock addw %ax,(%rcx)
487         lock xacquire addw %ax,(%rcx)
488         xrelease lock addw %ax,(%rcx)
489         lock xrelease addw %ax,(%rcx)
490         .byte 0xf0; .byte 0xf2; addw %ax,(%rcx)
491         .byte 0xf0; .byte 0xf3; addw %ax,(%rcx)
492         xacquire lock andw %ax,(%rcx)
493         lock xacquire andw %ax,(%rcx)
494         xrelease lock andw %ax,(%rcx)
495         lock xrelease andw %ax,(%rcx)
496         .byte 0xf0; .byte 0xf2; andw %ax,(%rcx)
497         .byte 0xf0; .byte 0xf3; andw %ax,(%rcx)
498         xrelease movw %ax,(%rcx)
499         xacquire lock orw %ax,(%rcx)
500         lock xacquire orw %ax,(%rcx)
501         xrelease lock orw %ax,(%rcx)
502         lock xrelease orw %ax,(%rcx)
503         .byte 0xf0; .byte 0xf2; orw %ax,(%rcx)
504         .byte 0xf0; .byte 0xf3; orw %ax,(%rcx)
505         xacquire lock sbbw %ax,(%rcx)
506         lock xacquire sbbw %ax,(%rcx)
507         xrelease lock sbbw %ax,(%rcx)
508         lock xrelease sbbw %ax,(%rcx)
509         .byte 0xf0; .byte 0xf2; sbbw %ax,(%rcx)
510         .byte 0xf0; .byte 0xf3; sbbw %ax,(%rcx)
511         xacquire lock subw %ax,(%rcx)
512         lock xacquire subw %ax,(%rcx)
513         xrelease lock subw %ax,(%rcx)
514         lock xrelease subw %ax,(%rcx)
515         .byte 0xf0; .byte 0xf2; subw %ax,(%rcx)
516         .byte 0xf0; .byte 0xf3; subw %ax,(%rcx)
517         xacquire lock xchgw %ax,(%rcx)
518         lock xacquire xchgw %ax,(%rcx)
519         xacquire xchgw %ax,(%rcx)
520         xrelease lock xchgw %ax,(%rcx)
521         lock xrelease xchgw %ax,(%rcx)
522         xrelease xchgw %ax,(%rcx)
523         .byte 0xf0; .byte 0xf2; xchgw %ax,(%rcx)
524         .byte 0xf0; .byte 0xf3; xchgw %ax,(%rcx)
525         xacquire lock xorw %ax,(%rcx)
526         lock xacquire xorw %ax,(%rcx)
527         xrelease lock xorw %ax,(%rcx)
528         lock xrelease xorw %ax,(%rcx)
529         .byte 0xf0; .byte 0xf2; xorw %ax,(%rcx)
530         .byte 0xf0; .byte 0xf3; xorw %ax,(%rcx)
531
532 # Tests for op regl regl/m32
533 # Tests for op regl/m32 regl
534         xacquire lock adcl %eax,(%rcx)
535         lock xacquire adcl %eax,(%rcx)
536         xrelease lock adcl %eax,(%rcx)
537         lock xrelease adcl %eax,(%rcx)
538         .byte 0xf0; .byte 0xf2; adcl %eax,(%rcx)
539         .byte 0xf0; .byte 0xf3; adcl %eax,(%rcx)
540         xacquire lock addl %eax,(%rcx)
541         lock xacquire addl %eax,(%rcx)
542         xrelease lock addl %eax,(%rcx)
543         lock xrelease addl %eax,(%rcx)
544         .byte 0xf0; .byte 0xf2; addl %eax,(%rcx)
545         .byte 0xf0; .byte 0xf3; addl %eax,(%rcx)
546         xacquire lock andl %eax,(%rcx)
547         lock xacquire andl %eax,(%rcx)
548         xrelease lock andl %eax,(%rcx)
549         lock xrelease andl %eax,(%rcx)
550         .byte 0xf0; .byte 0xf2; andl %eax,(%rcx)
551         .byte 0xf0; .byte 0xf3; andl %eax,(%rcx)
552         xrelease movl %eax,(%rcx)
553         xacquire lock orl %eax,(%rcx)
554         lock xacquire orl %eax,(%rcx)
555         xrelease lock orl %eax,(%rcx)
556         lock xrelease orl %eax,(%rcx)
557         .byte 0xf0; .byte 0xf2; orl %eax,(%rcx)
558         .byte 0xf0; .byte 0xf3; orl %eax,(%rcx)
559         xacquire lock sbbl %eax,(%rcx)
560         lock xacquire sbbl %eax,(%rcx)
561         xrelease lock sbbl %eax,(%rcx)
562         lock xrelease sbbl %eax,(%rcx)
563         .byte 0xf0; .byte 0xf2; sbbl %eax,(%rcx)
564         .byte 0xf0; .byte 0xf3; sbbl %eax,(%rcx)
565         xacquire lock subl %eax,(%rcx)
566         lock xacquire subl %eax,(%rcx)
567         xrelease lock subl %eax,(%rcx)
568         lock xrelease subl %eax,(%rcx)
569         .byte 0xf0; .byte 0xf2; subl %eax,(%rcx)
570         .byte 0xf0; .byte 0xf3; subl %eax,(%rcx)
571         xacquire lock xchgl %eax,(%rcx)
572         lock xacquire xchgl %eax,(%rcx)
573         xacquire xchgl %eax,(%rcx)
574         xrelease lock xchgl %eax,(%rcx)
575         lock xrelease xchgl %eax,(%rcx)
576         xrelease xchgl %eax,(%rcx)
577         .byte 0xf0; .byte 0xf2; xchgl %eax,(%rcx)
578         .byte 0xf0; .byte 0xf3; xchgl %eax,(%rcx)
579         xacquire lock xorl %eax,(%rcx)
580         lock xacquire xorl %eax,(%rcx)
581         xrelease lock xorl %eax,(%rcx)
582         lock xrelease xorl %eax,(%rcx)
583         .byte 0xf0; .byte 0xf2; xorl %eax,(%rcx)
584         .byte 0xf0; .byte 0xf3; xorl %eax,(%rcx)
585
586 # Tests for op regq regq/m64
587 # Tests for op regq/m64 regq
588         xacquire lock adcq %rax,(%rcx)
589         lock xacquire adcq %rax,(%rcx)
590         xrelease lock adcq %rax,(%rcx)
591         lock xrelease adcq %rax,(%rcx)
592         .byte 0xf0; .byte 0xf2; adcq %rax,(%rcx)
593         .byte 0xf0; .byte 0xf3; adcq %rax,(%rcx)
594         xacquire lock addq %rax,(%rcx)
595         lock xacquire addq %rax,(%rcx)
596         xrelease lock addq %rax,(%rcx)
597         lock xrelease addq %rax,(%rcx)
598         .byte 0xf0; .byte 0xf2; addq %rax,(%rcx)
599         .byte 0xf0; .byte 0xf3; addq %rax,(%rcx)
600         xacquire lock andq %rax,(%rcx)
601         lock xacquire andq %rax,(%rcx)
602         xrelease lock andq %rax,(%rcx)
603         lock xrelease andq %rax,(%rcx)
604         .byte 0xf0; .byte 0xf2; andq %rax,(%rcx)
605         .byte 0xf0; .byte 0xf3; andq %rax,(%rcx)
606         xrelease movq %rax,(%rcx)
607         xacquire lock orq %rax,(%rcx)
608         lock xacquire orq %rax,(%rcx)
609         xrelease lock orq %rax,(%rcx)
610         lock xrelease orq %rax,(%rcx)
611         .byte 0xf0; .byte 0xf2; orq %rax,(%rcx)
612         .byte 0xf0; .byte 0xf3; orq %rax,(%rcx)
613         xacquire lock sbbq %rax,(%rcx)
614         lock xacquire sbbq %rax,(%rcx)
615         xrelease lock sbbq %rax,(%rcx)
616         lock xrelease sbbq %rax,(%rcx)
617         .byte 0xf0; .byte 0xf2; sbbq %rax,(%rcx)
618         .byte 0xf0; .byte 0xf3; sbbq %rax,(%rcx)
619         xacquire lock subq %rax,(%rcx)
620         lock xacquire subq %rax,(%rcx)
621         xrelease lock subq %rax,(%rcx)
622         lock xrelease subq %rax,(%rcx)
623         .byte 0xf0; .byte 0xf2; subq %rax,(%rcx)
624         .byte 0xf0; .byte 0xf3; subq %rax,(%rcx)
625         xacquire lock xchgq %rax,(%rcx)
626         lock xacquire xchgq %rax,(%rcx)
627         xacquire xchgq %rax,(%rcx)
628         xrelease lock xchgq %rax,(%rcx)
629         lock xrelease xchgq %rax,(%rcx)
630         xrelease xchgq %rax,(%rcx)
631         .byte 0xf0; .byte 0xf2; xchgq %rax,(%rcx)
632         .byte 0xf0; .byte 0xf3; xchgq %rax,(%rcx)
633         xacquire lock xorq %rax,(%rcx)
634         lock xacquire xorq %rax,(%rcx)
635         xrelease lock xorq %rax,(%rcx)
636         lock xrelease xorq %rax,(%rcx)
637         .byte 0xf0; .byte 0xf2; xorq %rax,(%rcx)
638         .byte 0xf0; .byte 0xf3; xorq %rax,(%rcx)
639
640 # Tests for op regs, regs/m16
641         xacquire lock btcw %ax,(%rcx)
642         lock xacquire btcw %ax,(%rcx)
643         xrelease lock btcw %ax,(%rcx)
644         lock xrelease btcw %ax,(%rcx)
645         .byte 0xf0; .byte 0xf2; btcw %ax,(%rcx)
646         .byte 0xf0; .byte 0xf3; btcw %ax,(%rcx)
647         xacquire lock btrw %ax,(%rcx)
648         lock xacquire btrw %ax,(%rcx)
649         xrelease lock btrw %ax,(%rcx)
650         lock xrelease btrw %ax,(%rcx)
651         .byte 0xf0; .byte 0xf2; btrw %ax,(%rcx)
652         .byte 0xf0; .byte 0xf3; btrw %ax,(%rcx)
653         xacquire lock btsw %ax,(%rcx)
654         lock xacquire btsw %ax,(%rcx)
655         xrelease lock btsw %ax,(%rcx)
656         lock xrelease btsw %ax,(%rcx)
657         .byte 0xf0; .byte 0xf2; btsw %ax,(%rcx)
658         .byte 0xf0; .byte 0xf3; btsw %ax,(%rcx)
659         xacquire lock cmpxchgw %ax,(%rcx)
660         lock xacquire cmpxchgw %ax,(%rcx)
661         xrelease lock cmpxchgw %ax,(%rcx)
662         lock xrelease cmpxchgw %ax,(%rcx)
663         .byte 0xf0; .byte 0xf2; cmpxchgw %ax,(%rcx)
664         .byte 0xf0; .byte 0xf3; cmpxchgw %ax,(%rcx)
665         xacquire lock xaddw %ax,(%rcx)
666         lock xacquire xaddw %ax,(%rcx)
667         xrelease lock xaddw %ax,(%rcx)
668         lock xrelease xaddw %ax,(%rcx)
669         .byte 0xf0; .byte 0xf2; xaddw %ax,(%rcx)
670         .byte 0xf0; .byte 0xf3; xaddw %ax,(%rcx)
671
672 # Tests for op regl regl/m32
673         xacquire lock btcl %eax,(%rcx)
674         lock xacquire btcl %eax,(%rcx)
675         xrelease lock btcl %eax,(%rcx)
676         lock xrelease btcl %eax,(%rcx)
677         .byte 0xf0; .byte 0xf2; btcl %eax,(%rcx)
678         .byte 0xf0; .byte 0xf3; btcl %eax,(%rcx)
679         xacquire lock btrl %eax,(%rcx)
680         lock xacquire btrl %eax,(%rcx)
681         xrelease lock btrl %eax,(%rcx)
682         lock xrelease btrl %eax,(%rcx)
683         .byte 0xf0; .byte 0xf2; btrl %eax,(%rcx)
684         .byte 0xf0; .byte 0xf3; btrl %eax,(%rcx)
685         xacquire lock btsl %eax,(%rcx)
686         lock xacquire btsl %eax,(%rcx)
687         xrelease lock btsl %eax,(%rcx)
688         lock xrelease btsl %eax,(%rcx)
689         .byte 0xf0; .byte 0xf2; btsl %eax,(%rcx)
690         .byte 0xf0; .byte 0xf3; btsl %eax,(%rcx)
691         xacquire lock cmpxchgl %eax,(%rcx)
692         lock xacquire cmpxchgl %eax,(%rcx)
693         xrelease lock cmpxchgl %eax,(%rcx)
694         lock xrelease cmpxchgl %eax,(%rcx)
695         .byte 0xf0; .byte 0xf2; cmpxchgl %eax,(%rcx)
696         .byte 0xf0; .byte 0xf3; cmpxchgl %eax,(%rcx)
697         xacquire lock xaddl %eax,(%rcx)
698         lock xacquire xaddl %eax,(%rcx)
699         xrelease lock xaddl %eax,(%rcx)
700         lock xrelease xaddl %eax,(%rcx)
701         .byte 0xf0; .byte 0xf2; xaddl %eax,(%rcx)
702         .byte 0xf0; .byte 0xf3; xaddl %eax,(%rcx)
703
704 # Tests for op regq regq/m64
705         xacquire lock btcq %rax,(%rcx)
706         lock xacquire btcq %rax,(%rcx)
707         xrelease lock btcq %rax,(%rcx)
708         lock xrelease btcq %rax,(%rcx)
709         .byte 0xf0; .byte 0xf2; btcq %rax,(%rcx)
710         .byte 0xf0; .byte 0xf3; btcq %rax,(%rcx)
711         xacquire lock btrq %rax,(%rcx)
712         lock xacquire btrq %rax,(%rcx)
713         xrelease lock btrq %rax,(%rcx)
714         lock xrelease btrq %rax,(%rcx)
715         .byte 0xf0; .byte 0xf2; btrq %rax,(%rcx)
716         .byte 0xf0; .byte 0xf3; btrq %rax,(%rcx)
717         xacquire lock btsq %rax,(%rcx)
718         lock xacquire btsq %rax,(%rcx)
719         xrelease lock btsq %rax,(%rcx)
720         lock xrelease btsq %rax,(%rcx)
721         .byte 0xf0; .byte 0xf2; btsq %rax,(%rcx)
722         .byte 0xf0; .byte 0xf3; btsq %rax,(%rcx)
723         xacquire lock cmpxchgq %rax,(%rcx)
724         lock xacquire cmpxchgq %rax,(%rcx)
725         xrelease lock cmpxchgq %rax,(%rcx)
726         lock xrelease cmpxchgq %rax,(%rcx)
727         .byte 0xf0; .byte 0xf2; cmpxchgq %rax,(%rcx)
728         .byte 0xf0; .byte 0xf3; cmpxchgq %rax,(%rcx)
729         xacquire lock xaddq %rax,(%rcx)
730         lock xacquire xaddq %rax,(%rcx)
731         xrelease lock xaddq %rax,(%rcx)
732         lock xrelease xaddq %rax,(%rcx)
733         .byte 0xf0; .byte 0xf2; xaddq %rax,(%rcx)
734         .byte 0xf0; .byte 0xf3; xaddq %rax,(%rcx)
735
736 # Tests for op regb/m8
737         xacquire lock decb (%rcx)
738         lock xacquire decb (%rcx)
739         xrelease lock decb (%rcx)
740         lock xrelease decb (%rcx)
741         .byte 0xf0; .byte 0xf2; decb (%rcx)
742         .byte 0xf0; .byte 0xf3; decb (%rcx)
743         xacquire lock incb (%rcx)
744         lock xacquire incb (%rcx)
745         xrelease lock incb (%rcx)
746         lock xrelease incb (%rcx)
747         .byte 0xf0; .byte 0xf2; incb (%rcx)
748         .byte 0xf0; .byte 0xf3; incb (%rcx)
749         xacquire lock negb (%rcx)
750         lock xacquire negb (%rcx)
751         xrelease lock negb (%rcx)
752         lock xrelease negb (%rcx)
753         .byte 0xf0; .byte 0xf2; negb (%rcx)
754         .byte 0xf0; .byte 0xf3; negb (%rcx)
755         xacquire lock notb (%rcx)
756         lock xacquire notb (%rcx)
757         xrelease lock notb (%rcx)
758         lock xrelease notb (%rcx)
759         .byte 0xf0; .byte 0xf2; notb (%rcx)
760         .byte 0xf0; .byte 0xf3; notb (%rcx)
761
762 # Tests for op regs/m16
763         xacquire lock decw (%rcx)
764         lock xacquire decw (%rcx)
765         xrelease lock decw (%rcx)
766         lock xrelease decw (%rcx)
767         .byte 0xf0; .byte 0xf2; decw (%rcx)
768         .byte 0xf0; .byte 0xf3; decw (%rcx)
769         xacquire lock incw (%rcx)
770         lock xacquire incw (%rcx)
771         xrelease lock incw (%rcx)
772         lock xrelease incw (%rcx)
773         .byte 0xf0; .byte 0xf2; incw (%rcx)
774         .byte 0xf0; .byte 0xf3; incw (%rcx)
775         xacquire lock negw (%rcx)
776         lock xacquire negw (%rcx)
777         xrelease lock negw (%rcx)
778         lock xrelease negw (%rcx)
779         .byte 0xf0; .byte 0xf2; negw (%rcx)
780         .byte 0xf0; .byte 0xf3; negw (%rcx)
781         xacquire lock notw (%rcx)
782         lock xacquire notw (%rcx)
783         xrelease lock notw (%rcx)
784         lock xrelease notw (%rcx)
785         .byte 0xf0; .byte 0xf2; notw (%rcx)
786         .byte 0xf0; .byte 0xf3; notw (%rcx)
787
788 # Tests for op regl/m32
789         xacquire lock decl (%rcx)
790         lock xacquire decl (%rcx)
791         xrelease lock decl (%rcx)
792         lock xrelease decl (%rcx)
793         .byte 0xf0; .byte 0xf2; decl (%rcx)
794         .byte 0xf0; .byte 0xf3; decl (%rcx)
795         xacquire lock incl (%rcx)
796         lock xacquire incl (%rcx)
797         xrelease lock incl (%rcx)
798         lock xrelease incl (%rcx)
799         .byte 0xf0; .byte 0xf2; incl (%rcx)
800         .byte 0xf0; .byte 0xf3; incl (%rcx)
801         xacquire lock negl (%rcx)
802         lock xacquire negl (%rcx)
803         xrelease lock negl (%rcx)
804         lock xrelease negl (%rcx)
805         .byte 0xf0; .byte 0xf2; negl (%rcx)
806         .byte 0xf0; .byte 0xf3; negl (%rcx)
807         xacquire lock notl (%rcx)
808         lock xacquire notl (%rcx)
809         xrelease lock notl (%rcx)
810         lock xrelease notl (%rcx)
811         .byte 0xf0; .byte 0xf2; notl (%rcx)
812         .byte 0xf0; .byte 0xf3; notl (%rcx)
813
814 # Tests for op regq/m64
815         xacquire lock decq (%rcx)
816         lock xacquire decq (%rcx)
817         xrelease lock decq (%rcx)
818         lock xrelease decq (%rcx)
819         .byte 0xf0; .byte 0xf2; decq (%rcx)
820         .byte 0xf0; .byte 0xf3; decq (%rcx)
821         xacquire lock incq (%rcx)
822         lock xacquire incq (%rcx)
823         xrelease lock incq (%rcx)
824         lock xrelease incq (%rcx)
825         .byte 0xf0; .byte 0xf2; incq (%rcx)
826         .byte 0xf0; .byte 0xf3; incq (%rcx)
827         xacquire lock negq (%rcx)
828         lock xacquire negq (%rcx)
829         xrelease lock negq (%rcx)
830         lock xrelease negq (%rcx)
831         .byte 0xf0; .byte 0xf2; negq (%rcx)
832         .byte 0xf0; .byte 0xf3; negq (%rcx)
833         xacquire lock notq (%rcx)
834         lock xacquire notq (%rcx)
835         xrelease lock notq (%rcx)
836         lock xrelease notq (%rcx)
837         .byte 0xf0; .byte 0xf2; notq (%rcx)
838         .byte 0xf0; .byte 0xf3; notq (%rcx)
839
840 # Tests for op m64
841         xacquire lock cmpxchg8bq (%rcx)
842         lock xacquire cmpxchg8bq (%rcx)
843         xrelease lock cmpxchg8bq (%rcx)
844         lock xrelease cmpxchg8bq (%rcx)
845         .byte 0xf0; .byte 0xf2; cmpxchg8bq (%rcx)
846         .byte 0xf0; .byte 0xf3; cmpxchg8bq (%rcx)
847
848 # Tests for op regb, regb/m8
849         xacquire lock cmpxchgb %cl,(%rcx)
850         lock xacquire cmpxchgb %cl,(%rcx)
851         xrelease lock cmpxchgb %cl,(%rcx)
852         lock xrelease cmpxchgb %cl,(%rcx)
853         .byte 0xf0; .byte 0xf2; cmpxchgb %cl,(%rcx)
854         .byte 0xf0; .byte 0xf3; cmpxchgb %cl,(%rcx)
855         xacquire lock xaddb %cl,(%rcx)
856         lock xacquire xaddb %cl,(%rcx)
857         xrelease lock xaddb %cl,(%rcx)
858         lock xrelease xaddb %cl,(%rcx)
859         .byte 0xf0; .byte 0xf2; xaddb %cl,(%rcx)
860         .byte 0xf0; .byte 0xf3; xaddb %cl,(%rcx)
861
862         .intel_syntax noprefix
863
864
865 # Tests for op imm32 rax
866
867 # Tests for op imm8 regb/m8
868         xacquire lock adc BYTE PTR [rcx],100
869         lock xacquire adc BYTE PTR [rcx],100
870         xrelease lock adc BYTE PTR [rcx],100
871         lock xrelease adc BYTE PTR [rcx],100
872         .byte 0xf0; .byte 0xf2; adc BYTE PTR [rcx],100
873         .byte 0xf0; .byte 0xf3; adc BYTE PTR [rcx],100
874         xacquire lock add BYTE PTR [rcx],100
875         lock xacquire add BYTE PTR [rcx],100
876         xrelease lock add BYTE PTR [rcx],100
877         lock xrelease add BYTE PTR [rcx],100
878         .byte 0xf0; .byte 0xf2; add BYTE PTR [rcx],100
879         .byte 0xf0; .byte 0xf3; add BYTE PTR [rcx],100
880         xacquire lock and BYTE PTR [rcx],100
881         lock xacquire and BYTE PTR [rcx],100
882         xrelease lock and BYTE PTR [rcx],100
883         lock xrelease and BYTE PTR [rcx],100
884         .byte 0xf0; .byte 0xf2; and BYTE PTR [rcx],100
885         .byte 0xf0; .byte 0xf3; and BYTE PTR [rcx],100
886         xrelease mov BYTE PTR [rcx],100
887         xacquire lock or BYTE PTR [rcx],100
888         lock xacquire or BYTE PTR [rcx],100
889         xrelease lock or BYTE PTR [rcx],100
890         lock xrelease or BYTE PTR [rcx],100
891         .byte 0xf0; .byte 0xf2; or BYTE PTR [rcx],100
892         .byte 0xf0; .byte 0xf3; or BYTE PTR [rcx],100
893         xacquire lock sbb BYTE PTR [rcx],100
894         lock xacquire sbb BYTE PTR [rcx],100
895         xrelease lock sbb BYTE PTR [rcx],100
896         lock xrelease sbb BYTE PTR [rcx],100
897         .byte 0xf0; .byte 0xf2; sbb BYTE PTR [rcx],100
898         .byte 0xf0; .byte 0xf3; sbb BYTE PTR [rcx],100
899         xacquire lock sub BYTE PTR [rcx],100
900         lock xacquire sub BYTE PTR [rcx],100
901         xrelease lock sub BYTE PTR [rcx],100
902         lock xrelease sub BYTE PTR [rcx],100
903         .byte 0xf0; .byte 0xf2; sub BYTE PTR [rcx],100
904         .byte 0xf0; .byte 0xf3; sub BYTE PTR [rcx],100
905         xacquire lock xor BYTE PTR [rcx],100
906         lock xacquire xor BYTE PTR [rcx],100
907         xrelease lock xor BYTE PTR [rcx],100
908         lock xrelease xor BYTE PTR [rcx],100
909         .byte 0xf0; .byte 0xf2; xor BYTE PTR [rcx],100
910         .byte 0xf0; .byte 0xf3; xor BYTE PTR [rcx],100
911
912 # Tests for op imm16 regs/m16
913         xacquire lock adc WORD PTR [rcx],1000
914         lock xacquire adc WORD PTR [rcx],1000
915         xrelease lock adc WORD PTR [rcx],1000
916         lock xrelease adc WORD PTR [rcx],1000
917         .byte 0xf0; .byte 0xf2; adc WORD PTR [rcx],1000
918         .byte 0xf0; .byte 0xf3; adc WORD PTR [rcx],1000
919         xacquire lock add WORD PTR [rcx],1000
920         lock xacquire add WORD PTR [rcx],1000
921         xrelease lock add WORD PTR [rcx],1000
922         lock xrelease add WORD PTR [rcx],1000
923         .byte 0xf0; .byte 0xf2; add WORD PTR [rcx],1000
924         .byte 0xf0; .byte 0xf3; add WORD PTR [rcx],1000
925         xacquire lock and WORD PTR [rcx],1000
926         lock xacquire and WORD PTR [rcx],1000
927         xrelease lock and WORD PTR [rcx],1000
928         lock xrelease and WORD PTR [rcx],1000
929         .byte 0xf0; .byte 0xf2; and WORD PTR [rcx],1000
930         .byte 0xf0; .byte 0xf3; and WORD PTR [rcx],1000
931         xrelease mov WORD PTR [rcx],1000
932         xacquire lock or WORD PTR [rcx],1000
933         lock xacquire or WORD PTR [rcx],1000
934         xrelease lock or WORD PTR [rcx],1000
935         lock xrelease or WORD PTR [rcx],1000
936         .byte 0xf0; .byte 0xf2; or WORD PTR [rcx],1000
937         .byte 0xf0; .byte 0xf3; or WORD PTR [rcx],1000
938         xacquire lock sbb WORD PTR [rcx],1000
939         lock xacquire sbb WORD PTR [rcx],1000
940         xrelease lock sbb WORD PTR [rcx],1000
941         lock xrelease sbb WORD PTR [rcx],1000
942         .byte 0xf0; .byte 0xf2; sbb WORD PTR [rcx],1000
943         .byte 0xf0; .byte 0xf3; sbb WORD PTR [rcx],1000
944         xacquire lock sub WORD PTR [rcx],1000
945         lock xacquire sub WORD PTR [rcx],1000
946         xrelease lock sub WORD PTR [rcx],1000
947         lock xrelease sub WORD PTR [rcx],1000
948         .byte 0xf0; .byte 0xf2; sub WORD PTR [rcx],1000
949         .byte 0xf0; .byte 0xf3; sub WORD PTR [rcx],1000
950         xacquire lock xor WORD PTR [rcx],1000
951         lock xacquire xor WORD PTR [rcx],1000
952         xrelease lock xor WORD PTR [rcx],1000
953         lock xrelease xor WORD PTR [rcx],1000
954         .byte 0xf0; .byte 0xf2; xor WORD PTR [rcx],1000
955         .byte 0xf0; .byte 0xf3; xor WORD PTR [rcx],1000
956
957 # Tests for op imm32 regl/m32
958         xacquire lock adc DWORD PTR [rcx],10000000
959         lock xacquire adc DWORD PTR [rcx],10000000
960         xrelease lock adc DWORD PTR [rcx],10000000
961         lock xrelease adc DWORD PTR [rcx],10000000
962         .byte 0xf0; .byte 0xf2; adc DWORD PTR [rcx],10000000
963         .byte 0xf0; .byte 0xf3; adc DWORD PTR [rcx],10000000
964         xacquire lock add DWORD PTR [rcx],10000000
965         lock xacquire add DWORD PTR [rcx],10000000
966         xrelease lock add DWORD PTR [rcx],10000000
967         lock xrelease add DWORD PTR [rcx],10000000
968         .byte 0xf0; .byte 0xf2; add DWORD PTR [rcx],10000000
969         .byte 0xf0; .byte 0xf3; add DWORD PTR [rcx],10000000
970         xacquire lock and DWORD PTR [rcx],10000000
971         lock xacquire and DWORD PTR [rcx],10000000
972         xrelease lock and DWORD PTR [rcx],10000000
973         lock xrelease and DWORD PTR [rcx],10000000
974         .byte 0xf0; .byte 0xf2; and DWORD PTR [rcx],10000000
975         .byte 0xf0; .byte 0xf3; and DWORD PTR [rcx],10000000
976         xrelease mov DWORD PTR [rcx],10000000
977         xacquire lock or DWORD PTR [rcx],10000000
978         lock xacquire or DWORD PTR [rcx],10000000
979         xrelease lock or DWORD PTR [rcx],10000000
980         lock xrelease or DWORD PTR [rcx],10000000
981         .byte 0xf0; .byte 0xf2; or DWORD PTR [rcx],10000000
982         .byte 0xf0; .byte 0xf3; or DWORD PTR [rcx],10000000
983         xacquire lock sbb DWORD PTR [rcx],10000000
984         lock xacquire sbb DWORD PTR [rcx],10000000
985         xrelease lock sbb DWORD PTR [rcx],10000000
986         lock xrelease sbb DWORD PTR [rcx],10000000
987         .byte 0xf0; .byte 0xf2; sbb DWORD PTR [rcx],10000000
988         .byte 0xf0; .byte 0xf3; sbb DWORD PTR [rcx],10000000
989         xacquire lock sub DWORD PTR [rcx],10000000
990         lock xacquire sub DWORD PTR [rcx],10000000
991         xrelease lock sub DWORD PTR [rcx],10000000
992         lock xrelease sub DWORD PTR [rcx],10000000
993         .byte 0xf0; .byte 0xf2; sub DWORD PTR [rcx],10000000
994         .byte 0xf0; .byte 0xf3; sub DWORD PTR [rcx],10000000
995         xacquire lock xor DWORD PTR [rcx],10000000
996         lock xacquire xor DWORD PTR [rcx],10000000
997         xrelease lock xor DWORD PTR [rcx],10000000
998         lock xrelease xor DWORD PTR [rcx],10000000
999         .byte 0xf0; .byte 0xf2; xor DWORD PTR [rcx],10000000
1000         .byte 0xf0; .byte 0xf3; xor DWORD PTR [rcx],10000000
1001
1002 # Tests for op imm32 regq/m64
1003         xacquire lock adc QWORD PTR [rcx],10000000
1004         lock xacquire adc QWORD PTR [rcx],10000000
1005         xrelease lock adc QWORD PTR [rcx],10000000
1006         lock xrelease adc QWORD PTR [rcx],10000000
1007         .byte 0xf0; .byte 0xf2; adc QWORD PTR [rcx],10000000
1008         .byte 0xf0; .byte 0xf3; adc QWORD PTR [rcx],10000000
1009         xacquire lock add QWORD PTR [rcx],10000000
1010         lock xacquire add QWORD PTR [rcx],10000000
1011         xrelease lock add QWORD PTR [rcx],10000000
1012         lock xrelease add QWORD PTR [rcx],10000000
1013         .byte 0xf0; .byte 0xf2; add QWORD PTR [rcx],10000000
1014         .byte 0xf0; .byte 0xf3; add QWORD PTR [rcx],10000000
1015         xacquire lock and QWORD PTR [rcx],10000000
1016         lock xacquire and QWORD PTR [rcx],10000000
1017         xrelease lock and QWORD PTR [rcx],10000000
1018         lock xrelease and QWORD PTR [rcx],10000000
1019         .byte 0xf0; .byte 0xf2; and QWORD PTR [rcx],10000000
1020         .byte 0xf0; .byte 0xf3; and QWORD PTR [rcx],10000000
1021         xrelease mov QWORD PTR [rcx],10000000
1022         xacquire lock or QWORD PTR [rcx],10000000
1023         lock xacquire or QWORD PTR [rcx],10000000
1024         xrelease lock or QWORD PTR [rcx],10000000
1025         lock xrelease or QWORD PTR [rcx],10000000
1026         .byte 0xf0; .byte 0xf2; or QWORD PTR [rcx],10000000
1027         .byte 0xf0; .byte 0xf3; or QWORD PTR [rcx],10000000
1028         xacquire lock sbb QWORD PTR [rcx],10000000
1029         lock xacquire sbb QWORD PTR [rcx],10000000
1030         xrelease lock sbb QWORD PTR [rcx],10000000
1031         lock xrelease sbb QWORD PTR [rcx],10000000
1032         .byte 0xf0; .byte 0xf2; sbb QWORD PTR [rcx],10000000
1033         .byte 0xf0; .byte 0xf3; sbb QWORD PTR [rcx],10000000
1034         xacquire lock sub QWORD PTR [rcx],10000000
1035         lock xacquire sub QWORD PTR [rcx],10000000
1036         xrelease lock sub QWORD PTR [rcx],10000000
1037         lock xrelease sub QWORD PTR [rcx],10000000
1038         .byte 0xf0; .byte 0xf2; sub QWORD PTR [rcx],10000000
1039         .byte 0xf0; .byte 0xf3; sub QWORD PTR [rcx],10000000
1040         xacquire lock xor QWORD PTR [rcx],10000000
1041         lock xacquire xor QWORD PTR [rcx],10000000
1042         xrelease lock xor QWORD PTR [rcx],10000000
1043         lock xrelease xor QWORD PTR [rcx],10000000
1044         .byte 0xf0; .byte 0xf2; xor QWORD PTR [rcx],10000000
1045         .byte 0xf0; .byte 0xf3; xor QWORD PTR [rcx],10000000
1046
1047 # Tests for op imm8 regs/m16
1048         xacquire lock adc WORD PTR [rcx],100
1049         lock xacquire adc WORD PTR [rcx],100
1050         xrelease lock adc WORD PTR [rcx],100
1051         lock xrelease adc WORD PTR [rcx],100
1052         .byte 0xf0; .byte 0xf2; adc WORD PTR [rcx],100
1053         .byte 0xf0; .byte 0xf3; adc WORD PTR [rcx],100
1054         xacquire lock add WORD PTR [rcx],100
1055         lock xacquire add WORD PTR [rcx],100
1056         xrelease lock add WORD PTR [rcx],100
1057         lock xrelease add WORD PTR [rcx],100
1058         .byte 0xf0; .byte 0xf2; add WORD PTR [rcx],100
1059         .byte 0xf0; .byte 0xf3; add WORD PTR [rcx],100
1060         xacquire lock and WORD PTR [rcx],100
1061         lock xacquire and WORD PTR [rcx],100
1062         xrelease lock and WORD PTR [rcx],100
1063         lock xrelease and WORD PTR [rcx],100
1064         .byte 0xf0; .byte 0xf2; and WORD PTR [rcx],100
1065         .byte 0xf0; .byte 0xf3; and WORD PTR [rcx],100
1066         xacquire lock btc WORD PTR [rcx],100
1067         lock xacquire btc WORD PTR [rcx],100
1068         xrelease lock btc WORD PTR [rcx],100
1069         lock xrelease btc WORD PTR [rcx],100
1070         .byte 0xf0; .byte 0xf2; btc WORD PTR [rcx],100
1071         .byte 0xf0; .byte 0xf3; btc WORD PTR [rcx],100
1072         xacquire lock btr WORD PTR [rcx],100
1073         lock xacquire btr WORD PTR [rcx],100
1074         xrelease lock btr WORD PTR [rcx],100
1075         lock xrelease btr WORD PTR [rcx],100
1076         .byte 0xf0; .byte 0xf2; btr WORD PTR [rcx],100
1077         .byte 0xf0; .byte 0xf3; btr WORD PTR [rcx],100
1078         xacquire lock bts WORD PTR [rcx],100
1079         lock xacquire bts WORD PTR [rcx],100
1080         xrelease lock bts WORD PTR [rcx],100
1081         lock xrelease bts WORD PTR [rcx],100
1082         .byte 0xf0; .byte 0xf2; bts WORD PTR [rcx],100
1083         .byte 0xf0; .byte 0xf3; bts WORD PTR [rcx],100
1084         xrelease mov WORD PTR [rcx],100
1085         xacquire lock or WORD PTR [rcx],100
1086         lock xacquire or WORD PTR [rcx],100
1087         xrelease lock or WORD PTR [rcx],100
1088         lock xrelease or WORD PTR [rcx],100
1089         .byte 0xf0; .byte 0xf2; or WORD PTR [rcx],100
1090         .byte 0xf0; .byte 0xf3; or WORD PTR [rcx],100
1091         xacquire lock sbb WORD PTR [rcx],100
1092         lock xacquire sbb WORD PTR [rcx],100
1093         xrelease lock sbb WORD PTR [rcx],100
1094         lock xrelease sbb WORD PTR [rcx],100
1095         .byte 0xf0; .byte 0xf2; sbb WORD PTR [rcx],100
1096         .byte 0xf0; .byte 0xf3; sbb WORD PTR [rcx],100
1097         xacquire lock sub WORD PTR [rcx],100
1098         lock xacquire sub WORD PTR [rcx],100
1099         xrelease lock sub WORD PTR [rcx],100
1100         lock xrelease sub WORD PTR [rcx],100
1101         .byte 0xf0; .byte 0xf2; sub WORD PTR [rcx],100
1102         .byte 0xf0; .byte 0xf3; sub WORD PTR [rcx],100
1103         xacquire lock xor WORD PTR [rcx],100
1104         lock xacquire xor WORD PTR [rcx],100
1105         xrelease lock xor WORD PTR [rcx],100
1106         lock xrelease xor WORD PTR [rcx],100
1107         .byte 0xf0; .byte 0xf2; xor WORD PTR [rcx],100
1108         .byte 0xf0; .byte 0xf3; xor WORD PTR [rcx],100
1109
1110 # Tests for op imm8 regl/m32
1111         xacquire lock adc DWORD PTR [rcx],100
1112         lock xacquire adc DWORD PTR [rcx],100
1113         xrelease lock adc DWORD PTR [rcx],100
1114         lock xrelease adc DWORD PTR [rcx],100
1115         .byte 0xf0; .byte 0xf2; adc DWORD PTR [rcx],100
1116         .byte 0xf0; .byte 0xf3; adc DWORD PTR [rcx],100
1117         xacquire lock add DWORD PTR [rcx],100
1118         lock xacquire add DWORD PTR [rcx],100
1119         xrelease lock add DWORD PTR [rcx],100
1120         lock xrelease add DWORD PTR [rcx],100
1121         .byte 0xf0; .byte 0xf2; add DWORD PTR [rcx],100
1122         .byte 0xf0; .byte 0xf3; add DWORD PTR [rcx],100
1123         xacquire lock and DWORD PTR [rcx],100
1124         lock xacquire and DWORD PTR [rcx],100
1125         xrelease lock and DWORD PTR [rcx],100
1126         lock xrelease and DWORD PTR [rcx],100
1127         .byte 0xf0; .byte 0xf2; and DWORD PTR [rcx],100
1128         .byte 0xf0; .byte 0xf3; and DWORD PTR [rcx],100
1129         xacquire lock btc DWORD PTR [rcx],100
1130         lock xacquire btc DWORD PTR [rcx],100
1131         xrelease lock btc DWORD PTR [rcx],100
1132         lock xrelease btc DWORD PTR [rcx],100
1133         .byte 0xf0; .byte 0xf2; btc DWORD PTR [rcx],100
1134         .byte 0xf0; .byte 0xf3; btc DWORD PTR [rcx],100
1135         xacquire lock btr DWORD PTR [rcx],100
1136         lock xacquire btr DWORD PTR [rcx],100
1137         xrelease lock btr DWORD PTR [rcx],100
1138         lock xrelease btr DWORD PTR [rcx],100
1139         .byte 0xf0; .byte 0xf2; btr DWORD PTR [rcx],100
1140         .byte 0xf0; .byte 0xf3; btr DWORD PTR [rcx],100
1141         xacquire lock bts DWORD PTR [rcx],100
1142         lock xacquire bts DWORD PTR [rcx],100
1143         xrelease lock bts DWORD PTR [rcx],100
1144         lock xrelease bts DWORD PTR [rcx],100
1145         .byte 0xf0; .byte 0xf2; bts DWORD PTR [rcx],100
1146         .byte 0xf0; .byte 0xf3; bts DWORD PTR [rcx],100
1147         xrelease mov DWORD PTR [rcx],100
1148         xacquire lock or DWORD PTR [rcx],100
1149         lock xacquire or DWORD PTR [rcx],100
1150         xrelease lock or DWORD PTR [rcx],100
1151         lock xrelease or DWORD PTR [rcx],100
1152         .byte 0xf0; .byte 0xf2; or DWORD PTR [rcx],100
1153         .byte 0xf0; .byte 0xf3; or DWORD PTR [rcx],100
1154         xacquire lock sbb DWORD PTR [rcx],100
1155         lock xacquire sbb DWORD PTR [rcx],100
1156         xrelease lock sbb DWORD PTR [rcx],100
1157         lock xrelease sbb DWORD PTR [rcx],100
1158         .byte 0xf0; .byte 0xf2; sbb DWORD PTR [rcx],100
1159         .byte 0xf0; .byte 0xf3; sbb DWORD PTR [rcx],100
1160         xacquire lock sub DWORD PTR [rcx],100
1161         lock xacquire sub DWORD PTR [rcx],100
1162         xrelease lock sub DWORD PTR [rcx],100
1163         lock xrelease sub DWORD PTR [rcx],100
1164         .byte 0xf0; .byte 0xf2; sub DWORD PTR [rcx],100
1165         .byte 0xf0; .byte 0xf3; sub DWORD PTR [rcx],100
1166         xacquire lock xor DWORD PTR [rcx],100
1167         lock xacquire xor DWORD PTR [rcx],100
1168         xrelease lock xor DWORD PTR [rcx],100
1169         lock xrelease xor DWORD PTR [rcx],100
1170         .byte 0xf0; .byte 0xf2; xor DWORD PTR [rcx],100
1171         .byte 0xf0; .byte 0xf3; xor DWORD PTR [rcx],100
1172
1173 # Tests for op imm8 regq/m64
1174         xacquire lock adc QWORD PTR [rcx],100
1175         lock xacquire adc QWORD PTR [rcx],100
1176         xrelease lock adc QWORD PTR [rcx],100
1177         lock xrelease adc QWORD PTR [rcx],100
1178         .byte 0xf0; .byte 0xf2; adc QWORD PTR [rcx],100
1179         .byte 0xf0; .byte 0xf3; adc QWORD PTR [rcx],100
1180         xacquire lock add QWORD PTR [rcx],100
1181         lock xacquire add QWORD PTR [rcx],100
1182         xrelease lock add QWORD PTR [rcx],100
1183         lock xrelease add QWORD PTR [rcx],100
1184         .byte 0xf0; .byte 0xf2; add QWORD PTR [rcx],100
1185         .byte 0xf0; .byte 0xf3; add QWORD PTR [rcx],100
1186         xacquire lock and QWORD PTR [rcx],100
1187         lock xacquire and QWORD PTR [rcx],100
1188         xrelease lock and QWORD PTR [rcx],100
1189         lock xrelease and QWORD PTR [rcx],100
1190         .byte 0xf0; .byte 0xf2; and QWORD PTR [rcx],100
1191         .byte 0xf0; .byte 0xf3; and QWORD PTR [rcx],100
1192         xacquire lock btc QWORD PTR [rcx],100
1193         lock xacquire btc QWORD PTR [rcx],100
1194         xrelease lock btc QWORD PTR [rcx],100
1195         lock xrelease btc QWORD PTR [rcx],100
1196         .byte 0xf0; .byte 0xf2; btc QWORD PTR [rcx],100
1197         .byte 0xf0; .byte 0xf3; btc QWORD PTR [rcx],100
1198         xacquire lock btr QWORD PTR [rcx],100
1199         lock xacquire btr QWORD PTR [rcx],100
1200         xrelease lock btr QWORD PTR [rcx],100
1201         lock xrelease btr QWORD PTR [rcx],100
1202         .byte 0xf0; .byte 0xf2; btr QWORD PTR [rcx],100
1203         .byte 0xf0; .byte 0xf3; btr QWORD PTR [rcx],100
1204         xacquire lock bts QWORD PTR [rcx],100
1205         lock xacquire bts QWORD PTR [rcx],100
1206         xrelease lock bts QWORD PTR [rcx],100
1207         lock xrelease bts QWORD PTR [rcx],100
1208         .byte 0xf0; .byte 0xf2; bts QWORD PTR [rcx],100
1209         .byte 0xf0; .byte 0xf3; bts QWORD PTR [rcx],100
1210         xrelease mov QWORD PTR [rcx],100
1211         xacquire lock or QWORD PTR [rcx],100
1212         lock xacquire or QWORD PTR [rcx],100
1213         xrelease lock or QWORD PTR [rcx],100
1214         lock xrelease or QWORD PTR [rcx],100
1215         .byte 0xf0; .byte 0xf2; or QWORD PTR [rcx],100
1216         .byte 0xf0; .byte 0xf3; or QWORD PTR [rcx],100
1217         xacquire lock sbb QWORD PTR [rcx],100
1218         lock xacquire sbb QWORD PTR [rcx],100
1219         xrelease lock sbb QWORD PTR [rcx],100
1220         lock xrelease sbb QWORD PTR [rcx],100
1221         .byte 0xf0; .byte 0xf2; sbb QWORD PTR [rcx],100
1222         .byte 0xf0; .byte 0xf3; sbb QWORD PTR [rcx],100
1223         xacquire lock sub QWORD PTR [rcx],100
1224         lock xacquire sub QWORD PTR [rcx],100
1225         xrelease lock sub QWORD PTR [rcx],100
1226         lock xrelease sub QWORD PTR [rcx],100
1227         .byte 0xf0; .byte 0xf2; sub QWORD PTR [rcx],100
1228         .byte 0xf0; .byte 0xf3; sub QWORD PTR [rcx],100
1229         xacquire lock xor QWORD PTR [rcx],100
1230         lock xacquire xor QWORD PTR [rcx],100
1231         xrelease lock xor QWORD PTR [rcx],100
1232         lock xrelease xor QWORD PTR [rcx],100
1233         .byte 0xf0; .byte 0xf2; xor QWORD PTR [rcx],100
1234         .byte 0xf0; .byte 0xf3; xor QWORD PTR [rcx],100
1235
1236 # Tests for op imm8 regb/m8
1237         xacquire lock adc BYTE PTR [rcx],100
1238         lock xacquire adc BYTE PTR [rcx],100
1239         xrelease lock adc BYTE PTR [rcx],100
1240         lock xrelease adc BYTE PTR [rcx],100
1241         .byte 0xf0; .byte 0xf2; adc BYTE PTR [rcx],100
1242         .byte 0xf0; .byte 0xf3; adc BYTE PTR [rcx],100
1243         xacquire lock add BYTE PTR [rcx],100
1244         lock xacquire add BYTE PTR [rcx],100
1245         xrelease lock add BYTE PTR [rcx],100
1246         lock xrelease add BYTE PTR [rcx],100
1247         .byte 0xf0; .byte 0xf2; add BYTE PTR [rcx],100
1248         .byte 0xf0; .byte 0xf3; add BYTE PTR [rcx],100
1249         xacquire lock and BYTE PTR [rcx],100
1250         lock xacquire and BYTE PTR [rcx],100
1251         xrelease lock and BYTE PTR [rcx],100
1252         lock xrelease and BYTE PTR [rcx],100
1253         .byte 0xf0; .byte 0xf2; and BYTE PTR [rcx],100
1254         .byte 0xf0; .byte 0xf3; and BYTE PTR [rcx],100
1255         xrelease mov BYTE PTR [rcx],100
1256         xacquire lock or BYTE PTR [rcx],100
1257         lock xacquire or BYTE PTR [rcx],100
1258         xrelease lock or BYTE PTR [rcx],100
1259         lock xrelease or BYTE PTR [rcx],100
1260         .byte 0xf0; .byte 0xf2; or BYTE PTR [rcx],100
1261         .byte 0xf0; .byte 0xf3; or BYTE PTR [rcx],100
1262         xacquire lock sbb BYTE PTR [rcx],100
1263         lock xacquire sbb BYTE PTR [rcx],100
1264         xrelease lock sbb BYTE PTR [rcx],100
1265         lock xrelease sbb BYTE PTR [rcx],100
1266         .byte 0xf0; .byte 0xf2; sbb BYTE PTR [rcx],100
1267         .byte 0xf0; .byte 0xf3; sbb BYTE PTR [rcx],100
1268         xacquire lock sub BYTE PTR [rcx],100
1269         lock xacquire sub BYTE PTR [rcx],100
1270         xrelease lock sub BYTE PTR [rcx],100
1271         lock xrelease sub BYTE PTR [rcx],100
1272         .byte 0xf0; .byte 0xf2; sub BYTE PTR [rcx],100
1273         .byte 0xf0; .byte 0xf3; sub BYTE PTR [rcx],100
1274         xacquire lock xor BYTE PTR [rcx],100
1275         lock xacquire xor BYTE PTR [rcx],100
1276         xrelease lock xor BYTE PTR [rcx],100
1277         lock xrelease xor BYTE PTR [rcx],100
1278         .byte 0xf0; .byte 0xf2; xor BYTE PTR [rcx],100
1279         .byte 0xf0; .byte 0xf3; xor BYTE PTR [rcx],100
1280
1281 # Tests for op regb regb/m8
1282 # Tests for op regb/m8 regb
1283         xacquire lock adc BYTE PTR [rcx],al
1284         lock xacquire adc BYTE PTR [rcx],al
1285         xrelease lock adc BYTE PTR [rcx],al
1286         lock xrelease adc BYTE PTR [rcx],al
1287         .byte 0xf0; .byte 0xf2; adc BYTE PTR [rcx],al
1288         .byte 0xf0; .byte 0xf3; adc BYTE PTR [rcx],al
1289         xacquire lock add BYTE PTR [rcx],al
1290         lock xacquire add BYTE PTR [rcx],al
1291         xrelease lock add BYTE PTR [rcx],al
1292         lock xrelease add BYTE PTR [rcx],al
1293         .byte 0xf0; .byte 0xf2; add BYTE PTR [rcx],al
1294         .byte 0xf0; .byte 0xf3; add BYTE PTR [rcx],al
1295         xacquire lock and BYTE PTR [rcx],al
1296         lock xacquire and BYTE PTR [rcx],al
1297         xrelease lock and BYTE PTR [rcx],al
1298         lock xrelease and BYTE PTR [rcx],al
1299         .byte 0xf0; .byte 0xf2; and BYTE PTR [rcx],al
1300         .byte 0xf0; .byte 0xf3; and BYTE PTR [rcx],al
1301         xrelease mov BYTE PTR [rcx],al
1302         xacquire lock or BYTE PTR [rcx],al
1303         lock xacquire or BYTE PTR [rcx],al
1304         xrelease lock or BYTE PTR [rcx],al
1305         lock xrelease or BYTE PTR [rcx],al
1306         .byte 0xf0; .byte 0xf2; or BYTE PTR [rcx],al
1307         .byte 0xf0; .byte 0xf3; or BYTE PTR [rcx],al
1308         xacquire lock sbb BYTE PTR [rcx],al
1309         lock xacquire sbb BYTE PTR [rcx],al
1310         xrelease lock sbb BYTE PTR [rcx],al
1311         lock xrelease sbb BYTE PTR [rcx],al
1312         .byte 0xf0; .byte 0xf2; sbb BYTE PTR [rcx],al
1313         .byte 0xf0; .byte 0xf3; sbb BYTE PTR [rcx],al
1314         xacquire lock sub BYTE PTR [rcx],al
1315         lock xacquire sub BYTE PTR [rcx],al
1316         xrelease lock sub BYTE PTR [rcx],al
1317         lock xrelease sub BYTE PTR [rcx],al
1318         .byte 0xf0; .byte 0xf2; sub BYTE PTR [rcx],al
1319         .byte 0xf0; .byte 0xf3; sub BYTE PTR [rcx],al
1320         xacquire lock xchg BYTE PTR [rcx],al
1321         lock xacquire xchg BYTE PTR [rcx],al
1322         xacquire xchg BYTE PTR [rcx],al
1323         xrelease lock xchg BYTE PTR [rcx],al
1324         lock xrelease xchg BYTE PTR [rcx],al
1325         xrelease xchg BYTE PTR [rcx],al
1326         .byte 0xf0; .byte 0xf2; xchg BYTE PTR [rcx],al
1327         .byte 0xf0; .byte 0xf3; xchg BYTE PTR [rcx],al
1328         xacquire lock xor BYTE PTR [rcx],al
1329         lock xacquire xor BYTE PTR [rcx],al
1330         xrelease lock xor BYTE PTR [rcx],al
1331         lock xrelease xor BYTE PTR [rcx],al
1332         .byte 0xf0; .byte 0xf2; xor BYTE PTR [rcx],al
1333         .byte 0xf0; .byte 0xf3; xor BYTE PTR [rcx],al
1334
1335 # Tests for op regs regs/m16
1336 # Tests for op regs/m16 regs
1337         xacquire lock adc WORD PTR [rcx],ax
1338         lock xacquire adc WORD PTR [rcx],ax
1339         xrelease lock adc WORD PTR [rcx],ax
1340         lock xrelease adc WORD PTR [rcx],ax
1341         .byte 0xf0; .byte 0xf2; adc WORD PTR [rcx],ax
1342         .byte 0xf0; .byte 0xf3; adc WORD PTR [rcx],ax
1343         xacquire lock add WORD PTR [rcx],ax
1344         lock xacquire add WORD PTR [rcx],ax
1345         xrelease lock add WORD PTR [rcx],ax
1346         lock xrelease add WORD PTR [rcx],ax
1347         .byte 0xf0; .byte 0xf2; add WORD PTR [rcx],ax
1348         .byte 0xf0; .byte 0xf3; add WORD PTR [rcx],ax
1349         xacquire lock and WORD PTR [rcx],ax
1350         lock xacquire and WORD PTR [rcx],ax
1351         xrelease lock and WORD PTR [rcx],ax
1352         lock xrelease and WORD PTR [rcx],ax
1353         .byte 0xf0; .byte 0xf2; and WORD PTR [rcx],ax
1354         .byte 0xf0; .byte 0xf3; and WORD PTR [rcx],ax
1355         xrelease mov WORD PTR [rcx],ax
1356         xacquire lock or WORD PTR [rcx],ax
1357         lock xacquire or WORD PTR [rcx],ax
1358         xrelease lock or WORD PTR [rcx],ax
1359         lock xrelease or WORD PTR [rcx],ax
1360         .byte 0xf0; .byte 0xf2; or WORD PTR [rcx],ax
1361         .byte 0xf0; .byte 0xf3; or WORD PTR [rcx],ax
1362         xacquire lock sbb WORD PTR [rcx],ax
1363         lock xacquire sbb WORD PTR [rcx],ax
1364         xrelease lock sbb WORD PTR [rcx],ax
1365         lock xrelease sbb WORD PTR [rcx],ax
1366         .byte 0xf0; .byte 0xf2; sbb WORD PTR [rcx],ax
1367         .byte 0xf0; .byte 0xf3; sbb WORD PTR [rcx],ax
1368         xacquire lock sub WORD PTR [rcx],ax
1369         lock xacquire sub WORD PTR [rcx],ax
1370         xrelease lock sub WORD PTR [rcx],ax
1371         lock xrelease sub WORD PTR [rcx],ax
1372         .byte 0xf0; .byte 0xf2; sub WORD PTR [rcx],ax
1373         .byte 0xf0; .byte 0xf3; sub WORD PTR [rcx],ax
1374         xacquire lock xchg WORD PTR [rcx],ax
1375         lock xacquire xchg WORD PTR [rcx],ax
1376         xacquire xchg WORD PTR [rcx],ax
1377         xrelease lock xchg WORD PTR [rcx],ax
1378         lock xrelease xchg WORD PTR [rcx],ax
1379         xrelease xchg WORD PTR [rcx],ax
1380         .byte 0xf0; .byte 0xf2; xchg WORD PTR [rcx],ax
1381         .byte 0xf0; .byte 0xf3; xchg WORD PTR [rcx],ax
1382         xacquire lock xor WORD PTR [rcx],ax
1383         lock xacquire xor WORD PTR [rcx],ax
1384         xrelease lock xor WORD PTR [rcx],ax
1385         lock xrelease xor WORD PTR [rcx],ax
1386         .byte 0xf0; .byte 0xf2; xor WORD PTR [rcx],ax
1387         .byte 0xf0; .byte 0xf3; xor WORD PTR [rcx],ax
1388
1389 # Tests for op regl regl/m32
1390 # Tests for op regl/m32 regl
1391         xacquire lock adc DWORD PTR [rcx],eax
1392         lock xacquire adc DWORD PTR [rcx],eax
1393         xrelease lock adc DWORD PTR [rcx],eax
1394         lock xrelease adc DWORD PTR [rcx],eax
1395         .byte 0xf0; .byte 0xf2; adc DWORD PTR [rcx],eax
1396         .byte 0xf0; .byte 0xf3; adc DWORD PTR [rcx],eax
1397         xacquire lock add DWORD PTR [rcx],eax
1398         lock xacquire add DWORD PTR [rcx],eax
1399         xrelease lock add DWORD PTR [rcx],eax
1400         lock xrelease add DWORD PTR [rcx],eax
1401         .byte 0xf0; .byte 0xf2; add DWORD PTR [rcx],eax
1402         .byte 0xf0; .byte 0xf3; add DWORD PTR [rcx],eax
1403         xacquire lock and DWORD PTR [rcx],eax
1404         lock xacquire and DWORD PTR [rcx],eax
1405         xrelease lock and DWORD PTR [rcx],eax
1406         lock xrelease and DWORD PTR [rcx],eax
1407         .byte 0xf0; .byte 0xf2; and DWORD PTR [rcx],eax
1408         .byte 0xf0; .byte 0xf3; and DWORD PTR [rcx],eax
1409         xrelease mov DWORD PTR [rcx],eax
1410         xacquire lock or DWORD PTR [rcx],eax
1411         lock xacquire or DWORD PTR [rcx],eax
1412         xrelease lock or DWORD PTR [rcx],eax
1413         lock xrelease or DWORD PTR [rcx],eax
1414         .byte 0xf0; .byte 0xf2; or DWORD PTR [rcx],eax
1415         .byte 0xf0; .byte 0xf3; or DWORD PTR [rcx],eax
1416         xacquire lock sbb DWORD PTR [rcx],eax
1417         lock xacquire sbb DWORD PTR [rcx],eax
1418         xrelease lock sbb DWORD PTR [rcx],eax
1419         lock xrelease sbb DWORD PTR [rcx],eax
1420         .byte 0xf0; .byte 0xf2; sbb DWORD PTR [rcx],eax
1421         .byte 0xf0; .byte 0xf3; sbb DWORD PTR [rcx],eax
1422         xacquire lock sub DWORD PTR [rcx],eax
1423         lock xacquire sub DWORD PTR [rcx],eax
1424         xrelease lock sub DWORD PTR [rcx],eax
1425         lock xrelease sub DWORD PTR [rcx],eax
1426         .byte 0xf0; .byte 0xf2; sub DWORD PTR [rcx],eax
1427         .byte 0xf0; .byte 0xf3; sub DWORD PTR [rcx],eax
1428         xacquire lock xchg DWORD PTR [rcx],eax
1429         lock xacquire xchg DWORD PTR [rcx],eax
1430         xacquire xchg DWORD PTR [rcx],eax
1431         xrelease lock xchg DWORD PTR [rcx],eax
1432         lock xrelease xchg DWORD PTR [rcx],eax
1433         xrelease xchg DWORD PTR [rcx],eax
1434         .byte 0xf0; .byte 0xf2; xchg DWORD PTR [rcx],eax
1435         .byte 0xf0; .byte 0xf3; xchg DWORD PTR [rcx],eax
1436         xacquire lock xor DWORD PTR [rcx],eax
1437         lock xacquire xor DWORD PTR [rcx],eax
1438         xrelease lock xor DWORD PTR [rcx],eax
1439         lock xrelease xor DWORD PTR [rcx],eax
1440         .byte 0xf0; .byte 0xf2; xor DWORD PTR [rcx],eax
1441         .byte 0xf0; .byte 0xf3; xor DWORD PTR [rcx],eax
1442
1443 # Tests for op regq regq/m64
1444 # Tests for op regq/m64 regq
1445         xacquire lock adc QWORD PTR [rcx],rax
1446         lock xacquire adc QWORD PTR [rcx],rax
1447         xrelease lock adc QWORD PTR [rcx],rax
1448         lock xrelease adc QWORD PTR [rcx],rax
1449         .byte 0xf0; .byte 0xf2; adc QWORD PTR [rcx],rax
1450         .byte 0xf0; .byte 0xf3; adc QWORD PTR [rcx],rax
1451         xacquire lock add QWORD PTR [rcx],rax
1452         lock xacquire add QWORD PTR [rcx],rax
1453         xrelease lock add QWORD PTR [rcx],rax
1454         lock xrelease add QWORD PTR [rcx],rax
1455         .byte 0xf0; .byte 0xf2; add QWORD PTR [rcx],rax
1456         .byte 0xf0; .byte 0xf3; add QWORD PTR [rcx],rax
1457         xacquire lock and QWORD PTR [rcx],rax
1458         lock xacquire and QWORD PTR [rcx],rax
1459         xrelease lock and QWORD PTR [rcx],rax
1460         lock xrelease and QWORD PTR [rcx],rax
1461         .byte 0xf0; .byte 0xf2; and QWORD PTR [rcx],rax
1462         .byte 0xf0; .byte 0xf3; and QWORD PTR [rcx],rax
1463         xrelease mov QWORD PTR [rcx],rax
1464         xacquire lock or QWORD PTR [rcx],rax
1465         lock xacquire or QWORD PTR [rcx],rax
1466         xrelease lock or QWORD PTR [rcx],rax
1467         lock xrelease or QWORD PTR [rcx],rax
1468         .byte 0xf0; .byte 0xf2; or QWORD PTR [rcx],rax
1469         .byte 0xf0; .byte 0xf3; or QWORD PTR [rcx],rax
1470         xacquire lock sbb QWORD PTR [rcx],rax
1471         lock xacquire sbb QWORD PTR [rcx],rax
1472         xrelease lock sbb QWORD PTR [rcx],rax
1473         lock xrelease sbb QWORD PTR [rcx],rax
1474         .byte 0xf0; .byte 0xf2; sbb QWORD PTR [rcx],rax
1475         .byte 0xf0; .byte 0xf3; sbb QWORD PTR [rcx],rax
1476         xacquire lock sub QWORD PTR [rcx],rax
1477         lock xacquire sub QWORD PTR [rcx],rax
1478         xrelease lock sub QWORD PTR [rcx],rax
1479         lock xrelease sub QWORD PTR [rcx],rax
1480         .byte 0xf0; .byte 0xf2; sub QWORD PTR [rcx],rax
1481         .byte 0xf0; .byte 0xf3; sub QWORD PTR [rcx],rax
1482         xacquire lock xchg QWORD PTR [rcx],rax
1483         lock xacquire xchg QWORD PTR [rcx],rax
1484         xacquire xchg QWORD PTR [rcx],rax
1485         xrelease lock xchg QWORD PTR [rcx],rax
1486         lock xrelease xchg QWORD PTR [rcx],rax
1487         xrelease xchg QWORD PTR [rcx],rax
1488         .byte 0xf0; .byte 0xf2; xchg QWORD PTR [rcx],rax
1489         .byte 0xf0; .byte 0xf3; xchg QWORD PTR [rcx],rax
1490         xacquire lock xor QWORD PTR [rcx],rax
1491         lock xacquire xor QWORD PTR [rcx],rax
1492         xrelease lock xor QWORD PTR [rcx],rax
1493         lock xrelease xor QWORD PTR [rcx],rax
1494         .byte 0xf0; .byte 0xf2; xor QWORD PTR [rcx],rax
1495         .byte 0xf0; .byte 0xf3; xor QWORD PTR [rcx],rax
1496
1497 # Tests for op regs, regs/m16
1498         xacquire lock btc WORD PTR [rcx],ax
1499         lock xacquire btc WORD PTR [rcx],ax
1500         xrelease lock btc WORD PTR [rcx],ax
1501         lock xrelease btc WORD PTR [rcx],ax
1502         .byte 0xf0; .byte 0xf2; btc WORD PTR [rcx],ax
1503         .byte 0xf0; .byte 0xf3; btc WORD PTR [rcx],ax
1504         xacquire lock btr WORD PTR [rcx],ax
1505         lock xacquire btr WORD PTR [rcx],ax
1506         xrelease lock btr WORD PTR [rcx],ax
1507         lock xrelease btr WORD PTR [rcx],ax
1508         .byte 0xf0; .byte 0xf2; btr WORD PTR [rcx],ax
1509         .byte 0xf0; .byte 0xf3; btr WORD PTR [rcx],ax
1510         xacquire lock bts WORD PTR [rcx],ax
1511         lock xacquire bts WORD PTR [rcx],ax
1512         xrelease lock bts WORD PTR [rcx],ax
1513         lock xrelease bts WORD PTR [rcx],ax
1514         .byte 0xf0; .byte 0xf2; bts WORD PTR [rcx],ax
1515         .byte 0xf0; .byte 0xf3; bts WORD PTR [rcx],ax
1516         xacquire lock cmpxchg WORD PTR [rcx],ax
1517         lock xacquire cmpxchg WORD PTR [rcx],ax
1518         xrelease lock cmpxchg WORD PTR [rcx],ax
1519         lock xrelease cmpxchg WORD PTR [rcx],ax
1520         .byte 0xf0; .byte 0xf2; cmpxchg WORD PTR [rcx],ax
1521         .byte 0xf0; .byte 0xf3; cmpxchg WORD PTR [rcx],ax
1522         xacquire lock xadd WORD PTR [rcx],ax
1523         lock xacquire xadd WORD PTR [rcx],ax
1524         xrelease lock xadd WORD PTR [rcx],ax
1525         lock xrelease xadd WORD PTR [rcx],ax
1526         .byte 0xf0; .byte 0xf2; xadd WORD PTR [rcx],ax
1527         .byte 0xf0; .byte 0xf3; xadd WORD PTR [rcx],ax
1528
1529 # Tests for op regl regl/m32
1530         xacquire lock btc DWORD PTR [rcx],eax
1531         lock xacquire btc DWORD PTR [rcx],eax
1532         xrelease lock btc DWORD PTR [rcx],eax
1533         lock xrelease btc DWORD PTR [rcx],eax
1534         .byte 0xf0; .byte 0xf2; btc DWORD PTR [rcx],eax
1535         .byte 0xf0; .byte 0xf3; btc DWORD PTR [rcx],eax
1536         xacquire lock btr DWORD PTR [rcx],eax
1537         lock xacquire btr DWORD PTR [rcx],eax
1538         xrelease lock btr DWORD PTR [rcx],eax
1539         lock xrelease btr DWORD PTR [rcx],eax
1540         .byte 0xf0; .byte 0xf2; btr DWORD PTR [rcx],eax
1541         .byte 0xf0; .byte 0xf3; btr DWORD PTR [rcx],eax
1542         xacquire lock bts DWORD PTR [rcx],eax
1543         lock xacquire bts DWORD PTR [rcx],eax
1544         xrelease lock bts DWORD PTR [rcx],eax
1545         lock xrelease bts DWORD PTR [rcx],eax
1546         .byte 0xf0; .byte 0xf2; bts DWORD PTR [rcx],eax
1547         .byte 0xf0; .byte 0xf3; bts DWORD PTR [rcx],eax
1548         xacquire lock cmpxchg DWORD PTR [rcx],eax
1549         lock xacquire cmpxchg DWORD PTR [rcx],eax
1550         xrelease lock cmpxchg DWORD PTR [rcx],eax
1551         lock xrelease cmpxchg DWORD PTR [rcx],eax
1552         .byte 0xf0; .byte 0xf2; cmpxchg DWORD PTR [rcx],eax
1553         .byte 0xf0; .byte 0xf3; cmpxchg DWORD PTR [rcx],eax
1554         xacquire lock xadd DWORD PTR [rcx],eax
1555         lock xacquire xadd DWORD PTR [rcx],eax
1556         xrelease lock xadd DWORD PTR [rcx],eax
1557         lock xrelease xadd DWORD PTR [rcx],eax
1558         .byte 0xf0; .byte 0xf2; xadd DWORD PTR [rcx],eax
1559         .byte 0xf0; .byte 0xf3; xadd DWORD PTR [rcx],eax
1560
1561 # Tests for op regq regq/m64
1562         xacquire lock btc QWORD PTR [rcx],rax
1563         lock xacquire btc QWORD PTR [rcx],rax
1564         xrelease lock btc QWORD PTR [rcx],rax
1565         lock xrelease btc QWORD PTR [rcx],rax
1566         .byte 0xf0; .byte 0xf2; btc QWORD PTR [rcx],rax
1567         .byte 0xf0; .byte 0xf3; btc QWORD PTR [rcx],rax
1568         xacquire lock btr QWORD PTR [rcx],rax
1569         lock xacquire btr QWORD PTR [rcx],rax
1570         xrelease lock btr QWORD PTR [rcx],rax
1571         lock xrelease btr QWORD PTR [rcx],rax
1572         .byte 0xf0; .byte 0xf2; btr QWORD PTR [rcx],rax
1573         .byte 0xf0; .byte 0xf3; btr QWORD PTR [rcx],rax
1574         xacquire lock bts QWORD PTR [rcx],rax
1575         lock xacquire bts QWORD PTR [rcx],rax
1576         xrelease lock bts QWORD PTR [rcx],rax
1577         lock xrelease bts QWORD PTR [rcx],rax
1578         .byte 0xf0; .byte 0xf2; bts QWORD PTR [rcx],rax
1579         .byte 0xf0; .byte 0xf3; bts QWORD PTR [rcx],rax
1580         xacquire lock cmpxchg QWORD PTR [rcx],rax
1581         lock xacquire cmpxchg QWORD PTR [rcx],rax
1582         xrelease lock cmpxchg QWORD PTR [rcx],rax
1583         lock xrelease cmpxchg QWORD PTR [rcx],rax
1584         .byte 0xf0; .byte 0xf2; cmpxchg QWORD PTR [rcx],rax
1585         .byte 0xf0; .byte 0xf3; cmpxchg QWORD PTR [rcx],rax
1586         xacquire lock xadd QWORD PTR [rcx],rax
1587         lock xacquire xadd QWORD PTR [rcx],rax
1588         xrelease lock xadd QWORD PTR [rcx],rax
1589         lock xrelease xadd QWORD PTR [rcx],rax
1590         .byte 0xf0; .byte 0xf2; xadd QWORD PTR [rcx],rax
1591         .byte 0xf0; .byte 0xf3; xadd QWORD PTR [rcx],rax
1592
1593 # Tests for op regb/m8
1594         xacquire lock dec BYTE PTR [rcx]
1595         lock xacquire dec BYTE PTR [rcx]
1596         xrelease lock dec BYTE PTR [rcx]
1597         lock xrelease dec BYTE PTR [rcx]
1598         .byte 0xf0; .byte 0xf2; dec BYTE PTR [rcx]
1599         .byte 0xf0; .byte 0xf3; dec BYTE PTR [rcx]
1600         xacquire lock inc BYTE PTR [rcx]
1601         lock xacquire inc BYTE PTR [rcx]
1602         xrelease lock inc BYTE PTR [rcx]
1603         lock xrelease inc BYTE PTR [rcx]
1604         .byte 0xf0; .byte 0xf2; inc BYTE PTR [rcx]
1605         .byte 0xf0; .byte 0xf3; inc BYTE PTR [rcx]
1606         xacquire lock neg BYTE PTR [rcx]
1607         lock xacquire neg BYTE PTR [rcx]
1608         xrelease lock neg BYTE PTR [rcx]
1609         lock xrelease neg BYTE PTR [rcx]
1610         .byte 0xf0; .byte 0xf2; neg BYTE PTR [rcx]
1611         .byte 0xf0; .byte 0xf3; neg BYTE PTR [rcx]
1612         xacquire lock not BYTE PTR [rcx]
1613         lock xacquire not BYTE PTR [rcx]
1614         xrelease lock not BYTE PTR [rcx]
1615         lock xrelease not BYTE PTR [rcx]
1616         .byte 0xf0; .byte 0xf2; not BYTE PTR [rcx]
1617         .byte 0xf0; .byte 0xf3; not BYTE PTR [rcx]
1618
1619 # Tests for op regs/m16
1620         xacquire lock dec WORD PTR [rcx]
1621         lock xacquire dec WORD PTR [rcx]
1622         xrelease lock dec WORD PTR [rcx]
1623         lock xrelease dec WORD PTR [rcx]
1624         .byte 0xf0; .byte 0xf2; dec WORD PTR [rcx]
1625         .byte 0xf0; .byte 0xf3; dec WORD PTR [rcx]
1626         xacquire lock inc WORD PTR [rcx]
1627         lock xacquire inc WORD PTR [rcx]
1628         xrelease lock inc WORD PTR [rcx]
1629         lock xrelease inc WORD PTR [rcx]
1630         .byte 0xf0; .byte 0xf2; inc WORD PTR [rcx]
1631         .byte 0xf0; .byte 0xf3; inc WORD PTR [rcx]
1632         xacquire lock neg WORD PTR [rcx]
1633         lock xacquire neg WORD PTR [rcx]
1634         xrelease lock neg WORD PTR [rcx]
1635         lock xrelease neg WORD PTR [rcx]
1636         .byte 0xf0; .byte 0xf2; neg WORD PTR [rcx]
1637         .byte 0xf0; .byte 0xf3; neg WORD PTR [rcx]
1638         xacquire lock not WORD PTR [rcx]
1639         lock xacquire not WORD PTR [rcx]
1640         xrelease lock not WORD PTR [rcx]
1641         lock xrelease not WORD PTR [rcx]
1642         .byte 0xf0; .byte 0xf2; not WORD PTR [rcx]
1643         .byte 0xf0; .byte 0xf3; not WORD PTR [rcx]
1644
1645 # Tests for op regl/m32
1646         xacquire lock dec DWORD PTR [rcx]
1647         lock xacquire dec DWORD PTR [rcx]
1648         xrelease lock dec DWORD PTR [rcx]
1649         lock xrelease dec DWORD PTR [rcx]
1650         .byte 0xf0; .byte 0xf2; dec DWORD PTR [rcx]
1651         .byte 0xf0; .byte 0xf3; dec DWORD PTR [rcx]
1652         xacquire lock inc DWORD PTR [rcx]
1653         lock xacquire inc DWORD PTR [rcx]
1654         xrelease lock inc DWORD PTR [rcx]
1655         lock xrelease inc DWORD PTR [rcx]
1656         .byte 0xf0; .byte 0xf2; inc DWORD PTR [rcx]
1657         .byte 0xf0; .byte 0xf3; inc DWORD PTR [rcx]
1658         xacquire lock neg DWORD PTR [rcx]
1659         lock xacquire neg DWORD PTR [rcx]
1660         xrelease lock neg DWORD PTR [rcx]
1661         lock xrelease neg DWORD PTR [rcx]
1662         .byte 0xf0; .byte 0xf2; neg DWORD PTR [rcx]
1663         .byte 0xf0; .byte 0xf3; neg DWORD PTR [rcx]
1664         xacquire lock not DWORD PTR [rcx]
1665         lock xacquire not DWORD PTR [rcx]
1666         xrelease lock not DWORD PTR [rcx]
1667         lock xrelease not DWORD PTR [rcx]
1668         .byte 0xf0; .byte 0xf2; not DWORD PTR [rcx]
1669         .byte 0xf0; .byte 0xf3; not DWORD PTR [rcx]
1670
1671 # Tests for op regq/m64
1672         xacquire lock dec QWORD PTR [rcx]
1673         lock xacquire dec QWORD PTR [rcx]
1674         xrelease lock dec QWORD PTR [rcx]
1675         lock xrelease dec QWORD PTR [rcx]
1676         .byte 0xf0; .byte 0xf2; dec QWORD PTR [rcx]
1677         .byte 0xf0; .byte 0xf3; dec QWORD PTR [rcx]
1678         xacquire lock inc QWORD PTR [rcx]
1679         lock xacquire inc QWORD PTR [rcx]
1680         xrelease lock inc QWORD PTR [rcx]
1681         lock xrelease inc QWORD PTR [rcx]
1682         .byte 0xf0; .byte 0xf2; inc QWORD PTR [rcx]
1683         .byte 0xf0; .byte 0xf3; inc QWORD PTR [rcx]
1684         xacquire lock neg QWORD PTR [rcx]
1685         lock xacquire neg QWORD PTR [rcx]
1686         xrelease lock neg QWORD PTR [rcx]
1687         lock xrelease neg QWORD PTR [rcx]
1688         .byte 0xf0; .byte 0xf2; neg QWORD PTR [rcx]
1689         .byte 0xf0; .byte 0xf3; neg QWORD PTR [rcx]
1690         xacquire lock not QWORD PTR [rcx]
1691         lock xacquire not QWORD PTR [rcx]
1692         xrelease lock not QWORD PTR [rcx]
1693         lock xrelease not QWORD PTR [rcx]
1694         .byte 0xf0; .byte 0xf2; not QWORD PTR [rcx]
1695         .byte 0xf0; .byte 0xf3; not QWORD PTR [rcx]
1696
1697 # Tests for op m64
1698         xacquire lock cmpxchg8b QWORD PTR [rcx]
1699         lock xacquire cmpxchg8b QWORD PTR [rcx]
1700         xrelease lock cmpxchg8b QWORD PTR [rcx]
1701         lock xrelease cmpxchg8b QWORD PTR [rcx]
1702         .byte 0xf0; .byte 0xf2; cmpxchg8b QWORD PTR [rcx]
1703         .byte 0xf0; .byte 0xf3; cmpxchg8b QWORD PTR [rcx]
1704
1705 # Tests for op regb, regb/m8
1706         xacquire lock cmpxchg BYTE PTR [rcx],cl
1707         lock xacquire cmpxchg BYTE PTR [rcx],cl
1708         xrelease lock cmpxchg BYTE PTR [rcx],cl
1709         lock xrelease cmpxchg BYTE PTR [rcx],cl
1710         .byte 0xf0; .byte 0xf2; cmpxchg BYTE PTR [rcx],cl
1711         .byte 0xf0; .byte 0xf3; cmpxchg BYTE PTR [rcx],cl
1712         xacquire lock xadd BYTE PTR [rcx],cl
1713         lock xacquire xadd BYTE PTR [rcx],cl
1714         xrelease lock xadd BYTE PTR [rcx],cl
1715         lock xrelease xadd BYTE PTR [rcx],cl
1716         .byte 0xf0; .byte 0xf2; xadd BYTE PTR [rcx],cl
1717         .byte 0xf0; .byte 0xf3; xadd BYTE PTR [rcx],cl