add support for the commuted form of the test instruction, rdar://8018260.
[oota-llvm.git] / test / MC / AsmParser / X86 / x86_32-new-encoder.s
1 // RUN: llvm-mc -triple i386-unknown-unknown --show-encoding %s | FileCheck %s
2
3         pause
4 // CHECK: pause
5 // CHECK: encoding: [0xf3,0x90]
6         sfence
7 // CHECK: sfence
8 // CHECK: encoding: [0x0f,0xae,0xf8]
9         lfence
10 // CHECK: lfence
11 // CHECK: encoding: [0x0f,0xae,0xe8]
12         mfence
13 // CHECK: mfence
14 // CHECK: encoding: [0x0f,0xae,0xf0]
15         monitor
16 // CHECK: monitor
17 // CHECK: encoding: [0x0f,0x01,0xc8]
18         mwait
19 // CHECK: mwait
20 // CHECK: encoding: [0x0f,0x01,0xc9]
21
22         vmcall
23 // CHECK: vmcall
24 // CHECK: encoding: [0x0f,0x01,0xc1]
25         vmlaunch
26 // CHECK: vmlaunch
27 // CHECK: encoding: [0x0f,0x01,0xc2]
28         vmresume
29 // CHECK: vmresume
30 // CHECK: encoding: [0x0f,0x01,0xc3]
31         vmxoff
32 // CHECK: vmxoff
33 // CHECK: encoding: [0x0f,0x01,0xc4]
34         swapgs
35 // CHECK: swapgs
36 // CHECK: encoding: [0x0f,0x01,0xf8]
37
38 rdtscp
39 // CHECK: rdtscp
40 // CHECK:  encoding: [0x0f,0x01,0xf9]
41
42
43 // CHECK: movl  %eax, 16(%ebp)          # encoding: [0x89,0x45,0x10]
44         movl    %eax, 16(%ebp)
45 // CHECK: movl  %eax, -16(%ebp)          # encoding: [0x89,0x45,0xf0]
46         movl    %eax, -16(%ebp)
47
48 // CHECK: testb %bl, %cl                # encoding: [0x84,0xcb]
49         testb %bl, %cl
50
51 // CHECK: cmpl  %eax, %ebx              # encoding: [0x39,0xc3]
52         cmpl %eax, %ebx
53
54 // CHECK: addw  %ax, %ax                # encoding: [0x66,0x01,0xc0]
55         addw %ax, %ax
56
57 // CHECK: shrl  %eax                    # encoding: [0xd1,0xe8]
58         shrl $1, %eax
59
60 // moffset forms of moves, rdar://7947184
61 movb    0, %al    // CHECK: movb 0, %al  # encoding: [0xa0,A,A,A,A]
62 movw    0, %ax    // CHECK: movw 0, %ax  # encoding: [0x66,0xa1,A,A,A,A]
63 movl    0, %eax   // CHECK: movl 0, %eax  # encoding: [0xa1,A,A,A,A]
64
65 // rdar://7973775
66 into
67 // CHECK: into
68 // CHECK:  encoding: [0xce]
69 int3
70 // CHECK: int3
71 // CHECK:  encoding: [0xcc]
72 int $4
73 // CHECK: int $4
74 // CHECK:  encoding: [0xcd,0x04]
75 int $255
76 // CHECK: int $255
77 // CHECK:  encoding: [0xcd,0xff]
78
79 // CHECK: pushfl        # encoding: [0x9c]
80         pushf
81 // CHECK: pushfl        # encoding: [0x9c]
82         pushfl
83 // CHECK: popfl         # encoding: [0x9d]
84         popf
85 // CHECK: popfl         # encoding: [0x9d]
86         popfl
87
88 // rdar://8014869
89 retl
90 // CHECK: ret
91 // CHECK:  encoding: [0xc3]
92
93 // rdar://7973854
94 // CHECK: cmoval        %eax, %edx
95 // CHECK:  encoding: [0x0f,0x47,0xd0]
96                 cmoval  %eax,%edx
97
98 // CHECK: cmovael       %eax, %edx
99 // CHECK:  encoding: [0x0f,0x43,0xd0]
100                 cmovael %eax,%edx
101
102 // CHECK: cmovbel       %eax, %edx
103 // CHECK:  encoding: [0x0f,0x46,0xd0]
104                 cmovbel %eax,%edx
105
106 // CHECK: cmovbl        %eax, %edx
107 // CHECK:  encoding: [0x0f,0x42,0xd0]
108                 cmovbl  %eax,%edx
109
110 // CHECK: cmovbel       %eax, %edx
111 // CHECK:  encoding: [0x0f,0x46,0xd0]
112                 cmovbel %eax,%edx
113
114 // CHECK: cmovbl        %eax, %edx
115 // CHECK:  encoding: [0x0f,0x42,0xd0]
116                 cmovcl  %eax,%edx
117
118 // CHECK: cmovel        %eax, %edx
119 // CHECK:  encoding: [0x0f,0x44,0xd0]
120                 cmovel  %eax,%edx
121
122 // CHECK: cmovgl        %eax, %edx
123 // CHECK:  encoding: [0x0f,0x4f,0xd0]
124                 cmovgl  %eax,%edx
125
126 // CHECK: cmovgel       %eax, %edx
127 // CHECK:  encoding: [0x0f,0x4d,0xd0]
128                 cmovgel %eax,%edx
129
130 // CHECK: cmovll        %eax, %edx
131 // CHECK:  encoding: [0x0f,0x4c,0xd0]
132                 cmovll  %eax,%edx
133
134 // CHECK: cmovlel       %eax, %edx
135 // CHECK:  encoding: [0x0f,0x4e,0xd0]
136                 cmovlel %eax,%edx
137
138 // CHECK: cmovbel       %eax, %edx
139 // CHECK:  encoding: [0x0f,0x46,0xd0]
140                 cmovnal %eax,%edx
141
142 // CHECK: cmovnel       %eax, %edx
143 // CHECK:  encoding: [0x0f,0x45,0xd0]
144                 cmovnel %eax,%edx
145
146 // CHECK: cmovael       %eax, %edx
147 // CHECK:  encoding: [0x0f,0x43,0xd0]
148                 cmovnbl %eax,%edx
149
150 // CHECK: cmoval        %eax, %edx
151 // CHECK:  encoding: [0x0f,0x47,0xd0]
152                 cmovnbel        %eax,%edx
153
154 // CHECK: cmovael       %eax, %edx
155 // CHECK:  encoding: [0x0f,0x43,0xd0]
156                 cmovncl %eax,%edx
157
158 // CHECK: cmovnel       %eax, %edx
159 // CHECK:  encoding: [0x0f,0x45,0xd0]
160                 cmovnel %eax,%edx
161
162 // CHECK: cmovlel       %eax, %edx
163 // CHECK:  encoding: [0x0f,0x4e,0xd0]
164                 cmovngl %eax,%edx
165
166 // CHECK: cmovgel       %eax, %edx
167 // CHECK:  encoding: [0x0f,0x4d,0xd0]
168                 cmovnl  %eax,%edx
169
170 // CHECK: cmovnel       %eax, %edx
171 // CHECK:  encoding: [0x0f,0x45,0xd0]
172                 cmovnel %eax,%edx
173
174 // CHECK: cmovlel       %eax, %edx
175 // CHECK:  encoding: [0x0f,0x4e,0xd0]
176                 cmovngl %eax,%edx
177
178 // CHECK: cmovll        %eax, %edx
179 // CHECK:  encoding: [0x0f,0x4c,0xd0]
180                 cmovngel        %eax,%edx
181
182 // CHECK: cmovgel       %eax, %edx
183 // CHECK:  encoding: [0x0f,0x4d,0xd0]
184                 cmovnll %eax,%edx
185
186 // CHECK: cmovgl        %eax, %edx
187 // CHECK:  encoding: [0x0f,0x4f,0xd0]
188                 cmovnlel        %eax,%edx
189
190 // CHECK: cmovnol       %eax, %edx
191 // CHECK:  encoding: [0x0f,0x41,0xd0]
192                 cmovnol %eax,%edx
193
194 // CHECK: cmovnpl       %eax, %edx
195 // CHECK:  encoding: [0x0f,0x4b,0xd0]
196                 cmovnpl %eax,%edx
197
198 // CHECK: cmovnsl       %eax, %edx
199 // CHECK:  encoding: [0x0f,0x49,0xd0]
200                 cmovnsl %eax,%edx
201
202 // CHECK: cmovnel       %eax, %edx
203 // CHECK:  encoding: [0x0f,0x45,0xd0]
204                 cmovnzl %eax,%edx
205
206 // CHECK: cmovol        %eax, %edx
207 // CHECK:  encoding: [0x0f,0x40,0xd0]
208                 cmovol  %eax,%edx
209
210 // CHECK: cmovpl        %eax, %edx
211 // CHECK:  encoding: [0x0f,0x4a,0xd0]
212                 cmovpl  %eax,%edx
213
214 // CHECK: cmovsl        %eax, %edx
215 // CHECK:  encoding: [0x0f,0x48,0xd0]
216                 cmovsl  %eax,%edx
217
218 // CHECK: cmovel        %eax, %edx
219 // CHECK:  encoding: [0x0f,0x44,0xd0]
220                 cmovzl  %eax,%edx
221
222 // CHECK: cmpps $0, %xmm0, %xmm1
223 // CHECK: encoding: [0x0f,0xc2,0xc8,0x00]
224         cmpps $0, %xmm0, %xmm1
225 // CHECK:       cmpps   $0, (%eax), %xmm1
226 // CHECK: encoding: [0x0f,0xc2,0x08,0x00]
227         cmpps $0, 0(%eax), %xmm1
228 // CHECK:       cmppd   $0, %xmm0, %xmm1
229 // CHECK: encoding: [0x66,0x0f,0xc2,0xc8,0x00]
230         cmppd $0, %xmm0, %xmm1
231 // CHECK:       cmppd   $0, (%eax), %xmm1
232 // CHECK: encoding: [0x66,0x0f,0xc2,0x08,0x00]
233         cmppd $0, 0(%eax), %xmm1
234 // CHECK:       cmpss   $0, %xmm0, %xmm1
235 // CHECK: encoding: [0xf3,0x0f,0xc2,0xc8,0x00]
236         cmpss $0, %xmm0, %xmm1
237 // CHECK:       cmpss   $0, (%eax), %xmm1
238 // CHECK: encoding: [0xf3,0x0f,0xc2,0x08,0x00]
239         cmpss $0, 0(%eax), %xmm1
240 // CHECK:       cmpsd   $0, %xmm0, %xmm1
241 // CHECK: encoding: [0xf2,0x0f,0xc2,0xc8,0x00]
242         cmpsd $0, %xmm0, %xmm1
243 // CHECK:       cmpsd   $0, (%eax), %xmm1
244 // CHECK: encoding: [0xf2,0x0f,0xc2,0x08,0x00]
245         cmpsd $0, 0(%eax), %xmm1
246
247 // Check matching of instructions which embed the SSE comparison code.
248
249 // CHECK: cmpps $0, %xmm0, %xmm1
250 // CHECK: encoding: [0x0f,0xc2,0xc8,0x00]
251         cmpeqps %xmm0, %xmm1
252
253 // CHECK: cmppd $1, %xmm0, %xmm1
254 // CHECK: encoding: [0x66,0x0f,0xc2,0xc8,0x01]
255         cmpltpd %xmm0, %xmm1
256
257 // CHECK: cmpss $2, %xmm0, %xmm1
258 // CHECK: encoding: [0xf3,0x0f,0xc2,0xc8,0x02]
259         cmpless %xmm0, %xmm1
260
261 // CHECK: cmppd $3, %xmm0, %xmm1
262 // CHECK: encoding: [0x66,0x0f,0xc2,0xc8,0x03]
263         cmpunordpd %xmm0, %xmm1
264
265 // CHECK: cmpps $4, %xmm0, %xmm1
266 // CHECK: encoding: [0x0f,0xc2,0xc8,0x04]
267         cmpneqps %xmm0, %xmm1
268
269 // CHECK: cmppd $5, %xmm0, %xmm1
270 // CHECK: encoding: [0x66,0x0f,0xc2,0xc8,0x05]
271         cmpnltpd %xmm0, %xmm1
272
273 // CHECK: cmpss $6, %xmm0, %xmm1
274 // CHECK: encoding: [0xf3,0x0f,0xc2,0xc8,0x06]
275         cmpnless %xmm0, %xmm1
276
277 // CHECK: cmpsd $7, %xmm0, %xmm1
278 // CHECK: encoding: [0xf2,0x0f,0xc2,0xc8,0x07]
279         cmpordsd %xmm0, %xmm1
280
281 // rdar://7995856
282 // CHECK: fmul  %st(0)
283 // CHECK:  encoding: [0xd8,0xc8]
284         fmul %st(0), %st
285
286 // CHECK: fadd  %st(0)
287 // CHECK:  encoding: [0xd8,0xc0]
288         fadd %st(0), %st
289
290 // CHECK: fsub  %st(0)
291 // CHECK:  encoding: [0xd8,0xe0]
292         fsub %st(0), %st
293
294 // CHECK: fsubr %st(0)
295 // CHECK:  encoding: [0xd8,0xe8]
296         fsubr %st(0), %st
297
298 // CHECK: fdivr %st(0)
299 // CHECK:  encoding: [0xd8,0xf8]
300         fdivr %st(0), %st
301
302 // CHECK: fdiv  %st(0)
303 // CHECK:  encoding: [0xd8,0xf0]
304         fdiv %st(0), %st
305
306 // radr://8017519
307 // CHECK: movl  %cs, %eax
308 // CHECK:  encoding: [0x8c,0xc8]
309         movl %cs, %eax
310
311 // CHECK: movw  %cs, %ax
312 // CHECK:  encoding: [0x66,0x8c,0xc8]
313         movw %cs, %ax
314
315 // CHECK: movl  %cs, (%eax)
316 // CHECK:  encoding: [0x8c,0x08]
317         movl %cs, (%eax)
318
319 // CHECK: movw  %cs, (%eax)
320 // CHECK:  encoding: [0x66,0x8c,0x08]
321         movw %cs, (%eax)
322
323 // CHECK: movl  %eax, %cs
324 // CHECK:  encoding: [0x8e,0xc8]
325         movl %eax, %cs
326
327 // CHECK: movl  (%eax), %cs
328 // CHECK:  encoding: [0x8e,0x08]
329         movl (%eax), %cs
330
331 // CHECK: movw  (%eax), %cs
332 // CHECK:  encoding: [0x66,0x8e,0x08]
333         movw (%eax), %cs
334
335 // radr://8033374
336 // CHECK: movl  %cr0, %eax
337 // CHECK:  encoding: [0x0f,0x20,0xc0]
338         movl %cr0,%eax
339
340 // CHECK: movl  %cr1, %eax
341 // CHECK:  encoding: [0x0f,0x20,0xc8]
342         movl %cr1,%eax
343
344 // CHECK: movl  %cr2, %eax
345 // CHECK:  encoding: [0x0f,0x20,0xd0]
346         movl %cr2,%eax
347
348 // CHECK: movl  %cr3, %eax
349 // CHECK:  encoding: [0x0f,0x20,0xd8]
350         movl %cr3,%eax
351
352 // CHECK: movl  %cr4, %eax
353 // CHECK:  encoding: [0x0f,0x20,0xe0]
354         movl %cr4,%eax
355
356 // CHECK: movl  %dr0, %eax
357 // CHECK:  encoding: [0x0f,0x21,0xc0]
358         movl %dr0,%eax
359
360 // CHECK: movl  %dr1, %eax
361 // CHECK:  encoding: [0x0f,0x21,0xc8]
362         movl %dr1,%eax
363
364 // CHECK: movl  %dr1, %eax
365 // CHECK:  encoding: [0x0f,0x21,0xc8]
366         movl %dr1,%eax
367
368 // CHECK: movl  %dr2, %eax
369 // CHECK:  encoding: [0x0f,0x21,0xd0]
370         movl %dr2,%eax
371
372 // CHECK: movl  %dr3, %eax
373 // CHECK:  encoding: [0x0f,0x21,0xd8]
374         movl %dr3,%eax
375
376 // CHECK: movl  %dr4, %eax
377 // CHECK:  encoding: [0x0f,0x21,0xe0]
378         movl %dr4,%eax
379
380 // CHECK: movl  %dr5, %eax
381 // CHECK:  encoding: [0x0f,0x21,0xe8]
382         movl %dr5,%eax
383
384 // CHECK: movl  %dr6, %eax
385 // CHECK:  encoding: [0x0f,0x21,0xf0]
386         movl %dr6,%eax
387
388 // CHECK: movl  %dr7, %eax
389 // CHECK:  encoding: [0x0f,0x21,0xf8]
390         movl %dr7,%eax
391
392 // radr://8017522
393 // CHECK: wait
394 // CHECK:  encoding: [0x9b]
395         fwait
396
397 // rdar://7873482
398 // CHECK: [0x65,0x8b,0x05,0x7c,0x00,0x00,0x00]
399 // FIXME: This is a correct bug poor encoding: Use 65 a1 7c 00 00 00 
400         movl    %gs:124, %eax
401
402 // CHECK: pusha
403 // CHECK:  encoding: [0x60]
404                 pusha
405
406 // CHECK: popa
407 // CHECK:  encoding: [0x61]
408                 popa
409
410 // CHECK: pushal
411 // CHECK:  encoding: [0x60]
412                 pushal
413
414 // CHECK: popal
415 // CHECK:  encoding: [0x61]
416                 popal
417
418 // CHECK: jmpl *8(%eax)
419 // CHECK:   encoding: [0xff,0x60,0x08]
420         jmp     *8(%eax)
421
422 // PR7465
423 // CHECK: lcalll $2, $4660
424 // CHECK:   encoding: [0x9a,0x34,0x12,0x00,0x00,0x02,0x00]
425 lcalll $0x2, $0x1234
426
427
428 // rdar://8061602
429 L1:
430   jcxz L1
431 // CHECK: jcxz L1
432 // CHECK:   encoding: [0x67,0xe3,A]
433   jecxz L1
434 // CHECK: jecxz L1
435 // CHECK:   encoding: [0xe3,A]
436
437 // rdar://8403974
438 iret
439 // CHECK: iretl
440 // CHECK: encoding: [0xcf]
441 iretw
442 // CHECK: iretw
443 // CHECK: encoding: [0x66,0xcf]
444 iretl
445 // CHECK: iretl
446 // CHECK: encoding: [0xcf]
447
448 // rdar://8403907
449 sysret
450 // CHECK: sysretl
451 // CHECK: encoding: [0x0f,0x07]
452 sysretl
453 // CHECK: sysretl
454 // CHECK: encoding: [0x0f,0x07]
455
456 // rdar://8018260
457 testl   %ecx, -24(%ebp)
458 // CHECK: testl -24(%ebp), %ecx
459 testl   -24(%ebp), %ecx
460 // CHECK: testl -24(%ebp), %ecx
461