4731a0857de1301c81638a6dd5c90ef16e7cb11a
[oota-llvm.git] / test / MC / AsmParser / X86 / x86_instructions.s
1 // RUN: llvm-mc -triple x86_64-unknown-unknown -show-encoding %s > %t 2> %t.err
2 // RUN: FileCheck < %t %s
3 // RUN: FileCheck --check-prefix=CHECK-STDERR < %t.err %s
4
5 // CHECK: subb %al, %al
6         subb %al, %al
7
8 // CHECK: addl $24, %eax
9         addl $24, %eax
10
11 // CHECK: movl %eax, 10(%ebp)
12         movl %eax, 10(%ebp)
13 // CHECK: movl %eax, 10(%ebp,%ebx)
14         movl %eax, 10(%ebp, %ebx)
15 // CHECK: movl %eax, 10(%ebp,%ebx,4)
16         movl %eax, 10(%ebp, %ebx, 4)
17 // CHECK: movl %eax, 10(,%ebx,4)
18         movl %eax, 10(, %ebx, 4)
19
20 // CHECK: movl 0, %eax        
21         movl 0, %eax
22 // CHECK: movl $0, %eax        
23         movl $0, %eax
24         
25 // CHECK: ret
26         ret
27         
28 // FIXME: Check that this matches SUB32ri8
29 // CHECK: subl $1, %eax
30         subl $1, %eax
31         
32 // FIXME: Check that this matches SUB32ri8
33 // CHECK: subl $-1, %eax
34         subl $-1, %eax
35         
36 // FIXME: Check that this matches SUB32ri
37 // CHECK: subl $256, %eax
38         subl $256, %eax
39
40 // FIXME: Check that this matches XOR64ri8
41 // CHECK: xorq $1, %rax
42         xorq $1, %rax
43         
44 // FIXME: Check that this matches XOR64ri32
45 // CHECK: xorq $256, %rax
46         xorq $256, %rax
47
48 // FIXME: Check that this matches SUB8rr
49 // CHECK: subb %al, %bl
50         subb %al, %bl
51
52 // FIXME: Check that this matches SUB16rr
53 // CHECK: subw %ax, %bx
54         subw %ax, %bx
55         
56 // FIXME: Check that this matches SUB32rr
57 // CHECK: subl %eax, %ebx
58         subl %eax, %ebx
59         
60 // FIXME: Check that this matches the correct instruction.
61 // CHECK: callq *%rax
62         call *%rax
63
64 // FIXME: Check that this matches the correct instruction.
65 // CHECK: shldl %cl, %eax, %ebx
66         shldl %cl, %eax, %ebx
67
68 // CHECK: shll $2, %eax
69         shll $2, %eax
70
71 // CHECK: shll $2, %eax
72         sall $2, %eax
73
74 // CHECK: rep
75 // CHECK: insb
76         rep;insb
77
78 // CHECK: rep
79 // CHECK: outsb
80         rep;outsb
81
82 // CHECK: rep
83 // CHECK: movsb
84         rep;movsb
85
86
87 // rdar://8470918
88 smovb // CHECK: movsb
89 smovw // CHECK: movsw
90 smovl // CHECK: movsl
91 smovq // CHECK: movsq
92
93 // rdar://8456361
94 // CHECK: rep
95 // CHECK: movsl
96         rep movsd
97
98 // CHECK: rep
99 // CHECK: lodsb
100         rep;lodsb
101
102 // CHECK: rep
103 // CHECK: stosb
104         rep;stosb
105
106 // NOTE: repz and repe have the same opcode as rep
107 // CHECK: rep
108 // CHECK: cmpsb
109         repz;cmpsb
110
111 // NOTE: repnz has the same opcode as repne
112 // CHECK: repne
113 // CHECK: cmpsb
114         repnz;cmpsb
115
116 // NOTE: repe and repz have the same opcode as rep
117 // CHECK: rep
118 // CHECK: scasb
119         repe;scasb
120
121 // CHECK: repne
122 // CHECK: scasb
123         repne;scasb
124
125 // CHECK: lock
126 // CHECK: cmpxchgb %al, (%ebx)
127         lock;cmpxchgb %al, 0(%ebx)
128
129 // CHECK: cs
130 // CHECK: movb (%eax), %al
131         cs;movb 0(%eax), %al
132
133 // CHECK: ss
134 // CHECK: movb (%eax), %al
135         ss;movb 0(%eax), %al
136
137 // CHECK: ds
138 // CHECK: movb (%eax), %al
139         ds;movb 0(%eax), %al
140
141 // CHECK: es
142 // CHECK: movb (%eax), %al
143         es;movb 0(%eax), %al
144
145 // CHECK: fs
146 // CHECK: movb (%eax), %al
147         fs;movb 0(%eax), %al
148
149 // CHECK: gs
150 // CHECK: movb (%eax), %al
151         gs;movb 0(%eax), %al
152
153 // CHECK: fadd %st(0)
154 // CHECK: fadd %st(1)
155 // CHECK: fadd %st(7)
156
157 fadd %st(0)
158 fadd %st(1)
159 fadd %st(7)
160
161 // CHECK: leal 0, %eax
162         leal 0, %eax
163
164 // rdar://7986634 - Insensitivity on opcodes.
165 // CHECK: int3
166 INT3
167
168
169 // Allow scale factor without index register.
170 // CHECK: movaps        %xmm3, (%esi)
171 // CHECK-STDERR: warning: scale factor without index register is ignored
172 movaps %xmm3, (%esi, 2)
173
174 // CHECK: imull $12, %eax, %eax
175 imul $12, %eax
176
177 // CHECK: imull %ecx, %eax
178 imull %ecx, %eax
179
180
181 // rdar://8208481
182 // CHECK: outb  %al, $161
183 outb    %al, $161
184 // CHECK: outw  %ax, $128
185 outw    %ax, $128
186 // CHECK: inb   $161, %al
187 inb     $161, %al
188
189 // rdar://8017621
190 // CHECK: pushq $1
191 push $1
192
193 // rdar://8017530
194 // CHECK: sldtw 4
195 sldt    4
196
197 // rdar://8208499
198 // CHECK: cmovnew       %bx, %ax
199 cmovnz %bx, %ax
200 // CHECK: cmovneq       %rbx, %rax
201 cmovnzq %rbx, %rax
202
203
204 // rdar://8407928
205 // CHECK: inb   $127, %al
206 // CHECK: inw   %dx, %ax
207 // CHECK: outb  %al, $127
208 // CHECK: outw  %ax, %dx
209 // CHECK: inl   %dx, %eax
210 inb     $0x7f
211 inw     %dx
212 outb    $0x7f
213 outw    %dx
214 inl     %dx
215
216
217 // PR8114
218 // CHECK: outb  %al, %dx
219 // CHECK: outw  %ax, %dx
220 // CHECK: outl  %eax, %dx
221
222 out %al, (%dx)
223 out %ax, (%dx)
224 outl %eax, (%dx)
225
226
227 // rdar://8431422
228
229 // CHECK: fxch  %st(1)
230 // CHECK: fucom %st(1)
231 // CHECK: fucomp        %st(1)
232 // CHECK: faddp %st(1)
233 // CHECK: faddp %st(0)
234 // CHECK: fsubp %st(1)
235 // CHECK: fsubrp        %st(1)
236 // CHECK: fmulp %st(1)
237 // CHECK: fdivp %st(1)
238 // CHECK: fdivrp        %st(1)
239
240 fxch
241 fucom
242 fucomp
243 faddp
244 faddp %st
245 fsubp
246 fsubrp
247 fmulp
248 fdivp
249 fdivrp
250
251 // CHECK: fcomi %st(1), %st(0)
252 // CHECK: fcomi %st(2), %st(0)
253 // CHECK: fucomi        %st(1), %st(0)
254 // CHECK: fucomi        %st(2), %st(0)
255 // CHECK: fucomi        %st(2), %st(0)
256
257 fcomi
258 fcomi   %st(2)
259 fucomi
260 fucomi  %st(2)
261 fucomi  %st(2), %st
262
263 // CHECK: fnstsw %ax
264 // CHECK: fnstsw %ax
265 // CHECK: fnstsw %ax
266 // CHECK: fnstsw %ax
267
268 fnstsw
269 fnstsw %ax
270 fnstsw %eax
271 fnstsw %al
272
273 // rdar://8431880
274 // CHECK: rclb  $1, %bl
275 // CHECK: rcll  $1, 3735928559(%ebx,%ecx,8)
276 // CHECK: rcrl  $1, %ecx
277 // CHECK: rcrl  $1, 305419896
278
279 rcl     %bl
280 rcll    0xdeadbeef(%ebx,%ecx,8)
281 rcr     %ecx
282 rcrl    0x12345678
283
284 // rdar://8418316
285 // CHECK: shldw $1, %bx, %bx
286 // CHECK: shldw $1, %bx, %bx
287 // CHECK: shrdw $1, %bx, %bx
288 // CHECK: shrdw $1, %bx, %bx
289
290 shld    %bx,%bx
291 shld    $1, %bx,%bx
292 shrd    %bx,%bx
293 shrd    $1, %bx,%bx
294
295 // CHECK: sldtl %ecx
296 // CHECK: encoding: [0x0f,0x00,0xc1]
297 // CHECK: sldtw %cx
298 // CHECK: encoding: [0x66,0x0f,0x00,0xc1]
299
300 sldt    %ecx
301 sldt    %cx
302
303 // CHECK: lcalll        *3135175374 
304 // CHECK: ljmpl *3135175374
305 lcall   *0xbadeface
306 ljmp    *0xbadeface
307
308
309 // rdar://8444631
310 // CHECK: enter $31438, $0
311 // CHECK: encoding: [0xc8,0xce,0x7a,0x00]
312 // CHECK: enter $31438, $1
313 // CHECK: encoding: [0xc8,0xce,0x7a,0x01]
314 // CHECK: enter $31438, $127
315 // CHECK: encoding: [0xc8,0xce,0x7a,0x7f]
316 enter $0x7ace,$0
317 enter $0x7ace,$1
318 enter $0x7ace,$0x7f
319
320
321 // rdar://8456389
322 // CHECK: fstps (%eax)
323 // CHECK: encoding: [0x67,0xd9,0x18]
324 fstp    (%eax)
325
326 // rdar://8456364
327 // CHECK: movw  %cs, %ax
328 mov %CS, %ax
329
330 // rdar://8456391
331 fcmovb %st(1), %st(0)   // CHECK: fcmovb        %st(1), %st(0)
332 fcmove %st(1), %st(0)   // CHECK: fcmove        %st(1), %st(0)
333 fcmovbe %st(1), %st(0)  // CHECK: fcmovbe       %st(1), %st(0)
334 fcmovu %st(1), %st(0)   // CHECK: fcmovu         %st(1), %st(0)
335
336 fcmovnb %st(1), %st(0)  // CHECK: fcmovnb       %st(1), %st(0)
337 fcmovne %st(1), %st(0)  // CHECK: fcmovne       %st(1), %st(0)
338 fcmovnbe %st(1), %st(0) // CHECK: fcmovnbe      %st(1), %st(0)
339 fcmovnu %st(1), %st(0)  // CHECK: fcmovnu       %st(1), %st(0)
340
341 fcmovnae %st(1), %st(0) // CHECK: fcmovb        %st(1), %st(0)
342 fcmovna %st(1), %st(0)  // CHECK: fcmovbe       %st(1), %st(0)
343
344 fcmovae %st(1), %st(0)  // CHECK: fcmovnb       %st(1), %st(0)
345 fcmova %st(1), %st(0)   // CHECK: fcmovnbe      %st(1), %st(0)
346
347 // rdar://8456417
348 .byte 88 + 1 & 15  // CHECK: .byte      9
349
350 // rdar://8456412
351 mov %rdx, %cr0
352 // CHECK: movq  %rdx, %cr0
353 // CHECK: encoding: [0x0f,0x22,0xc2]
354 mov %rdx, %cr4
355 // CHECK: movq  %rdx, %cr4
356 // CHECK: encoding: [0x0f,0x22,0xe2]
357 mov %rdx, %cr8
358 // CHECK: movq  %rdx, %cr8
359 // CHECK: encoding: [0x44,0x0f,0x22,0xc2]
360 mov %rdx, %cr15
361 // CHECK: movq  %rdx, %cr15
362 // CHECK: encoding: [0x44,0x0f,0x22,0xfa]
363
364 // rdar://8456371 - Handle commutable instructions written backward.
365 // CHECK:       faddp   %st(1)
366 // CHECK:       fmulp   %st(2)
367 faddp %st, %st(1)
368 fmulp %st, %st(2)
369
370 // rdar://8468087 - Encode these accurately, they are not synonyms.
371 // CHECK: fmul  %st(0), %st(1)
372 // CHECK: encoding: [0xdc,0xc9]
373 // CHECK: fmul  %st(1)
374 // CHECK: encoding: [0xd8,0xc9]
375 fmul %st, %st(1)
376 fmul %st(1), %st
377
378 // CHECK: fadd  %st(0), %st(1)
379 // CHECK: encoding: [0xdc,0xc1]
380 // CHECK: fadd  %st(1)
381 // CHECK: encoding: [0xd8,0xc1]
382 fadd %st, %st(1)
383 fadd %st(1), %st
384
385
386 // rdar://8416805
387 // CHECK: xorb  %al, %al
388 // CHECK: encoding: [0x30,0xc0]
389 // CHECK: xorw  %di, %di
390 // CHECK: encoding: [0x66,0x31,0xff]
391 // CHECK: xorl  %esi, %esi
392 // CHECK: encoding: [0x31,0xf6]
393 // CHECK: xorq  %rsi, %rsi
394 // CHECK: encoding: [0x48,0x31,0xf6]
395 clrb    %al
396 clr    %di
397 clr    %esi
398 clr    %rsi
399
400 // rdar://8456378
401 cltq  // CHECK: cltq
402 cdqe  // CHECK: cltq
403 cwde  // CHECK: cwtl
404 cwtl  // CHECK: cwtl
405
406 // rdar://8416805
407 cbw   // CHECK: cbtw
408 cwd   // CHECK: cwtd
409 cdq   // CHECK: cltd
410
411 // rdar://8456378 and PR7557 - fstsw
412 fstsw %ax
413 // CHECK: wait
414 // CHECK: fnstsw %ax
415 fstsw (%rax)
416 // CHECK: wait
417 // CHECK: fnstsw (%rax)
418
419 // PR8259
420 fstcw (%rsp)
421 // CHECK: wait
422 // CHECK: fnstcw (%rsp)
423
424 // PR8259
425 fstcw (%rsp)
426 // CHECK: wait
427 // CHECK: fnstcw (%rsp)
428
429 // PR8258
430 finit
431 // CHECK: wait
432 // CHECK: fninit
433
434
435 // rdar://8456382 - cvtsd2si support.
436 cvtsd2si        %xmm1, %rax
437 // CHECK: cvtsd2siq     %xmm1, %rax
438 // CHECK: encoding: [0xf2,0x48,0x0f,0x2d,0xc1]
439 cvtsd2si        %xmm1, %eax
440 // CHECK: cvtsd2sil     %xmm1, %eax
441 // CHECK: encoding: [0xf2,0x0f,0x2d,0xc1]
442
443 cvtsd2siq %xmm0, %rax // CHECK: cvtsd2siq       %xmm0, %rax
444 cvtsd2sil %xmm0, %eax // CHECK: cvtsd2sil       %xmm0, %eax
445 cvtsd2si %xmm0, %rax  // CHECK: cvtsd2siq       %xmm0, %rax
446
447
448 cvttpd2dq %xmm1, %xmm0  // CHECK: cvttpd2dq %xmm1, %xmm0
449 cvttpd2dq (%rax), %xmm0 // CHECK: cvttpd2dq (%rax), %xmm0
450
451 cvttps2dq %xmm1, %xmm0  // CHECK: cvttps2dq %xmm1, %xmm0
452 cvttps2dq (%rax), %xmm0 // CHECK: cvttps2dq (%rax), %xmm0
453
454 // rdar://8456376 - llvm-mc rejects 'roundss'
455 roundss $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x0a,0xc0,0x0e]
456 roundps $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x08,0xc0,0x0e]
457 roundsd $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x0b,0xc0,0x0e]
458 roundpd $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x09,0xc0,0x0e]
459
460
461 // rdar://8482675 - 32-bit mem operand support in 64-bit mode (0x67 prefix)
462 leal    8(%eax), %esi
463 // CHECK: leal  8(%eax), %esi
464 // CHECK: encoding: [0x67,0x8d,0x70,0x08]
465 leaq    8(%eax), %rsi
466 // CHECK: leaq  8(%eax), %rsi
467 // CHECK: encoding: [0x67,0x48,0x8d,0x70,0x08]
468 leaq    8(%rax), %rsi
469 // CHECK: leaq  8(%rax), %rsi
470 // CHECK: encoding: [0x48,0x8d,0x70,0x08]
471
472
473 cvttpd2dq       0xdeadbeef(%ebx,%ecx,8),%xmm5
474 // CHECK: cvttpd2dq     3735928559(%ebx,%ecx,8), %xmm5
475 // CHECK: encoding: [0x67,0x66,0x0f,0xe6,0xac,0xcb,0xef,0xbe,0xad,0xde]
476
477 // rdar://8490728 - llvm-mc rejects 'movmskpd'
478 movmskpd        %xmm6, %rax
479 // CHECK: movmskpd      %xmm6, %rax
480 // CHECK: encoding: [0x66,0x48,0x0f,0x50,0xc6]
481 movmskpd        %xmm6, %eax
482 // CHECK: movmskpd      %xmm6, %eax
483 // CHECK: encoding: [0x66,0x0f,0x50,0xc6]
484
485 // rdar://8491845 - Gas supports commuted forms of non-commutable instructions.
486 fdivrp %st(0), %st(1) // CHECK: encoding: [0xde,0xf9]
487 fdivrp %st(1), %st(0) // CHECK: encoding: [0xde,0xf9]
488
489 fsubrp %ST(0), %ST(1) // CHECK: encoding: [0xde,0xe9]
490 fsubrp %ST(1), %ST(0) // CHECK: encoding: [0xde,0xe9]
491
492