Fix the operand ordering on aliases for shld and shrd. PR12173, part 2.
[oota-llvm.git] / test / MC / X86 / x86-64.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         monitor
6 // CHECK: monitor
7 // CHECK: encoding: [0x0f,0x01,0xc8]
8         monitor %rax, %rcx, %rdx
9 // CHECK: monitor
10 // CHECK: encoding: [0x0f,0x01,0xc8]
11         mwait
12 // CHECK: mwait
13 // CHECK: encoding: [0x0f,0x01,0xc9]
14         mwait %rax, %rcx
15 // CHECK: mwait
16 // CHECK: encoding: [0x0f,0x01,0xc9]
17
18 // Suffix inference:
19
20 // CHECK: addl $0, %eax
21         add $0, %eax
22 // CHECK: addb $255, %al
23         add $0xFF, %al
24 // CHECK: orq %rax, %rdx
25         or %rax, %rdx
26 // CHECK: shlq $3, %rax
27         shl $3, %rax
28
29
30 // CHECK: subb %al, %al
31         subb %al, %al
32
33 // CHECK: addl $24, %eax
34         addl $24, %eax
35
36 // CHECK: movl %eax, 10(%ebp)
37         movl %eax, 10(%ebp)
38 // CHECK: movl %eax, 10(%ebp,%ebx)
39         movl %eax, 10(%ebp, %ebx)
40 // CHECK: movl %eax, 10(%ebp,%ebx,4)
41         movl %eax, 10(%ebp, %ebx, 4)
42 // CHECK: movl %eax, 10(,%ebx,4)
43         movl %eax, 10(, %ebx, 4)
44
45 // CHECK: movl 0, %eax        
46         movl 0, %eax
47 // CHECK: movl $0, %eax        
48         movl $0, %eax
49         
50 // CHECK: ret
51         ret
52         
53 // FIXME: Check that this matches SUB32ri8
54 // CHECK: subl $1, %eax
55         subl $1, %eax
56         
57 // FIXME: Check that this matches SUB32ri8
58 // CHECK: subl $-1, %eax
59         subl $-1, %eax
60         
61 // FIXME: Check that this matches SUB32ri
62 // CHECK: subl $256, %eax
63         subl $256, %eax
64
65 // FIXME: Check that this matches XOR64ri8
66 // CHECK: xorq $1, %rax
67         xorq $1, %rax
68         
69 // FIXME: Check that this matches XOR64ri32
70 // CHECK: xorq $256, %rax
71         xorq $256, %rax
72
73 // FIXME: Check that this matches SUB8rr
74 // CHECK: subb %al, %bl
75         subb %al, %bl
76
77 // FIXME: Check that this matches SUB16rr
78 // CHECK: subw %ax, %bx
79         subw %ax, %bx
80         
81 // FIXME: Check that this matches SUB32rr
82 // CHECK: subl %eax, %ebx
83         subl %eax, %ebx
84         
85 // FIXME: Check that this matches the correct instruction.
86 // CHECK: callq *%rax
87         call *%rax
88
89 // FIXME: Check that this matches the correct instruction.
90 // CHECK: shldl %cl, %eax, %ebx
91         shldl %cl, %eax, %ebx
92
93 // CHECK: shll $2, %eax
94         shll $2, %eax
95
96 // CHECK: shll $2, %eax
97         sall $2, %eax
98
99 // CHECK: rep
100 // CHECK: insb
101         rep;insb
102
103 // CHECK: rep
104 // CHECK: outsb
105         rep;outsb
106
107 // CHECK: rep
108 // CHECK: movsb
109         rep;movsb
110
111
112 // rdar://8470918
113 smovb // CHECK: movsb
114 smovw // CHECK: movsw
115 smovl // CHECK: movsd
116 smovq // CHECK: movsq
117
118 // rdar://8456361
119 // CHECK: rep
120 // CHECK: movsd
121         rep movsd
122
123 // CHECK: rep
124 // CHECK: lodsb
125         rep;lodsb
126
127 // CHECK: rep
128 // CHECK: stosb
129         rep;stosb
130
131 // NOTE: repz and repe have the same opcode as rep
132 // CHECK: rep
133 // CHECK: cmpsb
134         repz;cmpsb
135
136 // NOTE: repnz has the same opcode as repne
137 // CHECK: repne
138 // CHECK: cmpsb
139         repnz;cmpsb
140
141 // NOTE: repe and repz have the same opcode as rep
142 // CHECK: rep
143 // CHECK: scasb
144         repe;scasb
145
146 // CHECK: repne
147 // CHECK: scasb
148         repne;scasb
149
150 // CHECK: lock
151 // CHECK: cmpxchgb %al, (%ebx)
152         lock;cmpxchgb %al, 0(%ebx)
153
154 // CHECK: cs
155 // CHECK: movb (%eax), %al
156         cs;movb 0(%eax), %al
157
158 // CHECK: ss
159 // CHECK: movb (%eax), %al
160         ss;movb 0(%eax), %al
161
162 // CHECK: ds
163 // CHECK: movb (%eax), %al
164         ds;movb 0(%eax), %al
165
166 // CHECK: es
167 // CHECK: movb (%eax), %al
168         es;movb 0(%eax), %al
169
170 // CHECK: fs
171 // CHECK: movb (%eax), %al
172         fs;movb 0(%eax), %al
173
174 // CHECK: gs
175 // CHECK: movb (%eax), %al
176         gs;movb 0(%eax), %al
177
178 // CHECK: fadd %st(0)
179 // CHECK: fadd %st(1)
180 // CHECK: fadd %st(7)
181
182 fadd %st(0)
183 fadd %st(1)
184 fadd %st(7)
185
186 // CHECK: leal 0, %eax
187         leal 0, %eax
188
189 // rdar://7986634 - Insensitivity on opcodes.
190 // CHECK: int3
191 INT3
192
193 // rdar://8735979 - int $3 -> int3
194 // CHECK: int3
195 int     $3
196
197
198 // Allow scale factor without index register.
199 // CHECK: movaps        %xmm3, (%esi)
200 // CHECK-STDERR: warning: scale factor without index register is ignored
201 movaps %xmm3, (%esi, 2)
202
203 // CHECK: imull $12, %eax, %eax
204 imul $12, %eax
205
206 // CHECK: imull %ecx, %eax
207 imull %ecx, %eax
208
209
210 // rdar://8208481
211 // CHECK: outb  %al, $161
212 outb    %al, $161
213 // CHECK: outw  %ax, $128
214 outw    %ax, $128
215 // CHECK: inb   $161, %al
216 inb     $161, %al
217
218 // rdar://8017621
219 // CHECK: pushq $1
220 push $1
221
222 // rdar://9716860
223 pushq $1
224 // CHECK: encoding: [0x6a,0x01]
225 pushq $1111111
226 // CHECK: encoding: [0x68,0x47,0xf4,0x10,0x00]
227
228 // rdar://8017530
229 // CHECK: sldtw 4
230 sldt    4
231
232 // rdar://8208499
233 // CHECK: cmovnew       %bx, %ax
234 cmovnz %bx, %ax
235 // CHECK: cmovneq       %rbx, %rax
236 cmovnzq %rbx, %rax
237
238
239 // rdar://8407928
240 // CHECK: inb   $127, %al
241 // CHECK: inw   %dx
242 // CHECK: outb  %al, $127
243 // CHECK: outw  %dx
244 // CHECK: inl   %dx
245 inb     $0x7f
246 inw     %dx
247 outb    $0x7f
248 outw    %dx
249 inl     %dx
250
251
252 // PR8114
253 // CHECK: outb  %dx
254 // CHECK: outb  %dx
255 // CHECK: outw  %dx
256 // CHECK: outw  %dx
257 // CHECK: outl  %dx
258 // CHECK: outl  %dx
259
260 out     %al, (%dx)
261 outb    %al, (%dx)
262 out     %ax, (%dx)
263 outw    %ax, (%dx)
264 out     %eax, (%dx)
265 outl    %eax, (%dx)
266
267 // CHECK: inb   %dx
268 // CHECK: inb   %dx
269 // CHECK: inw   %dx
270 // CHECK: inw   %dx
271 // CHECK: inl   %dx
272 // CHECK: inl   %dx
273
274 in      (%dx), %al
275 inb     (%dx), %al
276 in      (%dx), %ax
277 inw     (%dx), %ax
278 in      (%dx), %eax
279 inl     (%dx), %eax
280
281 // rdar://8431422
282
283 // CHECK: fxch
284 // CHECK: fucom
285 // CHECK: fucomp
286 // CHECK: faddp
287 // CHECK: faddp %st(0)
288 // CHECK: fsubp
289 // CHECK: fsubrp
290 // CHECK: fmulp
291 // CHECK: fdivp
292 // CHECK: fdivrp
293
294 fxch
295 fucom
296 fucomp
297 faddp
298 faddp %st
299 fsubp
300 fsubrp
301 fmulp
302 fdivp
303 fdivrp
304
305 // CHECK: fcomi
306 // CHECK: fcomi %st(2)
307 // CHECK: fucomi
308 // CHECK: fucomi %st(2)
309 // CHECK: fucomi %st(2)
310
311 fcomi
312 fcomi   %st(2)
313 fucomi
314 fucomi  %st(2)
315 fucomi  %st(2), %st
316
317 // CHECK: fnstsw
318 // CHECK: fnstsw
319 // CHECK: fnstsw
320 // CHECK: fnstsw
321
322 fnstsw
323 fnstsw %ax
324 fnstsw %eax
325 fnstsw %al
326
327 // rdar://8431880
328 // CHECK: rclb  %bl
329 // CHECK: rcll  3735928559(%ebx,%ecx,8)
330 // CHECK: rcrl  %ecx
331 // CHECK: rcrl  305419896
332 rcl     %bl
333 rcll    0xdeadbeef(%ebx,%ecx,8)
334 rcr     %ecx
335 rcrl    0x12345678
336
337 rclb    %bl       // CHECK: rclb %bl     # encoding: [0xd0,0xd3]
338 rclb    $1, %bl   // CHECK: rclb %bl     # encoding: [0xd0,0xd3]
339 rclb    $2, %bl   // CHECK: rclb $2, %bl # encoding: [0xc0,0xd3,0x02]
340
341 // rdar://8418316
342 // PR12173
343 // CHECK: shldw %cl, %bx, %dx
344 // CHECK: shldw %cl, %bx, %dx
345 // CHECK: shldw $1, %bx, %dx
346 // CHECK: shldw %cl, %bx, (%rax)
347 // CHECK: shldw %cl, %bx, (%rax)
348 // CHECK: shrdw %cl, %bx, %dx
349 // CHECK: shrdw %cl, %bx, %dx
350 // CHECK: shrdw $1, %bx, %dx
351 // CHECK: shrdw %cl, %bx, (%rax)
352 // CHECK: shrdw %cl, %bx, (%rax)
353
354 shld  %bx, %dx
355 shld  %cl, %bx, %dx
356 shld  $1, %bx, %dx
357 shld  %bx, (%rax)
358 shld  %cl, %bx, (%rax)
359 shrd  %bx, %dx
360 shrd  %cl, %bx, %dx
361 shrd  $1, %bx, %dx
362 shrd  %bx, (%rax)
363 shrd  %cl, %bx, (%rax)
364
365 // CHECK: sldtl %ecx
366 // CHECK: encoding: [0x0f,0x00,0xc1]
367 // CHECK: sldtw %cx
368 // CHECK: encoding: [0x66,0x0f,0x00,0xc1]
369
370 sldt    %ecx
371 sldt    %cx
372
373 // CHECK: lcalll        *3135175374 
374 // CHECK: ljmpl *3135175374
375 lcall   *0xbadeface
376 ljmp    *0xbadeface
377
378
379 // rdar://8444631
380 // CHECK: enter $31438, $0
381 // CHECK: encoding: [0xc8,0xce,0x7a,0x00]
382 // CHECK: enter $31438, $1
383 // CHECK: encoding: [0xc8,0xce,0x7a,0x01]
384 // CHECK: enter $31438, $127
385 // CHECK: encoding: [0xc8,0xce,0x7a,0x7f]
386 enter $0x7ace,$0
387 enter $0x7ace,$1
388 enter $0x7ace,$0x7f
389
390
391 // rdar://8456364
392 // CHECK: movw  %cs, %ax
393 mov %CS, %ax
394
395 // rdar://8456391
396 fcmovb %st(1), %st(0)   // CHECK: fcmovb        %st(1), %st(0)
397 fcmove %st(1), %st(0)   // CHECK: fcmove        %st(1), %st(0)
398 fcmovbe %st(1), %st(0)  // CHECK: fcmovbe       %st(1), %st(0)
399 fcmovu %st(1), %st(0)   // CHECK: fcmovu         %st(1), %st(0)
400
401 fcmovnb %st(1), %st(0)  // CHECK: fcmovnb       %st(1), %st(0)
402 fcmovne %st(1), %st(0)  // CHECK: fcmovne       %st(1), %st(0)
403 fcmovnbe %st(1), %st(0) // CHECK: fcmovnbe      %st(1), %st(0)
404 fcmovnu %st(1), %st(0)  // CHECK: fcmovnu       %st(1), %st(0)
405
406 fcmovnae %st(1), %st(0) // CHECK: fcmovb        %st(1), %st(0)
407 fcmovna %st(1), %st(0)  // CHECK: fcmovbe       %st(1), %st(0)
408
409 fcmovae %st(1), %st(0)  // CHECK: fcmovnb       %st(1), %st(0)
410 fcmova %st(1), %st(0)   // CHECK: fcmovnbe      %st(1), %st(0)
411
412 // rdar://8456417
413 .byte 88 + 1 & 15  // CHECK: .byte      9
414
415 // rdar://8456412
416 mov %rdx, %cr0
417 // CHECK: movq  %rdx, %cr0
418 // CHECK: encoding: [0x0f,0x22,0xc2]
419 mov %rdx, %cr4
420 // CHECK: movq  %rdx, %cr4
421 // CHECK: encoding: [0x0f,0x22,0xe2]
422 mov %rdx, %cr8
423 // CHECK: movq  %rdx, %cr8
424 // CHECK: encoding: [0x44,0x0f,0x22,0xc2]
425 mov %rdx, %cr15
426 // CHECK: movq  %rdx, %cr15
427 // CHECK: encoding: [0x44,0x0f,0x22,0xfa]
428
429 // rdar://8456371 - Handle commutable instructions written backward.
430 // CHECK:       faddp   %st(1)
431 // CHECK:       fmulp   %st(2)
432 faddp %st, %st(1)
433 fmulp %st, %st(2)
434
435 // rdar://8468087 - Encode these accurately, they are not synonyms.
436 // CHECK: fmul  %st(0), %st(1)
437 // CHECK: encoding: [0xdc,0xc9]
438 // CHECK: fmul  %st(1)
439 // CHECK: encoding: [0xd8,0xc9]
440 fmul %st, %st(1)
441 fmul %st(1), %st
442
443 // CHECK: fadd  %st(0), %st(1)
444 // CHECK: encoding: [0xdc,0xc1]
445 // CHECK: fadd  %st(1)
446 // CHECK: encoding: [0xd8,0xc1]
447 fadd %st, %st(1)
448 fadd %st(1), %st
449
450
451 // rdar://8416805
452 // CHECK: xorb  %al, %al
453 // CHECK: encoding: [0x30,0xc0]
454 // CHECK: xorw  %di, %di
455 // CHECK: encoding: [0x66,0x31,0xff]
456 // CHECK: xorl  %esi, %esi
457 // CHECK: encoding: [0x31,0xf6]
458 // CHECK: xorq  %rsi, %rsi
459 // CHECK: encoding: [0x48,0x31,0xf6]
460 clrb    %al
461 clr    %di
462 clr    %esi
463 clr    %rsi
464
465 // rdar://8456378
466 cltq  // CHECK: cltq
467 cdqe  // CHECK: cltq
468 cwde  // CHECK: cwtl
469 cwtl  // CHECK: cwtl
470
471 // rdar://8416805
472 cbw   // CHECK: cbtw
473 cwd   // CHECK: cwtd
474 cdq   // CHECK: cltd
475 cqo   // CHECK: cqto
476
477 // rdar://8456378 and PR7557 - fstsw
478 fstsw %ax
479 // CHECK: wait
480 // CHECK: fnstsw
481 fstsw (%rax)
482 // CHECK: wait
483 // CHECK: fnstsw (%rax)
484
485 // PR8259
486 fstcw (%rsp)
487 // CHECK: wait
488 // CHECK: fnstcw (%rsp)
489
490 // PR8259
491 fstcw (%rsp)
492 // CHECK: wait
493 // CHECK: fnstcw (%rsp)
494
495 // PR8258
496 finit
497 // CHECK: wait
498 // CHECK: fninit
499
500 fsave   32493
501 // CHECK: wait
502 // CHECK: fnsave 32493
503
504
505 // rdar://8456382 - cvtsd2si support.
506 cvtsd2si        %xmm1, %rax
507 // CHECK: cvtsd2siq     %xmm1, %rax
508 // CHECK: encoding: [0xf2,0x48,0x0f,0x2d,0xc1]
509 cvtsd2si        %xmm1, %eax
510 // CHECK: cvtsd2sil     %xmm1, %eax
511 // CHECK: encoding: [0xf2,0x0f,0x2d,0xc1]
512
513 cvtsd2siq %xmm0, %rax // CHECK: cvtsd2siq       %xmm0, %rax
514 cvtsd2sil %xmm0, %eax // CHECK: cvtsd2sil       %xmm0, %eax
515 cvtsd2si %xmm0, %rax  // CHECK: cvtsd2siq       %xmm0, %rax
516
517
518 cvttpd2dq %xmm1, %xmm0  // CHECK: cvttpd2dq %xmm1, %xmm0
519 cvttpd2dq (%rax), %xmm0 // CHECK: cvttpd2dq (%rax), %xmm0
520
521 cvttps2dq %xmm1, %xmm0  // CHECK: cvttps2dq %xmm1, %xmm0
522 cvttps2dq (%rax), %xmm0 // CHECK: cvttps2dq (%rax), %xmm0
523
524 // rdar://8456376 - llvm-mc rejects 'roundss'
525 roundss $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x0a,0xc0,0x0e]
526 roundps $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x08,0xc0,0x0e]
527 roundsd $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x0b,0xc0,0x0e]
528 roundpd $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x09,0xc0,0x0e]
529
530
531 // rdar://8482675 - 32-bit mem operand support in 64-bit mode (0x67 prefix)
532 leal    8(%eax), %esi
533 // CHECK: leal  8(%eax), %esi
534 // CHECK: encoding: [0x67,0x8d,0x70,0x08]
535 leaq    8(%eax), %rsi
536 // CHECK: leaq  8(%eax), %rsi
537 // CHECK: encoding: [0x67,0x48,0x8d,0x70,0x08]
538 leaq    8(%rax), %rsi
539 // CHECK: leaq  8(%rax), %rsi
540 // CHECK: encoding: [0x48,0x8d,0x70,0x08]
541
542
543 cvttpd2dq       0xdeadbeef(%ebx,%ecx,8),%xmm5
544 // CHECK: cvttpd2dq     3735928559(%ebx,%ecx,8), %xmm5
545 // CHECK: encoding: [0x67,0x66,0x0f,0xe6,0xac,0xcb,0xef,0xbe,0xad,0xde]
546
547 // rdar://8490728 - llvm-mc rejects 'movmskpd'
548 movmskpd        %xmm6, %rax
549 // CHECK: movmskpd      %xmm6, %rax
550 // CHECK: encoding: [0x66,0x48,0x0f,0x50,0xc6]
551 movmskpd        %xmm6, %eax
552 // CHECK: movmskpd      %xmm6, %eax
553 // CHECK: encoding: [0x66,0x0f,0x50,0xc6]
554
555 // rdar://8491845 - Gas supports commuted forms of non-commutable instructions.
556 fdivrp %st(0), %st(1) // CHECK: encoding: [0xde,0xf9]
557 fdivrp %st(1), %st(0) // CHECK: encoding: [0xde,0xf9]
558
559 fsubrp %ST(0), %ST(1) // CHECK: encoding: [0xde,0xe9]
560 fsubrp %ST(1), %ST(0) // CHECK: encoding: [0xde,0xe9]
561
562 // also PR8861
563 fdivp %st(0), %st(1) // CHECK: encoding: [0xde,0xf1]
564 fdivp %st(1), %st(0) // CHECK: encoding: [0xde,0xf1]
565
566
567 movl    foo(%rip), %eax
568 // CHECK: movl  foo(%rip), %eax
569 // CHECK: encoding: [0x8b,0x05,A,A,A,A]
570 // CHECK: fixup A - offset: 2, value: foo-4, kind: reloc_riprel_4byte
571
572 movb    $12, foo(%rip)
573 // CHECK: movb  $12, foo(%rip)
574 // CHECK: encoding: [0xc6,0x05,A,A,A,A,0x0c]
575 // CHECK:    fixup A - offset: 2, value: foo-5, kind: reloc_riprel_4byte
576
577 movw    $12, foo(%rip)
578 // CHECK: movw  $12, foo(%rip)
579 // CHECK: encoding: [0x66,0xc7,0x05,A,A,A,A,0x0c,0x00]
580 // CHECK:    fixup A - offset: 3, value: foo-6, kind: reloc_riprel_4byte
581
582 movl    $12, foo(%rip)
583 // CHECK: movl  $12, foo(%rip)
584 // CHECK: encoding: [0xc7,0x05,A,A,A,A,0x0c,0x00,0x00,0x00]
585 // CHECK:    fixup A - offset: 2, value: foo-8, kind: reloc_riprel_4byte
586
587 movq    $12, foo(%rip)
588 // CHECK:  movq $12, foo(%rip)
589 // CHECK: encoding: [0x48,0xc7,0x05,A,A,A,A,0x0c,0x00,0x00,0x00]
590 // CHECK:    fixup A - offset: 3, value: foo-8, kind: reloc_riprel_4byte
591
592 // CHECK: addq  $-424, %rax
593 // CHECK: encoding: [0x48,0x05,0x58,0xfe,0xff,0xff]
594 addq $-424, %rax
595
596
597 // CHECK: movq  _foo@GOTPCREL(%rip), %rax
598 // CHECK:  encoding: [0x48,0x8b,0x05,A,A,A,A]
599 // CHECK:  fixup A - offset: 3, value: _foo@GOTPCREL-4, kind: reloc_riprel_4byte_movq_load
600 movq _foo@GOTPCREL(%rip), %rax
601
602 // CHECK: movq  _foo@GOTPCREL(%rip), %r14
603 // CHECK:  encoding: [0x4c,0x8b,0x35,A,A,A,A]
604 // CHECK:  fixup A - offset: 3, value: _foo@GOTPCREL-4, kind: reloc_riprel_4byte_movq_load
605 movq _foo@GOTPCREL(%rip), %r14
606
607
608 // CHECK: movq  (%r13,%rax,8), %r13
609 // CHECK:  encoding: [0x4d,0x8b,0x6c,0xc5,0x00]
610 movq 0x00(%r13,%rax,8),%r13
611
612 // CHECK: testq %rax, %rbx
613 // CHECK:  encoding: [0x48,0x85,0xd8]
614 testq %rax, %rbx
615
616 // CHECK: cmpq  %rbx, %r14
617 // CHECK:   encoding: [0x49,0x39,0xde]
618         cmpq %rbx, %r14
619
620 // rdar://7947167
621
622 movsq
623 // CHECK: movsq
624 // CHECK:   encoding: [0x48,0xa5]
625
626 movsl
627 // CHECK: movsd
628 // CHECK:   encoding: [0xa5]
629
630 stosq
631 // CHECK: stosq
632 // CHECK:   encoding: [0x48,0xab]
633 stosl
634 // CHECK: stosl
635 // CHECK:   encoding: [0xab]
636
637
638 // Not moffset forms of moves, they are x86-32 only! rdar://7947184
639 movb    0, %al    // CHECK: movb 0, %al # encoding: [0x8a,0x04,0x25,0x00,0x00,0x00,0x00]
640 movw    0, %ax    // CHECK: movw 0, %ax # encoding: [0x66,0x8b,0x04,0x25,0x00,0x00,0x00,0x00]
641 movl    0, %eax   // CHECK: movl 0, %eax # encoding: [0x8b,0x04,0x25,0x00,0x00,0x00,0x00]
642
643 // CHECK: pushfq        # encoding: [0x9c]
644         pushf
645 // CHECK: pushfq        # encoding: [0x9c]
646         pushfq
647 // CHECK: popfq         # encoding: [0x9d]
648         popf
649 // CHECK: popfq         # encoding: [0x9d]
650         popfq
651
652 // CHECK: movabsq $-281474976710654, %rax
653 // CHECK: encoding: [0x48,0xb8,0x02,0x00,0x00,0x00,0x00,0x00,0xff,0xff]
654         movabsq $0xFFFF000000000002, %rax
655
656 // CHECK: movabsq $-281474976710654, %rax
657 // CHECK: encoding: [0x48,0xb8,0x02,0x00,0x00,0x00,0x00,0x00,0xff,0xff]
658         movq $0xFFFF000000000002, %rax
659
660 // CHECK: movq $-65536, %rax
661 // CHECK: encoding: [0x48,0xc7,0xc0,0x00,0x00,0xff,0xff]
662         movq $0xFFFFFFFFFFFF0000, %rax
663
664 // CHECK: movq $-256, %rax
665 // CHECK: encoding: [0x48,0xc7,0xc0,0x00,0xff,0xff,0xff]
666         movq $0xFFFFFFFFFFFFFF00, %rax
667
668 // CHECK: movq $10, %rax
669 // CHECK: encoding: [0x48,0xc7,0xc0,0x0a,0x00,0x00,0x00]
670         movq $10, %rax
671
672 // rdar://8014869
673 //
674 // CHECK: ret
675 // CHECK:  encoding: [0xc3]
676         retq
677
678 // CHECK: sete %al
679 // CHECK: encoding: [0x0f,0x94,0xc0]
680         setz %al
681
682 // CHECK: setne %al
683 // CHECK: encoding: [0x0f,0x95,0xc0]
684         setnz %al
685
686 // CHECK: je 0
687 // CHECK: encoding: [0x74,A]
688         jz 0
689
690 // CHECK: jne
691 // CHECK: encoding: [0x75,A]
692         jnz 0
693
694 // PR9264
695 btl     $1, 0 // CHECK: btl $1, 0 # encoding: [0x0f,0xba,0x24,0x25,0x00,0x00,0x00,0x00,0x01]
696 bt      $1, 0 // CHECK: btl $1, 0 # encoding: [0x0f,0xba,0x24,0x25,0x00,0x00,0x00,0x00,0x01]
697
698 // rdar://8017515
699 btq $0x01,%rdx
700 // CHECK: btq   $1, %rdx
701 // CHECK:  encoding: [0x48,0x0f,0xba,0xe2,0x01]
702
703 //rdar://8017633
704 // CHECK: movzbl        %al, %esi
705 // CHECK:  encoding: [0x0f,0xb6,0xf0]
706         movzx %al, %esi
707
708 // CHECK: movzbq        %al, %rsi
709 // CHECK:  encoding: [0x48,0x0f,0xb6,0xf0]
710         movzx %al, %rsi
711
712 // CHECK: movsbw        %al, %ax
713 // CHECK: encoding: [0x66,0x0f,0xbe,0xc0]
714 movsx %al, %ax
715
716 // CHECK: movsbl        %al, %eax
717 // CHECK: encoding: [0x0f,0xbe,0xc0]
718 movsx %al, %eax
719
720 // CHECK: movswl        %ax, %eax
721 // CHECK: encoding: [0x0f,0xbf,0xc0]
722 movsx %ax, %eax
723
724 // CHECK: movsbq        %bl, %rax
725 // CHECK: encoding: [0x48,0x0f,0xbe,0xc3]
726 movsx %bl, %rax
727
728 // CHECK: movswq %cx, %rax
729 // CHECK: encoding: [0x48,0x0f,0xbf,0xc1]
730 movsx %cx, %rax
731
732 // CHECK: movslq        %edi, %rax
733 // CHECK: encoding: [0x48,0x63,0xc7]
734 movsx %edi, %rax
735
736 // CHECK: movzbw        %al, %ax
737 // CHECK: encoding: [0x66,0x0f,0xb6,0xc0]
738 movzx %al, %ax
739
740 // CHECK: movzbl        %al, %eax
741 // CHECK: encoding: [0x0f,0xb6,0xc0]
742 movzx %al, %eax
743
744 // CHECK: movzwl        %ax, %eax
745 // CHECK: encoding: [0x0f,0xb7,0xc0]
746 movzx %ax, %eax
747
748 // CHECK: movzbq        %bl, %rax
749 // CHECK: encoding: [0x48,0x0f,0xb6,0xc3]
750 movzx %bl, %rax
751
752 // CHECK: movzwq        %cx, %rax
753 // CHECK: encoding: [0x48,0x0f,0xb7,0xc1]
754 movzx %cx, %rax
755
756 // CHECK: movsbw        (%rax), %ax
757 // CHECK: encoding: [0x66,0x0f,0xbe,0x00]
758 movsx (%rax), %ax
759
760 // CHECK: movzbw        (%rax), %ax
761 // CHECK: encoding: [0x66,0x0f,0xb6,0x00]
762 movzx (%rax), %ax
763
764
765 // rdar://7873482
766 // CHECK: [0x65,0x8b,0x04,0x25,0x7c,0x00,0x00,0x00]
767         movl    %gs:124, %eax
768
769 // CHECK: jmpq *8(%rax)
770 // CHECK:   encoding: [0xff,0x60,0x08]
771         jmp     *8(%rax)
772
773 // CHECK: btq $61, -216(%rbp)
774 // CHECK:   encoding: [0x48,0x0f,0xba,0xa5,0x28,0xff,0xff,0xff,0x3d]
775         btq     $61, -216(%rbp)
776
777
778 // rdar://8061602
779 L1:
780   jecxz L1
781 // CHECK: jecxz L1
782 // CHECK:   encoding: [0x67,0xe3,A]
783   jrcxz L1
784 // CHECK: jrcxz L1
785 // CHECK:   encoding: [0xe3,A]
786
787 // PR8061
788 xchgl   368(%rax),%ecx
789 // CHECK: xchgl %ecx, 368(%rax)
790 xchgl   %ecx, 368(%rax)
791 // CHECK: xchgl %ecx, 368(%rax)
792
793 // rdar://8407548
794 xchg    0xdeadbeef(%rbx,%rcx,8),%bl
795 // CHECK: xchgb %bl, 3735928559(%rbx,%rcx,8)
796
797
798
799 // PR7254
800 lock  incl 1(%rsp)
801 // CHECK: lock
802 // CHECK: incl 1(%rsp)
803
804 // rdar://8741045
805 lock/incl 1(%rsp)
806 // CHECK: lock
807 // CHECK: incl 1(%rsp)
808
809 // rdar://8033482
810 rep movsl
811 // CHECK: rep
812 // CHECK: encoding: [0xf3]
813 // CHECK: movsd
814 // CHECK: encoding: [0xa5]
815
816
817 // rdar://8403974
818 iret
819 // CHECK: iretl
820 // CHECK: encoding: [0xcf]
821 iretw
822 // CHECK: iretw
823 // CHECK: encoding: [0x66,0xcf]
824 iretl
825 // CHECK: iretl
826 // CHECK: encoding: [0xcf]
827 iretq
828 // CHECK: iretq
829 // CHECK: encoding: [0x48,0xcf]
830
831 // rdar://8416805
832 // CHECK: retw  $31438
833 // CHECK:  encoding: [0x66,0xc2,0xce,0x7a]
834                 retw    $0x7ace
835
836 // CHECK: lretw $31438
837 // CHECK:  encoding: [0x66,0xca,0xce,0x7a]
838                 lretw   $0x7ace
839
840 // PR8592
841 lretq  // CHECK: lretq # encoding: [0x48,0xcb]
842 lretl  // CHECK: lretl # encoding: [0xcb]
843 lret   // CHECK: lretl # encoding: [0xcb]
844
845 // rdar://8403907
846 sysret
847 // CHECK: sysretl
848 // CHECK: encoding: [0x0f,0x07]
849 sysretl
850 // CHECK: sysretl
851 // CHECK: encoding: [0x0f,0x07]
852 sysretq
853 // CHECK: sysretq
854 // CHECK: encoding: [0x48,0x0f,0x07]
855
856 // rdar://8407242
857 push %fs
858 // CHECK: pushq %fs
859 // CHECK: encoding: [0x0f,0xa0]
860 push %gs
861 // CHECK: pushq %gs
862 // CHECK: encoding: [0x0f,0xa8]
863
864 pushw %fs
865 // CHECK: pushw %fs
866 // CHECK: encoding: [0x66,0x0f,0xa0]
867 pushw %gs
868 // CHECK: pushw %gs
869 // CHECK: encoding: [0x66,0x0f,0xa8]
870
871
872 pop %fs
873 // CHECK: popq  %fs
874 // CHECK: encoding: [0x0f,0xa1]
875 pop %gs
876 // CHECK: popq  %gs
877 // CHECK: encoding: [0x0f,0xa9]
878
879 popw %fs
880 // CHECK: popw  %fs
881 // CHECK: encoding: [0x66,0x0f,0xa1]
882 popw %gs
883 // CHECK: popw  %gs
884 // CHECK: encoding: [0x66,0x0f,0xa9]
885
886 // rdar://8438816
887 fildq -8(%rsp)
888 fildll -8(%rsp)
889 // CHECK: fildll        -8(%rsp)
890 // CHECK: encoding: [0xdf,0x6c,0x24,0xf8]
891 // CHECK: fildll        -8(%rsp)
892 // CHECK: encoding: [0xdf,0x6c,0x24,0xf8]
893
894 // CHECK: callq a
895         callq a
896
897 // CHECK: leaq  -40(%rbp), %r15
898         leaq    -40(%rbp), %r15
899
900
901
902 // rdar://8013734 - Alias dr6=db6
903 mov %dr6, %rax
904 mov %db6, %rax
905 // CHECK: movq  %dr6, %rax
906 // CHECK: movq  %dr6, %rax
907
908
909 // INC/DEC encodings.
910 incb %al  // CHECK:     incb    %al # encoding: [0xfe,0xc0]
911 incw %ax  // CHECK:     incw    %ax # encoding: [0x66,0xff,0xc0]
912 incl %eax // CHECK:     incl    %eax # encoding: [0xff,0xc0]
913 decb %al  // CHECK:     decb    %al # encoding: [0xfe,0xc8]
914 decw %ax  // CHECK:     decw    %ax # encoding: [0x66,0xff,0xc8]
915 decl %eax // CHECK:     decl    %eax # encoding: [0xff,0xc8]
916
917 // rdar://8416805
918 // CHECK: lgdt  4(%rax)
919 // CHECK:  encoding: [0x0f,0x01,0x50,0x04]
920                 lgdt    4(%rax)
921
922 // CHECK: lgdt  4(%rax)
923 // CHECK:  encoding: [0x0f,0x01,0x50,0x04]
924                 lgdtq   4(%rax)
925
926 // CHECK: lidt  4(%rax)
927 // CHECK:  encoding: [0x0f,0x01,0x58,0x04]
928                 lidt    4(%rax)
929
930 // CHECK: lidt  4(%rax)
931 // CHECK:  encoding: [0x0f,0x01,0x58,0x04]
932                 lidtq   4(%rax)
933
934 // CHECK: sgdt  4(%rax)
935 // CHECK:  encoding: [0x0f,0x01,0x40,0x04]
936                 sgdt    4(%rax)
937
938 // CHECK: sgdt  4(%rax)
939 // CHECK:  encoding: [0x0f,0x01,0x40,0x04]
940                 sgdtq   4(%rax)
941
942 // CHECK: sidt  4(%rax)
943 // CHECK:  encoding: [0x0f,0x01,0x48,0x04]
944                 sidt    4(%rax)
945
946 // CHECK: sidt  4(%rax)
947 // CHECK:  encoding: [0x0f,0x01,0x48,0x04]
948                 sidtq   4(%rax)
949
950
951 // rdar://8208615
952 mov (%rsi), %gs  // CHECK: movl (%rsi), %gs # encoding: [0x8e,0x2e]
953 mov %gs, (%rsi)  // CHECK: movl %gs, (%rsi) # encoding: [0x8c,0x2e]
954
955
956 // rdar://8431864
957         div     %bl,%al
958         div     %bx,%ax
959         div     %ecx,%eax
960         div     0xdeadbeef(%ebx,%ecx,8),%eax
961         div     0x45,%eax
962         div     0x7eed,%eax
963         div     0xbabecafe,%eax
964         div     0x12345678,%eax
965         idiv    %bl,%al
966         idiv    %bx,%ax
967         idiv    %ecx,%eax
968         idiv    0xdeadbeef(%ebx,%ecx,8),%eax
969         idiv    0x45,%eax
970         idiv    0x7eed,%eax
971         idiv    0xbabecafe,%eax
972         idiv    0x12345678,%eax
973
974 // PR8524
975 movd    %rax, %mm5 // CHECK: movd %rax, %mm5 # encoding: [0x48,0x0f,0x6e,0xe8]
976 movd    %mm5, %rbx // CHECK: movd %mm5, %rbx # encoding: [0x48,0x0f,0x7e,0xeb]
977 movq    %rax, %mm5 // CHECK: movd %rax, %mm5 # encoding: [0x48,0x0f,0x6e,0xe8]
978 movq    %mm5, %rbx // CHECK: movd %mm5, %rbx # encoding: [0x48,0x0f,0x7e,0xeb]
979
980 rex64 // CHECK: rex64 # encoding: [0x48]
981 data16 // CHECK: data16 # encoding: [0x66]
982
983 // PR8855
984 movq 18446744073709551615,%rbx   // CHECK: movq -1, %rbx
985
986 // PR8946
987 movdqu  %xmm0, %xmm1 // CHECK: movdqu   %xmm0, %xmm1 # encoding: [0xf3,0x0f,0x6f,0xc8]
988
989 // PR8935
990 xgetbv // CHECK: xgetbv # encoding: [0x0f,0x01,0xd0]
991 xsetbv // CHECK: xsetbv # encoding: [0x0f,0x01,0xd1]
992
993 // CHECK: loope 0
994 // CHECK: encoding: [0xe1,A]
995         loopz 0
996
997 // CHECK: loopne 0
998 // CHECK: encoding: [0xe0,A]
999         loopnz 0
1000
1001 // CHECK: outsb # encoding: [0x6e]
1002 // CHECK: outsb
1003 // CHECK: outsb
1004         outsb
1005         outsb   %ds:(%rsi), %dx
1006         outsb   (%rsi), %dx
1007
1008 // CHECK: outsw # encoding: [0x66,0x6f]
1009 // CHECK: outsw
1010 // CHECK: outsw
1011         outsw
1012         outsw   %ds:(%rsi), %dx
1013         outsw   (%rsi), %dx
1014
1015 // CHECK: outsl # encoding: [0x6f]
1016 // CHECK: outsl
1017         outsl
1018         outsl   %ds:(%rsi), %dx
1019         outsl   (%rsi), %dx
1020
1021 // CHECK: insb # encoding: [0x6c]
1022 // CHECK: insb
1023         insb
1024         insb    %dx, %es:(%rdi)
1025
1026 // CHECK: insw # encoding: [0x66,0x6d]
1027 // CHECK: insw
1028         insw
1029         insw    %dx, %es:(%rdi)
1030
1031 // CHECK: insl # encoding: [0x6d]
1032 // CHECK: insl
1033         insl
1034         insl    %dx, %es:(%rdi)
1035
1036 // CHECK: movsb # encoding: [0xa4]
1037 // CHECK: movsb
1038 // CHECK: movsb
1039         movsb
1040         movsb   %ds:(%rsi), %es:(%rdi)
1041         movsb   (%rsi), %es:(%rdi)
1042
1043 // CHECK: movsw # encoding: [0x66,0xa5]
1044 // CHECK: movsw
1045 // CHECK: movsw
1046         movsw
1047         movsw   %ds:(%rsi), %es:(%rdi)
1048         movsw   (%rsi), %es:(%rdi)
1049
1050 // CHECK: movsd # encoding: [0xa5]
1051 // CHECK: movsd
1052 // CHECK: movsd
1053         movsl
1054         movsl   %ds:(%rsi), %es:(%rdi)
1055         movsl   (%rsi), %es:(%rdi)
1056
1057 // CHECK: movsq # encoding: [0x48,0xa5]
1058 // CHECK: movsq
1059 // CHECK: movsq
1060         movsq
1061         movsq   %ds:(%rsi), %es:(%rdi)
1062         movsq   (%rsi), %es:(%rdi)
1063
1064 // CHECK: lodsb # encoding: [0xac]
1065 // CHECK: lodsb
1066 // CHECK: lodsb
1067 // CHECK: lodsb
1068 // CHECK: lodsb
1069         lodsb
1070         lodsb   %ds:(%rsi), %al
1071         lodsb   (%rsi), %al
1072         lods    %ds:(%rsi), %al
1073         lods    (%rsi), %al
1074
1075 // CHECK: lodsw # encoding: [0x66,0xad]
1076 // CHECK: lodsw
1077 // CHECK: lodsw
1078 // CHECK: lodsw
1079 // CHECK: lodsw
1080         lodsw
1081         lodsw   %ds:(%rsi), %ax
1082         lodsw   (%rsi), %ax
1083         lods    %ds:(%rsi), %ax
1084         lods    (%rsi), %ax
1085
1086 // CHECK: lodsl # encoding: [0xad]
1087 // CHECK: lodsl
1088 // CHECK: lodsl
1089 // CHECK: lodsl
1090 // CHECK: lodsl
1091         lodsl
1092         lodsl   %ds:(%rsi), %eax
1093         lodsl   (%rsi), %eax
1094         lods    %ds:(%rsi), %eax
1095         lods    (%rsi), %eax
1096
1097 // CHECK: lodsq # encoding: [0x48,0xad]
1098 // CHECK: lodsq
1099 // CHECK: lodsq
1100 // CHECK: lodsq
1101 // CHECK: lodsq
1102         lodsq
1103         lodsq   %ds:(%rsi), %rax
1104         lodsq   (%rsi), %rax
1105         lods    %ds:(%rsi), %rax
1106         lods    (%rsi), %rax
1107
1108 // CHECK: stosb # encoding: [0xaa]
1109 // CHECK: stosb
1110 // CHECK: stosb
1111         stosb
1112         stosb   %al, %es:(%rdi)
1113         stos    %al, %es:(%rdi)
1114
1115 // CHECK: stosw # encoding: [0x66,0xab]
1116 // CHECK: stosw
1117 // CHECK: stosw
1118         stosw
1119         stosw   %ax, %es:(%rdi)
1120         stos    %ax, %es:(%rdi)
1121
1122 // CHECK: stosl # encoding: [0xab]
1123 // CHECK: stosl
1124 // CHECK: stosl
1125         stosl
1126         stosl   %eax, %es:(%rdi)
1127         stos    %eax, %es:(%rdi)
1128
1129 // CHECK: stosq # encoding: [0x48,0xab]
1130 // CHECK: stosq
1131 // CHECK: stosq
1132         stosq
1133         stosq   %rax, %es:(%rdi)
1134         stos    %rax, %es:(%rdi)
1135
1136 // CHECK: strw
1137 // CHECK: encoding: [0x66,0x0f,0x00,0xc8]
1138         str %ax
1139
1140 // CHECK: strl
1141 // CHECK: encoding: [0x0f,0x00,0xc8]
1142         str %eax
1143
1144 // CHECK: strw
1145 // CHECK: encoding: [0x66,0x0f,0x00,0xc8]
1146         str %ax
1147
1148 // CHECK: strq
1149 // CHECK: encoding: [0x48,0x0f,0x00,0xc8]
1150         str %rax
1151
1152 // CHECK: movd %rdi, %xmm0
1153 // CHECK: encoding: [0x66,0x48,0x0f,0x6e,0xc7]
1154         movq %rdi,%xmm0
1155
1156 // CHECK: movd %rdi, %xmm0
1157 // CHECK: encoding: [0x66,0x48,0x0f,0x6e,0xc7]
1158         movd %rdi,%xmm0
1159
1160 // CHECK: movntil %eax, (%rdi)
1161 // CHECK: encoding: [0x0f,0xc3,0x07]
1162 // CHECK: movntil
1163 movntil %eax, (%rdi)
1164 movnti %eax, (%rdi)
1165
1166 // CHECK: movntiq %rax, (%rdi)
1167 // CHECK: encoding: [0x48,0x0f,0xc3,0x07]
1168 // CHECK: movntiq
1169 movntiq %rax, (%rdi)
1170 movnti %rax, (%rdi)
1171
1172 // CHECK: pclmulqdq     $17, %xmm0, %xmm1
1173 // CHECK: encoding: [0x66,0x0f,0x3a,0x44,0xc8,0x11]
1174 pclmulhqhqdq %xmm0, %xmm1
1175
1176 // CHECK: pclmulqdq     $1, %xmm0, %xmm1
1177 // CHECK: encoding: [0x66,0x0f,0x3a,0x44,0xc8,0x01]
1178 pclmulqdq $1, %xmm0, %xmm1
1179
1180 // CHECK: pclmulqdq     $16, (%rdi), %xmm1
1181 // CHECK: encoding: [0x66,0x0f,0x3a,0x44,0x0f,0x10]
1182 pclmullqhqdq (%rdi), %xmm1
1183
1184 // CHECK: pclmulqdq     $0, (%rdi), %xmm1
1185 // CHECK: encoding: [0x66,0x0f,0x3a,0x44,0x0f,0x00]
1186 pclmulqdq $0, (%rdi), %xmm1
1187
1188 // PR10345
1189 // CHECK: xchgq %rax, %rax
1190 // CHECK: encoding: [0x48,0x90]
1191 xchgq %rax, %rax
1192
1193 // CHECK: xchgl %eax, %eax
1194 // CHECK: encoding: [0x87,0xc0]
1195 xchgl %eax, %eax
1196
1197 // CHECK: xchgw %ax, %ax
1198 // CHECK: encoding: [0x66,0x90]
1199 xchgw %ax, %ax
1200
1201 // CHECK: xchgl %ecx, %eax
1202 // CHECK: encoding: [0x91]
1203 xchgl %ecx, %eax
1204
1205 // CHECK: xchgl %ecx, %eax
1206 // CHECK: encoding: [0x91]
1207 xchgl %eax, %ecx
1208
1209 // CHECK: sysexit
1210 // CHECK: encoding: [0x0f,0x35]
1211 sysexit
1212
1213 // CHECK: sysexitl
1214 // CHECK: encoding: [0x0f,0x35]
1215 sysexitl
1216
1217 // CHECK: sysexitq
1218 // CHECK: encoding: [0x48,0x0f,0x35]
1219 sysexitq