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