fix rdar://8735979 - "int 3" doesn't match to "int3". Unfortunately,
[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: movsl
116 smovq // CHECK: movsq
117
118 // rdar://8456361
119 // CHECK: rep
120 // CHECK: movsl
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://8017530
223 // CHECK: sldtw 4
224 sldt    4
225
226 // rdar://8208499
227 // CHECK: cmovnew       %bx, %ax
228 cmovnz %bx, %ax
229 // CHECK: cmovneq       %rbx, %rax
230 cmovnzq %rbx, %rax
231
232
233 // rdar://8407928
234 // CHECK: inb   $127, %al
235 // CHECK: inw   %dx, %ax
236 // CHECK: outb  %al, $127
237 // CHECK: outw  %ax, %dx
238 // CHECK: inl   %dx, %eax
239 inb     $0x7f
240 inw     %dx
241 outb    $0x7f
242 outw    %dx
243 inl     %dx
244
245
246 // PR8114
247 // CHECK: outb  %al, %dx
248 // CHECK: outb  %al, %dx
249 // CHECK: outw  %ax, %dx
250 // CHECK: outw  %ax, %dx
251 // CHECK: outl  %eax, %dx
252 // CHECK: outl  %eax, %dx
253
254 out     %al, (%dx)
255 outb    %al, (%dx)
256 out     %ax, (%dx)
257 outw    %ax, (%dx)
258 out     %eax, (%dx)
259 outl    %eax, (%dx)
260
261 // CHECK: inb   %dx, %al
262 // CHECK: inb   %dx, %al
263 // CHECK: inw   %dx, %ax
264 // CHECK: inw   %dx, %ax
265 // CHECK: inl   %dx, %eax
266 // CHECK: inl   %dx, %eax
267
268 in      (%dx), %al
269 inb     (%dx), %al
270 in      (%dx), %ax
271 inw     (%dx), %ax
272 in      (%dx), %eax
273 inl     (%dx), %eax
274
275 // rdar://8431422
276
277 // CHECK: fxch  %st(1)
278 // CHECK: fucom %st(1)
279 // CHECK: fucomp        %st(1)
280 // CHECK: faddp %st(1)
281 // CHECK: faddp %st(0)
282 // CHECK: fsubp %st(1)
283 // CHECK: fsubrp        %st(1)
284 // CHECK: fmulp %st(1)
285 // CHECK: fdivp %st(1)
286 // CHECK: fdivrp        %st(1)
287
288 fxch
289 fucom
290 fucomp
291 faddp
292 faddp %st
293 fsubp
294 fsubrp
295 fmulp
296 fdivp
297 fdivrp
298
299 // CHECK: fcomi %st(1)
300 // CHECK: fcomi %st(2)
301 // CHECK: fucomi        %st(1)
302 // CHECK: fucomi        %st(2)
303 // CHECK: fucomi        %st(2)
304
305 fcomi
306 fcomi   %st(2)
307 fucomi
308 fucomi  %st(2)
309 fucomi  %st(2), %st
310
311 // CHECK: fnstsw %ax
312 // CHECK: fnstsw %ax
313 // CHECK: fnstsw %ax
314 // CHECK: fnstsw %ax
315
316 fnstsw
317 fnstsw %ax
318 fnstsw %eax
319 fnstsw %al
320
321 // rdar://8431880
322 // CHECK: rclb  %bl
323 // CHECK: rcll  3735928559(%ebx,%ecx,8)
324 // CHECK: rcrl  %ecx
325 // CHECK: rcrl  305419896
326 rcl     %bl
327 rcll    0xdeadbeef(%ebx,%ecx,8)
328 rcr     %ecx
329 rcrl    0x12345678
330
331 rclb    %bl       // CHECK: rclb %bl     # encoding: [0xd0,0xd3]
332 rclb    $1, %bl   // CHECK: rclb %bl     # encoding: [0xd0,0xd3]
333 rclb    $2, %bl   // CHECK: rclb $2, %bl # encoding: [0xc0,0xd3,0x02]
334
335 // rdar://8418316
336 // CHECK: shldw $1, %bx, %bx
337 // CHECK: shldw $1, %bx, %bx
338 // CHECK: shrdw $1, %bx, %bx
339 // CHECK: shrdw $1, %bx, %bx
340
341 shld    %bx,%bx
342 shld    $1, %bx,%bx
343 shrd    %bx,%bx
344 shrd    $1, %bx,%bx
345
346 // CHECK: sldtl %ecx
347 // CHECK: encoding: [0x0f,0x00,0xc1]
348 // CHECK: sldtw %cx
349 // CHECK: encoding: [0x66,0x0f,0x00,0xc1]
350
351 sldt    %ecx
352 sldt    %cx
353
354 // CHECK: lcalll        *3135175374 
355 // CHECK: ljmpl *3135175374
356 lcall   *0xbadeface
357 ljmp    *0xbadeface
358
359
360 // rdar://8444631
361 // CHECK: enter $31438, $0
362 // CHECK: encoding: [0xc8,0xce,0x7a,0x00]
363 // CHECK: enter $31438, $1
364 // CHECK: encoding: [0xc8,0xce,0x7a,0x01]
365 // CHECK: enter $31438, $127
366 // CHECK: encoding: [0xc8,0xce,0x7a,0x7f]
367 enter $0x7ace,$0
368 enter $0x7ace,$1
369 enter $0x7ace,$0x7f
370
371
372 // rdar://8456364
373 // CHECK: movw  %cs, %ax
374 mov %CS, %ax
375
376 // rdar://8456391
377 fcmovb %st(1), %st(0)   // CHECK: fcmovb        %st(1), %st(0)
378 fcmove %st(1), %st(0)   // CHECK: fcmove        %st(1), %st(0)
379 fcmovbe %st(1), %st(0)  // CHECK: fcmovbe       %st(1), %st(0)
380 fcmovu %st(1), %st(0)   // CHECK: fcmovu         %st(1), %st(0)
381
382 fcmovnb %st(1), %st(0)  // CHECK: fcmovnb       %st(1), %st(0)
383 fcmovne %st(1), %st(0)  // CHECK: fcmovne       %st(1), %st(0)
384 fcmovnbe %st(1), %st(0) // CHECK: fcmovnbe      %st(1), %st(0)
385 fcmovnu %st(1), %st(0)  // CHECK: fcmovnu       %st(1), %st(0)
386
387 fcmovnae %st(1), %st(0) // CHECK: fcmovb        %st(1), %st(0)
388 fcmovna %st(1), %st(0)  // CHECK: fcmovbe       %st(1), %st(0)
389
390 fcmovae %st(1), %st(0)  // CHECK: fcmovnb       %st(1), %st(0)
391 fcmova %st(1), %st(0)   // CHECK: fcmovnbe      %st(1), %st(0)
392
393 // rdar://8456417
394 .byte 88 + 1 & 15  // CHECK: .byte      9
395
396 // rdar://8456412
397 mov %rdx, %cr0
398 // CHECK: movq  %rdx, %cr0
399 // CHECK: encoding: [0x0f,0x22,0xc2]
400 mov %rdx, %cr4
401 // CHECK: movq  %rdx, %cr4
402 // CHECK: encoding: [0x0f,0x22,0xe2]
403 mov %rdx, %cr8
404 // CHECK: movq  %rdx, %cr8
405 // CHECK: encoding: [0x44,0x0f,0x22,0xc2]
406 mov %rdx, %cr15
407 // CHECK: movq  %rdx, %cr15
408 // CHECK: encoding: [0x44,0x0f,0x22,0xfa]
409
410 // rdar://8456371 - Handle commutable instructions written backward.
411 // CHECK:       faddp   %st(1)
412 // CHECK:       fmulp   %st(2)
413 faddp %st, %st(1)
414 fmulp %st, %st(2)
415
416 // rdar://8468087 - Encode these accurately, they are not synonyms.
417 // CHECK: fmul  %st(0), %st(1)
418 // CHECK: encoding: [0xdc,0xc9]
419 // CHECK: fmul  %st(1)
420 // CHECK: encoding: [0xd8,0xc9]
421 fmul %st, %st(1)
422 fmul %st(1), %st
423
424 // CHECK: fadd  %st(0), %st(1)
425 // CHECK: encoding: [0xdc,0xc1]
426 // CHECK: fadd  %st(1)
427 // CHECK: encoding: [0xd8,0xc1]
428 fadd %st, %st(1)
429 fadd %st(1), %st
430
431
432 // rdar://8416805
433 // CHECK: xorb  %al, %al
434 // CHECK: encoding: [0x30,0xc0]
435 // CHECK: xorw  %di, %di
436 // CHECK: encoding: [0x66,0x31,0xff]
437 // CHECK: xorl  %esi, %esi
438 // CHECK: encoding: [0x31,0xf6]
439 // CHECK: xorq  %rsi, %rsi
440 // CHECK: encoding: [0x48,0x31,0xf6]
441 clrb    %al
442 clr    %di
443 clr    %esi
444 clr    %rsi
445
446 // rdar://8456378
447 cltq  // CHECK: cltq
448 cdqe  // CHECK: cltq
449 cwde  // CHECK: cwtl
450 cwtl  // CHECK: cwtl
451
452 // rdar://8416805
453 cbw   // CHECK: cbtw
454 cwd   // CHECK: cwtd
455 cdq   // CHECK: cltd
456
457 // rdar://8456378 and PR7557 - fstsw
458 fstsw %ax
459 // CHECK: wait
460 // CHECK: fnstsw %ax
461 fstsw (%rax)
462 // CHECK: wait
463 // CHECK: fnstsw (%rax)
464
465 // PR8259
466 fstcw (%rsp)
467 // CHECK: wait
468 // CHECK: fnstcw (%rsp)
469
470 // PR8259
471 fstcw (%rsp)
472 // CHECK: wait
473 // CHECK: fnstcw (%rsp)
474
475 // PR8258
476 finit
477 // CHECK: wait
478 // CHECK: fninit
479
480 fsave   32493
481 // CHECK: wait
482 // CHECK: fnsave 32493
483
484
485 // rdar://8456382 - cvtsd2si support.
486 cvtsd2si        %xmm1, %rax
487 // CHECK: cvtsd2siq     %xmm1, %rax
488 // CHECK: encoding: [0xf2,0x48,0x0f,0x2d,0xc1]
489 cvtsd2si        %xmm1, %eax
490 // CHECK: cvtsd2sil     %xmm1, %eax
491 // CHECK: encoding: [0xf2,0x0f,0x2d,0xc1]
492
493 cvtsd2siq %xmm0, %rax // CHECK: cvtsd2siq       %xmm0, %rax
494 cvtsd2sil %xmm0, %eax // CHECK: cvtsd2sil       %xmm0, %eax
495 cvtsd2si %xmm0, %rax  // CHECK: cvtsd2siq       %xmm0, %rax
496
497
498 cvttpd2dq %xmm1, %xmm0  // CHECK: cvttpd2dq %xmm1, %xmm0
499 cvttpd2dq (%rax), %xmm0 // CHECK: cvttpd2dq (%rax), %xmm0
500
501 cvttps2dq %xmm1, %xmm0  // CHECK: cvttps2dq %xmm1, %xmm0
502 cvttps2dq (%rax), %xmm0 // CHECK: cvttps2dq (%rax), %xmm0
503
504 // rdar://8456376 - llvm-mc rejects 'roundss'
505 roundss $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x0a,0xc0,0x0e]
506 roundps $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x08,0xc0,0x0e]
507 roundsd $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x0b,0xc0,0x0e]
508 roundpd $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x09,0xc0,0x0e]
509
510
511 // rdar://8482675 - 32-bit mem operand support in 64-bit mode (0x67 prefix)
512 leal    8(%eax), %esi
513 // CHECK: leal  8(%eax), %esi
514 // CHECK: encoding: [0x67,0x8d,0x70,0x08]
515 leaq    8(%eax), %rsi
516 // CHECK: leaq  8(%eax), %rsi
517 // CHECK: encoding: [0x67,0x48,0x8d,0x70,0x08]
518 leaq    8(%rax), %rsi
519 // CHECK: leaq  8(%rax), %rsi
520 // CHECK: encoding: [0x48,0x8d,0x70,0x08]
521
522
523 cvttpd2dq       0xdeadbeef(%ebx,%ecx,8),%xmm5
524 // CHECK: cvttpd2dq     3735928559(%ebx,%ecx,8), %xmm5
525 // CHECK: encoding: [0x67,0x66,0x0f,0xe6,0xac,0xcb,0xef,0xbe,0xad,0xde]
526
527 // rdar://8490728 - llvm-mc rejects 'movmskpd'
528 movmskpd        %xmm6, %rax
529 // CHECK: movmskpd      %xmm6, %rax
530 // CHECK: encoding: [0x66,0x48,0x0f,0x50,0xc6]
531 movmskpd        %xmm6, %eax
532 // CHECK: movmskpd      %xmm6, %eax
533 // CHECK: encoding: [0x66,0x0f,0x50,0xc6]
534
535 // rdar://8491845 - Gas supports commuted forms of non-commutable instructions.
536 fdivrp %st(0), %st(1) // CHECK: encoding: [0xde,0xf9]
537 fdivrp %st(1), %st(0) // CHECK: encoding: [0xde,0xf9]
538
539 fsubrp %ST(0), %ST(1) // CHECK: encoding: [0xde,0xe9]
540 fsubrp %ST(1), %ST(0) // CHECK: encoding: [0xde,0xe9]
541
542 // also PR8861
543 fdivp %st(0), %st(1) // CHECK: encoding: [0xde,0xf1]
544 fdivp %st(1), %st(0) // CHECK: encoding: [0xde,0xf1]
545
546
547 movl    foo(%rip), %eax
548 // CHECK: movl  foo(%rip), %eax
549 // CHECK: encoding: [0x8b,0x05,A,A,A,A]
550 // CHECK: fixup A - offset: 2, value: foo-4, kind: reloc_riprel_4byte
551
552 movb    $12, foo(%rip)
553 // CHECK: movb  $12, foo(%rip)
554 // CHECK: encoding: [0xc6,0x05,A,A,A,A,0x0c]
555 // CHECK:    fixup A - offset: 2, value: foo-5, kind: reloc_riprel_4byte
556
557 movw    $12, foo(%rip)
558 // CHECK: movw  $12, foo(%rip)
559 // CHECK: encoding: [0x66,0xc7,0x05,A,A,A,A,0x0c,0x00]
560 // CHECK:    fixup A - offset: 3, value: foo-6, kind: reloc_riprel_4byte
561
562 movl    $12, foo(%rip)
563 // CHECK: movl  $12, foo(%rip)
564 // CHECK: encoding: [0xc7,0x05,A,A,A,A,0x0c,0x00,0x00,0x00]
565 // CHECK:    fixup A - offset: 2, value: foo-8, kind: reloc_riprel_4byte
566
567 movq    $12, foo(%rip)
568 // CHECK:  movq $12, foo(%rip)
569 // CHECK: encoding: [0x48,0xc7,0x05,A,A,A,A,0x0c,0x00,0x00,0x00]
570 // CHECK:    fixup A - offset: 3, value: foo-8, kind: reloc_riprel_4byte
571
572 // CHECK: addq  $-424, %rax
573 // CHECK: encoding: [0x48,0x05,0x58,0xfe,0xff,0xff]
574 addq $-424, %rax
575
576
577 // CHECK: movq  _foo@GOTPCREL(%rip), %rax
578 // CHECK:  encoding: [0x48,0x8b,0x05,A,A,A,A]
579 // CHECK:  fixup A - offset: 3, value: _foo@GOTPCREL-4, kind: reloc_riprel_4byte_movq_load
580 movq _foo@GOTPCREL(%rip), %rax
581
582 // CHECK: movq  _foo@GOTPCREL(%rip), %r14
583 // CHECK:  encoding: [0x4c,0x8b,0x35,A,A,A,A]
584 // CHECK:  fixup A - offset: 3, value: _foo@GOTPCREL-4, kind: reloc_riprel_4byte_movq_load
585 movq _foo@GOTPCREL(%rip), %r14
586
587
588 // CHECK: movq  (%r13,%rax,8), %r13
589 // CHECK:  encoding: [0x4d,0x8b,0x6c,0xc5,0x00]
590 movq 0x00(%r13,%rax,8),%r13
591
592 // CHECK: testq %rax, %rbx
593 // CHECK:  encoding: [0x48,0x85,0xd8]
594 testq %rax, %rbx
595
596 // CHECK: cmpq  %rbx, %r14
597 // CHECK:   encoding: [0x49,0x39,0xde]
598         cmpq %rbx, %r14
599
600 // rdar://7947167
601
602 movsq
603 // CHECK: movsq
604 // CHECK:   encoding: [0x48,0xa5]
605
606 movsl
607 // CHECK: movsl
608 // CHECK:   encoding: [0xa5]
609
610 stosq
611 // CHECK: stosq
612 // CHECK:   encoding: [0x48,0xab]
613 stosl
614 // CHECK: stosl
615 // CHECK:   encoding: [0xab]
616
617
618 // Not moffset forms of moves, they are x86-32 only! rdar://7947184
619 movb    0, %al    // CHECK: movb 0, %al # encoding: [0x8a,0x04,0x25,0x00,0x00,0x00,0x00]
620 movw    0, %ax    // CHECK: movw 0, %ax # encoding: [0x66,0x8b,0x04,0x25,0x00,0x00,0x00,0x00]
621 movl    0, %eax   // CHECK: movl 0, %eax # encoding: [0x8b,0x04,0x25,0x00,0x00,0x00,0x00]
622
623 // CHECK: pushfq        # encoding: [0x9c]
624         pushf
625 // CHECK: pushfq        # encoding: [0x9c]
626         pushfq
627 // CHECK: popfq         # encoding: [0x9d]
628         popf
629 // CHECK: popfq         # encoding: [0x9d]
630         popfq
631
632 // CHECK: movabsq $-281474976710654, %rax
633 // CHECK: encoding: [0x48,0xb8,0x02,0x00,0x00,0x00,0x00,0x00,0xff,0xff]
634         movabsq $0xFFFF000000000002, %rax
635
636 // CHECK: movabsq $-281474976710654, %rax
637 // CHECK: encoding: [0x48,0xb8,0x02,0x00,0x00,0x00,0x00,0x00,0xff,0xff]
638         movq $0xFFFF000000000002, %rax
639
640 // CHECK: movq $-65536, %rax
641 // CHECK: encoding: [0x48,0xc7,0xc0,0x00,0x00,0xff,0xff]
642         movq $0xFFFFFFFFFFFF0000, %rax
643
644 // CHECK: movq $-256, %rax
645 // CHECK: encoding: [0x48,0xc7,0xc0,0x00,0xff,0xff,0xff]
646         movq $0xFFFFFFFFFFFFFF00, %rax
647
648 // CHECK: movq $10, %rax
649 // CHECK: encoding: [0x48,0xc7,0xc0,0x0a,0x00,0x00,0x00]
650         movq $10, %rax
651
652 // rdar://8014869
653 //
654 // CHECK: ret
655 // CHECK:  encoding: [0xc3]
656         retq
657
658 // CHECK: sete %al
659 // CHECK: encoding: [0x0f,0x94,0xc0]
660         setz %al
661
662 // CHECK: setne %al
663 // CHECK: encoding: [0x0f,0x95,0xc0]
664         setnz %al
665
666 // CHECK: je 0
667 // CHECK: encoding: [0x74,A]
668         jz 0
669
670 // CHECK: jne
671 // CHECK: encoding: [0x75,A]
672         jnz 0
673
674 // PR9264
675 btl     $1, 0 // CHECK: btl $1, 0 # encoding: [0x0f,0xba,0x24,0x25,0x00,0x00,0x00,0x00,0x01]
676 bt      $1, 0 // CHECK: btl $1, 0 # encoding: [0x0f,0xba,0x24,0x25,0x00,0x00,0x00,0x00,0x01]
677
678 // rdar://8017515
679 btq $0x01,%rdx
680 // CHECK: btq   $1, %rdx
681 // CHECK:  encoding: [0x48,0x0f,0xba,0xe2,0x01]
682
683 //rdar://8017633
684 // CHECK: movzbl        %al, %esi
685 // CHECK:  encoding: [0x0f,0xb6,0xf0]
686         movzx %al, %esi
687
688 // CHECK: movzbq        %al, %rsi
689 // CHECK:  encoding: [0x48,0x0f,0xb6,0xf0]
690         movzx %al, %rsi
691
692 // CHECK: movsbw        %al, %ax
693 // CHECK: encoding: [0x66,0x0f,0xbe,0xc0]
694 movsx %al, %ax
695
696 // CHECK: movsbl        %al, %eax
697 // CHECK: encoding: [0x0f,0xbe,0xc0]
698 movsx %al, %eax
699
700 // CHECK: movswl        %ax, %eax
701 // CHECK: encoding: [0x0f,0xbf,0xc0]
702 movsx %ax, %eax
703
704 // CHECK: movsbq        %bl, %rax
705 // CHECK: encoding: [0x48,0x0f,0xbe,0xc3]
706 movsx %bl, %rax
707
708 // CHECK: movswq %cx, %rax
709 // CHECK: encoding: [0x48,0x0f,0xbf,0xc1]
710 movsx %cx, %rax
711
712 // CHECK: movslq        %edi, %rax
713 // CHECK: encoding: [0x48,0x63,0xc7]
714 movsx %edi, %rax
715
716 // CHECK: movzbw        %al, %ax
717 // CHECK: encoding: [0x66,0x0f,0xb6,0xc0]
718 movzx %al, %ax
719
720 // CHECK: movzbl        %al, %eax
721 // CHECK: encoding: [0x0f,0xb6,0xc0]
722 movzx %al, %eax
723
724 // CHECK: movzwl        %ax, %eax
725 // CHECK: encoding: [0x0f,0xb7,0xc0]
726 movzx %ax, %eax
727
728 // CHECK: movzbq        %bl, %rax
729 // CHECK: encoding: [0x48,0x0f,0xb6,0xc3]
730 movzx %bl, %rax
731
732 // CHECK: movzwq        %cx, %rax
733 // CHECK: encoding: [0x48,0x0f,0xb7,0xc1]
734 movzx %cx, %rax
735
736 // CHECK: movsbw        (%rax), %ax
737 // CHECK: encoding: [0x66,0x0f,0xbe,0x00]
738 movsx (%rax), %ax
739
740 // CHECK: movzbw        (%rax), %ax
741 // CHECK: encoding: [0x66,0x0f,0xb6,0x00]
742 movzx (%rax), %ax
743
744
745 // rdar://7873482
746 // CHECK: [0x65,0x8b,0x04,0x25,0x7c,0x00,0x00,0x00]
747         movl    %gs:124, %eax
748
749 // CHECK: jmpq *8(%rax)
750 // CHECK:   encoding: [0xff,0x60,0x08]
751         jmp     *8(%rax)
752
753 // CHECK: btq $61, -216(%rbp)
754 // CHECK:   encoding: [0x48,0x0f,0xba,0xa5,0x28,0xff,0xff,0xff,0x3d]
755         btq     $61, -216(%rbp)
756
757
758 // rdar://8061602
759 L1:
760   jecxz L1
761 // CHECK: jecxz L1
762 // CHECK:   encoding: [0x67,0xe3,A]
763   jrcxz L1
764 // CHECK: jrcxz L1
765 // CHECK:   encoding: [0xe3,A]
766
767 // PR8061
768 xchgl   368(%rax),%ecx
769 // CHECK: xchgl %ecx, 368(%rax)
770 xchgl   %ecx, 368(%rax)
771 // CHECK: xchgl %ecx, 368(%rax)
772
773 // rdar://8407548
774 xchg    0xdeadbeef(%rbx,%rcx,8),%bl
775 // CHECK: xchgb %bl, 3735928559(%rbx,%rcx,8)
776
777
778
779 // PR7254
780 lock  incl 1(%rsp)
781 // CHECK: lock
782 // CHECK: incl 1(%rsp)
783
784 // rdar://8741045
785 lock/incl 1(%rsp)
786 // CHECK: lock
787 // CHECK: incl 1(%rsp)
788
789 // rdar://8033482
790 rep movsl
791 // CHECK: rep
792 // CHECK: encoding: [0xf3]
793 // CHECK: movsl
794 // CHECK: encoding: [0xa5]
795
796
797 // rdar://8403974
798 iret
799 // CHECK: iretl
800 // CHECK: encoding: [0xcf]
801 iretw
802 // CHECK: iretw
803 // CHECK: encoding: [0x66,0xcf]
804 iretl
805 // CHECK: iretl
806 // CHECK: encoding: [0xcf]
807 iretq
808 // CHECK: iretq
809 // CHECK: encoding: [0x48,0xcf]
810
811 // rdar://8416805
812 // CHECK: retw  $31438
813 // CHECK:  encoding: [0x66,0xc2,0xce,0x7a]
814                 retw    $0x7ace
815
816 // CHECK: lretw $31438
817 // CHECK:  encoding: [0x66,0xca,0xce,0x7a]
818                 lretw   $0x7ace
819
820 // PR8592
821 lretq  // CHECK: lretq # encoding: [0x48,0xcb]
822 lretl  // CHECK: lretl # encoding: [0xcb]
823 lret   // CHECK: lretl # encoding: [0xcb]
824
825 // rdar://8403907
826 sysret
827 // CHECK: sysretl
828 // CHECK: encoding: [0x0f,0x07]
829 sysretl
830 // CHECK: sysretl
831 // CHECK: encoding: [0x0f,0x07]
832 sysretq
833 // CHECK: sysretq
834 // CHECK: encoding: [0x48,0x0f,0x07]
835
836 // rdar://8407242
837 push %fs
838 // CHECK: pushq %fs
839 // CHECK: encoding: [0x0f,0xa0]
840 push %gs
841 // CHECK: pushq %gs
842 // CHECK: encoding: [0x0f,0xa8]
843
844 pushw %fs
845 // CHECK: pushw %fs
846 // CHECK: encoding: [0x66,0x0f,0xa0]
847 pushw %gs
848 // CHECK: pushw %gs
849 // CHECK: encoding: [0x66,0x0f,0xa8]
850
851
852 pop %fs
853 // CHECK: popq  %fs
854 // CHECK: encoding: [0x0f,0xa1]
855 pop %gs
856 // CHECK: popq  %gs
857 // CHECK: encoding: [0x0f,0xa9]
858
859 popw %fs
860 // CHECK: popw  %fs
861 // CHECK: encoding: [0x66,0x0f,0xa1]
862 popw %gs
863 // CHECK: popw  %gs
864 // CHECK: encoding: [0x66,0x0f,0xa9]
865
866 // rdar://8438816
867 fildq -8(%rsp)
868 fildll -8(%rsp)
869 // CHECK: fildll        -8(%rsp)
870 // CHECK: encoding: [0xdf,0x6c,0x24,0xf8]
871 // CHECK: fildll        -8(%rsp)
872 // CHECK: encoding: [0xdf,0x6c,0x24,0xf8]
873
874 // CHECK: callq a
875         callq a
876
877 // CHECK: leaq  -40(%rbp), %r15
878         leaq    -40(%rbp), %r15
879
880
881
882 // rdar://8013734 - Alias dr6=db6
883 mov %dr6, %rax
884 mov %db6, %rax
885 // CHECK: movq  %dr6, %rax
886 // CHECK: movq  %dr6, %rax
887
888
889 // INC/DEC encodings.
890 incb %al  // CHECK:     incb    %al # encoding: [0xfe,0xc0]
891 incw %ax  // CHECK:     incw    %ax # encoding: [0x66,0xff,0xc0]
892 incl %eax // CHECK:     incl    %eax # encoding: [0xff,0xc0]
893 decb %al  // CHECK:     decb    %al # encoding: [0xfe,0xc8]
894 decw %ax  // CHECK:     decw    %ax # encoding: [0x66,0xff,0xc8]
895 decl %eax // CHECK:     decl    %eax # encoding: [0xff,0xc8]
896
897 // rdar://8416805
898 // CHECK: lgdt  4(%rax)
899 // CHECK:  encoding: [0x0f,0x01,0x50,0x04]
900                 lgdt    4(%rax)
901
902 // CHECK: lgdt  4(%rax)
903 // CHECK:  encoding: [0x0f,0x01,0x50,0x04]
904                 lgdtq   4(%rax)
905
906 // CHECK: lidt  4(%rax)
907 // CHECK:  encoding: [0x0f,0x01,0x58,0x04]
908                 lidt    4(%rax)
909
910 // CHECK: lidt  4(%rax)
911 // CHECK:  encoding: [0x0f,0x01,0x58,0x04]
912                 lidtq   4(%rax)
913
914 // CHECK: sgdt  4(%rax)
915 // CHECK:  encoding: [0x0f,0x01,0x40,0x04]
916                 sgdt    4(%rax)
917
918 // CHECK: sgdt  4(%rax)
919 // CHECK:  encoding: [0x0f,0x01,0x40,0x04]
920                 sgdtq   4(%rax)
921
922 // CHECK: sidt  4(%rax)
923 // CHECK:  encoding: [0x0f,0x01,0x48,0x04]
924                 sidt    4(%rax)
925
926 // CHECK: sidt  4(%rax)
927 // CHECK:  encoding: [0x0f,0x01,0x48,0x04]
928                 sidtq   4(%rax)
929
930
931 // rdar://8208615
932 mov (%rsi), %gs  // CHECK: movl (%rsi), %gs # encoding: [0x8e,0x2e]
933 mov %gs, (%rsi)  // CHECK: movl %gs, (%rsi) # encoding: [0x8c,0x2e]
934
935
936 // rdar://8431864
937         div     %bl,%al
938         div     %bx,%ax
939         div     %ecx,%eax
940         div     0xdeadbeef(%ebx,%ecx,8),%eax
941         div     0x45,%eax
942         div     0x7eed,%eax
943         div     0xbabecafe,%eax
944         div     0x12345678,%eax
945         idiv    %bl,%al
946         idiv    %bx,%ax
947         idiv    %ecx,%eax
948         idiv    0xdeadbeef(%ebx,%ecx,8),%eax
949         idiv    0x45,%eax
950         idiv    0x7eed,%eax
951         idiv    0xbabecafe,%eax
952         idiv    0x12345678,%eax
953
954 // PR8524
955 movd    %rax, %mm5 // CHECK: movd %rax, %mm5 # encoding: [0x48,0x0f,0x6e,0xe8]
956 movd    %mm5, %rbx // CHECK: movd %mm5, %rbx # encoding: [0x48,0x0f,0x7e,0xeb]
957 movq    %rax, %mm5 // CHECK: movd %rax, %mm5 # encoding: [0x48,0x0f,0x6e,0xe8]
958 movq    %mm5, %rbx // CHECK: movd %mm5, %rbx # encoding: [0x48,0x0f,0x7e,0xeb]
959
960 rex64 // CHECK: rex64 # encoding: [0x48]
961 data16 // CHECK: data16 # encoding: [0x66]
962
963 // PR8855
964 movq 18446744073709551615,%rbx   // CHECK: movq -1, %rbx
965
966 // PR8946
967 movdqu  %xmm0, %xmm1 // CHECK: movdqu   %xmm0, %xmm1 # encoding: [0xf3,0x0f,0x6f,0xc8]
968
969 // PR8935
970 xgetbv // CHECK: xgetbv # encoding: [0x0f,0x01,0xd0]
971 xsetbv // CHECK: xsetbv # encoding: [0x0f,0x01,0xd1]
972
973 // CHECK: loope 0
974 // CHECK: encoding: [0xe1,A]
975         loopz 0
976
977 // CHECK: loopne 0
978 // CHECK: encoding: [0xe0,A]
979         loopnz 0
980
981 // CHECK: outsb # encoding: [0x6e]
982 // CHECK: outsb
983 // CHECK: outsb
984         outsb
985         outsb   %ds:(%rsi), %dx
986         outsb   (%rsi), %dx
987
988 // CHECK: outsw # encoding: [0x66,0x6f]
989 // CHECK: outsw
990 // CHECK: outsw
991         outsw
992         outsw   %ds:(%rsi), %dx
993         outsw   (%rsi), %dx
994
995 // CHECK: outsl # encoding: [0x6f]
996 // CHECK: outsl
997         outsl
998         outsl   %ds:(%rsi), %dx
999         outsl   (%rsi), %dx
1000
1001 // CHECK: insb # encoding: [0x6c]
1002 // CHECK: insb
1003         insb
1004         insb    %dx, %es:(%rdi)
1005
1006 // CHECK: insw # encoding: [0x66,0x6d]
1007 // CHECK: insw
1008         insw
1009         insw    %dx, %es:(%rdi)
1010
1011 // CHECK: insl # encoding: [0x6d]
1012 // CHECK: insl
1013         insl
1014         insl    %dx, %es:(%rdi)
1015
1016 // CHECK: movsb # encoding: [0xa4]
1017 // CHECK: movsb
1018 // CHECK: movsb
1019         movsb
1020         movsb   %ds:(%rsi), %es:(%rdi)
1021         movsb   (%rsi), %es:(%rdi)
1022
1023 // CHECK: movsw # encoding: [0x66,0xa5]
1024 // CHECK: movsw
1025 // CHECK: movsw
1026         movsw
1027         movsw   %ds:(%rsi), %es:(%rdi)
1028         movsw   (%rsi), %es:(%rdi)
1029
1030 // CHECK: movsl # encoding: [0xa5]
1031 // CHECK: movsl
1032 // CHECK: movsl
1033         movsl
1034         movsl   %ds:(%rsi), %es:(%rdi)
1035         movsl   (%rsi), %es:(%rdi)
1036
1037 // CHECK: movsq # encoding: [0x48,0xa5]
1038 // CHECK: movsq
1039 // CHECK: movsq
1040         movsq
1041         movsq   %ds:(%rsi), %es:(%rdi)
1042         movsq   (%rsi), %es:(%rdi)
1043
1044 // CHECK: lodsb # encoding: [0xac]
1045 // CHECK: lodsb
1046 // CHECK: lodsb
1047 // CHECK: lodsb
1048 // CHECK: lodsb
1049         lodsb
1050         lodsb   %ds:(%rsi), %al
1051         lodsb   (%rsi), %al
1052         lods    %ds:(%rsi), %al
1053         lods    (%rsi), %al
1054
1055 // CHECK: lodsw # encoding: [0x66,0xad]
1056 // CHECK: lodsw
1057 // CHECK: lodsw
1058 // CHECK: lodsw
1059 // CHECK: lodsw
1060         lodsw
1061         lodsw   %ds:(%rsi), %ax
1062         lodsw   (%rsi), %ax
1063         lods    %ds:(%rsi), %ax
1064         lods    (%rsi), %ax
1065
1066 // CHECK: lodsl # encoding: [0xad]
1067 // CHECK: lodsl
1068 // CHECK: lodsl
1069 // CHECK: lodsl
1070 // CHECK: lodsl
1071         lodsl
1072         lodsl   %ds:(%rsi), %eax
1073         lodsl   (%rsi), %eax
1074         lods    %ds:(%rsi), %eax
1075         lods    (%rsi), %eax
1076
1077 // CHECK: lodsq # encoding: [0x48,0xad]
1078 // CHECK: lodsq
1079 // CHECK: lodsq
1080 // CHECK: lodsq
1081 // CHECK: lodsq
1082         lodsq
1083         lodsq   %ds:(%rsi), %rax
1084         lodsq   (%rsi), %rax
1085         lods    %ds:(%rsi), %rax
1086         lods    (%rsi), %rax
1087
1088 // CHECK: stosb # encoding: [0xaa]
1089 // CHECK: stosb
1090 // CHECK: stosb
1091         stosb
1092         stosb   %al, %es:(%rdi)
1093         stos    %al, %es:(%rdi)
1094
1095 // CHECK: stosw # encoding: [0x66,0xab]
1096 // CHECK: stosw
1097 // CHECK: stosw
1098         stosw
1099         stosw   %ax, %es:(%rdi)
1100         stos    %ax, %es:(%rdi)
1101
1102 // CHECK: stosl # encoding: [0xab]
1103 // CHECK: stosl
1104 // CHECK: stosl
1105         stosl
1106         stosl   %eax, %es:(%rdi)
1107         stos    %eax, %es:(%rdi)
1108
1109 // CHECK: stosq # encoding: [0x48,0xab]
1110 // CHECK: stosq
1111 // CHECK: stosq
1112         stosq
1113         stosq   %rax, %es:(%rdi)
1114         stos    %rax, %es:(%rdi)
1115
1116 // CHECK: strw
1117 // CHECK: encoding: [0x66,0x0f,0x00,0xc8]
1118         str %ax
1119
1120 // CHECK: strl
1121 // CHECK: encoding: [0x0f,0x00,0xc8]
1122         str %eax
1123
1124 // CHECK: strw
1125 // CHECK: encoding: [0x66,0x0f,0x00,0xc8]
1126         str %ax
1127
1128 // CHECK: strq
1129 // CHECK: encoding: [0x48,0x0f,0x00,0xc8]
1130         str %rax