add a missed cmov alias, part of rdar://8416805
[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: cmovbw %bx, %bx
111 cmovnae %bx,%bx
112
113
114 // CHECK: cmovbel       %eax, %edx
115 // CHECK:  encoding: [0x0f,0x46,0xd0]
116                 cmovbel %eax,%edx
117
118 // CHECK: cmovbl        %eax, %edx
119 // CHECK:  encoding: [0x0f,0x42,0xd0]
120                 cmovcl  %eax,%edx
121
122 // CHECK: cmovel        %eax, %edx
123 // CHECK:  encoding: [0x0f,0x44,0xd0]
124                 cmovel  %eax,%edx
125
126 // CHECK: cmovgl        %eax, %edx
127 // CHECK:  encoding: [0x0f,0x4f,0xd0]
128                 cmovgl  %eax,%edx
129
130 // CHECK: cmovgel       %eax, %edx
131 // CHECK:  encoding: [0x0f,0x4d,0xd0]
132                 cmovgel %eax,%edx
133
134 // CHECK: cmovll        %eax, %edx
135 // CHECK:  encoding: [0x0f,0x4c,0xd0]
136                 cmovll  %eax,%edx
137
138 // CHECK: cmovlel       %eax, %edx
139 // CHECK:  encoding: [0x0f,0x4e,0xd0]
140                 cmovlel %eax,%edx
141
142 // CHECK: cmovbel       %eax, %edx
143 // CHECK:  encoding: [0x0f,0x46,0xd0]
144                 cmovnal %eax,%edx
145
146 // CHECK: cmovnel       %eax, %edx
147 // CHECK:  encoding: [0x0f,0x45,0xd0]
148                 cmovnel %eax,%edx
149
150 // CHECK: cmovael       %eax, %edx
151 // CHECK:  encoding: [0x0f,0x43,0xd0]
152                 cmovnbl %eax,%edx
153
154 // CHECK: cmoval        %eax, %edx
155 // CHECK:  encoding: [0x0f,0x47,0xd0]
156                 cmovnbel        %eax,%edx
157
158 // CHECK: cmovael       %eax, %edx
159 // CHECK:  encoding: [0x0f,0x43,0xd0]
160                 cmovncl %eax,%edx
161
162 // CHECK: cmovnel       %eax, %edx
163 // CHECK:  encoding: [0x0f,0x45,0xd0]
164                 cmovnel %eax,%edx
165
166 // CHECK: cmovlel       %eax, %edx
167 // CHECK:  encoding: [0x0f,0x4e,0xd0]
168                 cmovngl %eax,%edx
169
170 // CHECK: cmovgel       %eax, %edx
171 // CHECK:  encoding: [0x0f,0x4d,0xd0]
172                 cmovnl  %eax,%edx
173
174 // CHECK: cmovnel       %eax, %edx
175 // CHECK:  encoding: [0x0f,0x45,0xd0]
176                 cmovnel %eax,%edx
177
178 // CHECK: cmovlel       %eax, %edx
179 // CHECK:  encoding: [0x0f,0x4e,0xd0]
180                 cmovngl %eax,%edx
181
182 // CHECK: cmovll        %eax, %edx
183 // CHECK:  encoding: [0x0f,0x4c,0xd0]
184                 cmovngel        %eax,%edx
185
186 // CHECK: cmovgel       %eax, %edx
187 // CHECK:  encoding: [0x0f,0x4d,0xd0]
188                 cmovnll %eax,%edx
189
190 // CHECK: cmovgl        %eax, %edx
191 // CHECK:  encoding: [0x0f,0x4f,0xd0]
192                 cmovnlel        %eax,%edx
193
194 // CHECK: cmovnol       %eax, %edx
195 // CHECK:  encoding: [0x0f,0x41,0xd0]
196                 cmovnol %eax,%edx
197
198 // CHECK: cmovnpl       %eax, %edx
199 // CHECK:  encoding: [0x0f,0x4b,0xd0]
200                 cmovnpl %eax,%edx
201
202 // CHECK: cmovnsl       %eax, %edx
203 // CHECK:  encoding: [0x0f,0x49,0xd0]
204                 cmovnsl %eax,%edx
205
206 // CHECK: cmovnel       %eax, %edx
207 // CHECK:  encoding: [0x0f,0x45,0xd0]
208                 cmovnzl %eax,%edx
209
210 // CHECK: cmovol        %eax, %edx
211 // CHECK:  encoding: [0x0f,0x40,0xd0]
212                 cmovol  %eax,%edx
213
214 // CHECK: cmovpl        %eax, %edx
215 // CHECK:  encoding: [0x0f,0x4a,0xd0]
216                 cmovpl  %eax,%edx
217
218 // CHECK: cmovsl        %eax, %edx
219 // CHECK:  encoding: [0x0f,0x48,0xd0]
220                 cmovsl  %eax,%edx
221
222 // CHECK: cmovel        %eax, %edx
223 // CHECK:  encoding: [0x0f,0x44,0xd0]
224                 cmovzl  %eax,%edx
225
226 // CHECK: cmpps $0, %xmm0, %xmm1
227 // CHECK: encoding: [0x0f,0xc2,0xc8,0x00]
228         cmpps $0, %xmm0, %xmm1
229 // CHECK:       cmpps   $0, (%eax), %xmm1
230 // CHECK: encoding: [0x0f,0xc2,0x08,0x00]
231         cmpps $0, 0(%eax), %xmm1
232 // CHECK:       cmppd   $0, %xmm0, %xmm1
233 // CHECK: encoding: [0x66,0x0f,0xc2,0xc8,0x00]
234         cmppd $0, %xmm0, %xmm1
235 // CHECK:       cmppd   $0, (%eax), %xmm1
236 // CHECK: encoding: [0x66,0x0f,0xc2,0x08,0x00]
237         cmppd $0, 0(%eax), %xmm1
238 // CHECK:       cmpss   $0, %xmm0, %xmm1
239 // CHECK: encoding: [0xf3,0x0f,0xc2,0xc8,0x00]
240         cmpss $0, %xmm0, %xmm1
241 // CHECK:       cmpss   $0, (%eax), %xmm1
242 // CHECK: encoding: [0xf3,0x0f,0xc2,0x08,0x00]
243         cmpss $0, 0(%eax), %xmm1
244 // CHECK:       cmpsd   $0, %xmm0, %xmm1
245 // CHECK: encoding: [0xf2,0x0f,0xc2,0xc8,0x00]
246         cmpsd $0, %xmm0, %xmm1
247 // CHECK:       cmpsd   $0, (%eax), %xmm1
248 // CHECK: encoding: [0xf2,0x0f,0xc2,0x08,0x00]
249         cmpsd $0, 0(%eax), %xmm1
250
251 // Check matching of instructions which embed the SSE comparison code.
252
253 // CHECK: cmpps $0, %xmm0, %xmm1
254 // CHECK: encoding: [0x0f,0xc2,0xc8,0x00]
255         cmpeqps %xmm0, %xmm1
256
257 // CHECK: cmppd $1, %xmm0, %xmm1
258 // CHECK: encoding: [0x66,0x0f,0xc2,0xc8,0x01]
259         cmpltpd %xmm0, %xmm1
260
261 // CHECK: cmpss $2, %xmm0, %xmm1
262 // CHECK: encoding: [0xf3,0x0f,0xc2,0xc8,0x02]
263         cmpless %xmm0, %xmm1
264
265 // CHECK: cmppd $3, %xmm0, %xmm1
266 // CHECK: encoding: [0x66,0x0f,0xc2,0xc8,0x03]
267         cmpunordpd %xmm0, %xmm1
268
269 // CHECK: cmpps $4, %xmm0, %xmm1
270 // CHECK: encoding: [0x0f,0xc2,0xc8,0x04]
271         cmpneqps %xmm0, %xmm1
272
273 // CHECK: cmppd $5, %xmm0, %xmm1
274 // CHECK: encoding: [0x66,0x0f,0xc2,0xc8,0x05]
275         cmpnltpd %xmm0, %xmm1
276
277 // CHECK: cmpss $6, %xmm0, %xmm1
278 // CHECK: encoding: [0xf3,0x0f,0xc2,0xc8,0x06]
279         cmpnless %xmm0, %xmm1
280
281 // CHECK: cmpsd $7, %xmm0, %xmm1
282 // CHECK: encoding: [0xf2,0x0f,0xc2,0xc8,0x07]
283         cmpordsd %xmm0, %xmm1
284
285 // rdar://7995856
286 // CHECK: fmul  %st(0)
287 // CHECK:  encoding: [0xd8,0xc8]
288         fmul %st(0), %st
289
290 // CHECK: fadd  %st(0)
291 // CHECK:  encoding: [0xd8,0xc0]
292         fadd %st(0), %st
293
294 // CHECK: fsub  %st(0)
295 // CHECK:  encoding: [0xd8,0xe0]
296         fsub %st(0), %st
297
298 // CHECK: fsubr %st(0)
299 // CHECK:  encoding: [0xd8,0xe8]
300         fsubr %st(0), %st
301
302 // CHECK: fdivr %st(0)
303 // CHECK:  encoding: [0xd8,0xf8]
304         fdivr %st(0), %st
305
306 // CHECK: fdiv  %st(0)
307 // CHECK:  encoding: [0xd8,0xf0]
308         fdiv %st(0), %st
309
310 // radr://8017519
311 // CHECK: movl  %cs, %eax
312 // CHECK:  encoding: [0x8c,0xc8]
313         movl %cs, %eax
314
315 // CHECK: movw  %cs, %ax
316 // CHECK:  encoding: [0x66,0x8c,0xc8]
317         movw %cs, %ax
318
319 // CHECK: movl  %cs, (%eax)
320 // CHECK:  encoding: [0x8c,0x08]
321         movl %cs, (%eax)
322
323 // CHECK: movw  %cs, (%eax)
324 // CHECK:  encoding: [0x66,0x8c,0x08]
325         movw %cs, (%eax)
326
327 // CHECK: movl  %eax, %cs
328 // CHECK:  encoding: [0x8e,0xc8]
329         movl %eax, %cs
330
331 // CHECK: movl  (%eax), %cs
332 // CHECK:  encoding: [0x8e,0x08]
333         movl (%eax), %cs
334
335 // CHECK: movw  (%eax), %cs
336 // CHECK:  encoding: [0x66,0x8e,0x08]
337         movw (%eax), %cs
338
339 // radr://8033374
340 // CHECK: movl  %cr0, %eax
341 // CHECK:  encoding: [0x0f,0x20,0xc0]
342         movl %cr0,%eax
343
344 // CHECK: movl  %cr1, %eax
345 // CHECK:  encoding: [0x0f,0x20,0xc8]
346         movl %cr1,%eax
347
348 // CHECK: movl  %cr2, %eax
349 // CHECK:  encoding: [0x0f,0x20,0xd0]
350         movl %cr2,%eax
351
352 // CHECK: movl  %cr3, %eax
353 // CHECK:  encoding: [0x0f,0x20,0xd8]
354         movl %cr3,%eax
355
356 // CHECK: movl  %cr4, %eax
357 // CHECK:  encoding: [0x0f,0x20,0xe0]
358         movl %cr4,%eax
359
360 // CHECK: movl  %dr0, %eax
361 // CHECK:  encoding: [0x0f,0x21,0xc0]
362         movl %dr0,%eax
363
364 // CHECK: movl  %dr1, %eax
365 // CHECK:  encoding: [0x0f,0x21,0xc8]
366         movl %dr1,%eax
367
368 // CHECK: movl  %dr1, %eax
369 // CHECK:  encoding: [0x0f,0x21,0xc8]
370         movl %dr1,%eax
371
372 // CHECK: movl  %dr2, %eax
373 // CHECK:  encoding: [0x0f,0x21,0xd0]
374         movl %dr2,%eax
375
376 // CHECK: movl  %dr3, %eax
377 // CHECK:  encoding: [0x0f,0x21,0xd8]
378         movl %dr3,%eax
379
380 // CHECK: movl  %dr4, %eax
381 // CHECK:  encoding: [0x0f,0x21,0xe0]
382         movl %dr4,%eax
383
384 // CHECK: movl  %dr5, %eax
385 // CHECK:  encoding: [0x0f,0x21,0xe8]
386         movl %dr5,%eax
387
388 // CHECK: movl  %dr6, %eax
389 // CHECK:  encoding: [0x0f,0x21,0xf0]
390         movl %dr6,%eax
391
392 // CHECK: movl  %dr7, %eax
393 // CHECK:  encoding: [0x0f,0x21,0xf8]
394         movl %dr7,%eax
395
396 // radr://8017522
397 // CHECK: wait
398 // CHECK:  encoding: [0x9b]
399         fwait
400
401 // rdar://7873482
402 // CHECK: [0x65,0x8b,0x05,0x7c,0x00,0x00,0x00]
403 // FIXME: This is a correct bug poor encoding: Use 65 a1 7c 00 00 00 
404         movl    %gs:124, %eax
405
406 // CHECK: pusha
407 // CHECK:  encoding: [0x60]
408                 pusha
409
410 // CHECK: popa
411 // CHECK:  encoding: [0x61]
412                 popa
413
414 // CHECK: pushal
415 // CHECK:  encoding: [0x60]
416                 pushal
417
418 // CHECK: popal
419 // CHECK:  encoding: [0x61]
420                 popal
421
422 // CHECK: jmpl *8(%eax)
423 // CHECK:   encoding: [0xff,0x60,0x08]
424         jmp     *8(%eax)
425
426 // PR7465
427 // CHECK: lcalll $2, $4660
428 // CHECK:   encoding: [0x9a,0x34,0x12,0x00,0x00,0x02,0x00]
429 lcalll $0x2, $0x1234
430
431
432 // rdar://8061602
433 L1:
434   jcxz L1
435 // CHECK: jcxz L1
436 // CHECK:   encoding: [0x67,0xe3,A]
437   jecxz L1
438 // CHECK: jecxz L1
439 // CHECK:   encoding: [0xe3,A]
440
441 // rdar://8403974
442 iret
443 // CHECK: iretl
444 // CHECK: encoding: [0xcf]
445 iretw
446 // CHECK: iretw
447 // CHECK: encoding: [0x66,0xcf]
448 iretl
449 // CHECK: iretl
450 // CHECK: encoding: [0xcf]
451
452 // rdar://8403907
453 sysret
454 // CHECK: sysretl
455 // CHECK: encoding: [0x0f,0x07]
456 sysretl
457 // CHECK: sysretl
458 // CHECK: encoding: [0x0f,0x07]
459
460 // rdar://8018260
461 testl   %ecx, -24(%ebp)
462 // CHECK: testl -24(%ebp), %ecx
463 testl   -24(%ebp), %ecx
464 // CHECK: testl -24(%ebp), %ecx
465
466
467 // rdar://8407242
468 push %cs
469 // CHECK: pushl %cs
470 // CHECK: encoding: [0x0e]
471 push %ds
472 // CHECK: pushl %ds
473 // CHECK: encoding: [0x1e]
474 push %ss
475 // CHECK: pushl %ss
476 // CHECK: encoding: [0x16]
477 push %es
478 // CHECK: pushl %es
479 // CHECK: encoding: [0x06]
480 push %fs
481 // CHECK: pushl %fs
482 // CHECK: encoding: [0x0f,0xa0]
483 push %gs
484 // CHECK: pushl %gs
485 // CHECK: encoding: [0x0f,0xa8]
486
487 pushw %cs
488 // CHECK: pushw %cs
489 // CHECK: encoding: [0x66,0x0e]
490 pushw %ds
491 // CHECK: pushw %ds
492 // CHECK: encoding: [0x66,0x1e]
493 pushw %ss
494 // CHECK: pushw %ss
495 // CHECK: encoding: [0x66,0x16]
496 pushw %es
497 // CHECK: pushw %es
498 // CHECK: encoding: [0x66,0x06]
499 pushw %fs
500 // CHECK: pushw %fs
501 // CHECK: encoding: [0x66,0x0f,0xa0]
502 pushw %gs
503 // CHECK: pushw %gs
504 // CHECK: encoding: [0x66,0x0f,0xa8]
505
506 pop %ss
507 // CHECK: popl  %ss
508 // CHECK: encoding: [0x17]
509 pop %ds
510 // CHECK: popl  %ds
511 // CHECK: encoding: [0x1f]
512 pop %es
513 // CHECK: popl  %es
514 // CHECK: encoding: [0x07]
515
516 // rdar://8408129
517 pushfd
518 // CHECK: pushfl
519 popfd
520 // CHECK: popfl
521 pushfl
522 // CHECK: pushfl
523 popfl
524 // CHECK: popfl
525
526
527 // rdar://8416805
528         setc    %bl
529         setnae  %bl
530         setnb   %bl
531         setnc   %bl
532         setna   %bl
533         setnbe  %bl
534         setpe   %bl
535         setpo   %bl
536         setnge  %bl
537         setnl   %bl
538         setng   %bl
539         setnle  %bl