x86-64.s revision 740e5b3586a474f1cea371cf6f652850e5420b90
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: movsd
116smovq // 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
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// rdar://8735979 - int $3 -> int3
194// CHECK: int3
195int	$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
201movaps %xmm3, (%esi, 2)
202
203// CHECK: imull $12, %eax, %eax
204imul $12, %eax
205
206// CHECK: imull %ecx, %eax
207imull %ecx, %eax
208
209
210// rdar://8208481
211// CHECK: outb	%al, $161
212outb	%al, $161
213// CHECK: outw	%ax, $128
214outw	%ax, $128
215// CHECK: inb	$161, %al
216inb	$161, %al
217
218// rdar://8017621
219// CHECK: pushq	$1
220push $1
221
222// rdar://8017530
223// CHECK: sldtw	4
224sldt	4
225
226// rdar://8208499
227// CHECK: cmovnew	%bx, %ax
228cmovnz %bx, %ax
229// CHECK: cmovneq	%rbx, %rax
230cmovnzq %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
239inb	$0x7f
240inw	%dx
241outb	$0x7f
242outw	%dx
243inl	%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
254out	%al, (%dx)
255outb	%al, (%dx)
256out	%ax, (%dx)
257outw	%ax, (%dx)
258out	%eax, (%dx)
259outl	%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
268in	(%dx), %al
269inb	(%dx), %al
270in	(%dx), %ax
271inw	(%dx), %ax
272in	(%dx), %eax
273inl	(%dx), %eax
274
275// rdar://8431422
276
277// CHECK: fxch
278// CHECK: fucom
279// CHECK: fucomp
280// CHECK: faddp
281// CHECK: faddp	%st(0)
282// CHECK: fsubp
283// CHECK: fsubrp
284// CHECK: fmulp
285// CHECK: fdivp
286// CHECK: fdivrp
287
288fxch
289fucom
290fucomp
291faddp
292faddp %st
293fsubp
294fsubrp
295fmulp
296fdivp
297fdivrp
298
299// CHECK: fcomi
300// CHECK: fcomi	%st(2)
301// CHECK: fucomi
302// CHECK: fucomi %st(2)
303// CHECK: fucomi %st(2)
304
305fcomi
306fcomi	%st(2)
307fucomi
308fucomi	%st(2)
309fucomi	%st(2), %st
310
311// CHECK: fnstsw
312// CHECK: fnstsw
313// CHECK: fnstsw
314// CHECK: fnstsw
315
316fnstsw
317fnstsw %ax
318fnstsw %eax
319fnstsw %al
320
321// rdar://8431880
322// CHECK: rclb	%bl
323// CHECK: rcll	3735928559(%ebx,%ecx,8)
324// CHECK: rcrl	%ecx
325// CHECK: rcrl	305419896
326rcl	%bl
327rcll	0xdeadbeef(%ebx,%ecx,8)
328rcr	%ecx
329rcrl	0x12345678
330
331rclb	%bl       // CHECK: rclb %bl     # encoding: [0xd0,0xd3]
332rclb	$1, %bl   // CHECK: rclb %bl     # encoding: [0xd0,0xd3]
333rclb	$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
341shld	%bx,%bx
342shld	$1, %bx,%bx
343shrd	%bx,%bx
344shrd	$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
351sldt	%ecx
352sldt	%cx
353
354// CHECK: lcalll	*3135175374
355// CHECK: ljmpl	*3135175374
356lcall	*0xbadeface
357ljmp	*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]
367enter $0x7ace,$0
368enter $0x7ace,$1
369enter $0x7ace,$0x7f
370
371
372// rdar://8456364
373// CHECK: movw	%cs, %ax
374mov %CS, %ax
375
376// rdar://8456391
377fcmovb %st(1), %st(0)   // CHECK: fcmovb	%st(1), %st(0)
378fcmove %st(1), %st(0)   // CHECK: fcmove	%st(1), %st(0)
379fcmovbe %st(1), %st(0)  // CHECK: fcmovbe	%st(1), %st(0)
380fcmovu %st(1), %st(0)   // CHECK: fcmovu	 %st(1), %st(0)
381
382fcmovnb %st(1), %st(0)  // CHECK: fcmovnb	%st(1), %st(0)
383fcmovne %st(1), %st(0)  // CHECK: fcmovne	%st(1), %st(0)
384fcmovnbe %st(1), %st(0) // CHECK: fcmovnbe	%st(1), %st(0)
385fcmovnu %st(1), %st(0)  // CHECK: fcmovnu	%st(1), %st(0)
386
387fcmovnae %st(1), %st(0) // CHECK: fcmovb	%st(1), %st(0)
388fcmovna %st(1), %st(0)  // CHECK: fcmovbe	%st(1), %st(0)
389
390fcmovae %st(1), %st(0)  // CHECK: fcmovnb	%st(1), %st(0)
391fcmova %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
397mov %rdx, %cr0
398// CHECK: movq	%rdx, %cr0
399// CHECK: encoding: [0x0f,0x22,0xc2]
400mov %rdx, %cr4
401// CHECK: movq	%rdx, %cr4
402// CHECK: encoding: [0x0f,0x22,0xe2]
403mov %rdx, %cr8
404// CHECK: movq	%rdx, %cr8
405// CHECK: encoding: [0x44,0x0f,0x22,0xc2]
406mov %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)
413faddp %st, %st(1)
414fmulp %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]
421fmul %st, %st(1)
422fmul %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]
428fadd %st, %st(1)
429fadd %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]
441clrb    %al
442clr    %di
443clr    %esi
444clr    %rsi
445
446// rdar://8456378
447cltq  // CHECK: cltq
448cdqe  // CHECK: cltq
449cwde  // CHECK: cwtl
450cwtl  // CHECK: cwtl
451
452// rdar://8416805
453cbw   // CHECK: cbtw
454cwd   // CHECK: cwtd
455cdq   // CHECK: cltd
456
457// rdar://8456378 and PR7557 - fstsw
458fstsw %ax
459// CHECK: wait
460// CHECK: fnstsw
461fstsw (%rax)
462// CHECK: wait
463// CHECK: fnstsw (%rax)
464
465// PR8259
466fstcw (%rsp)
467// CHECK: wait
468// CHECK: fnstcw (%rsp)
469
470// PR8259
471fstcw (%rsp)
472// CHECK: wait
473// CHECK: fnstcw (%rsp)
474
475// PR8258
476finit
477// CHECK: wait
478// CHECK: fninit
479
480fsave	32493
481// CHECK: wait
482// CHECK: fnsave 32493
483
484
485// rdar://8456382 - cvtsd2si support.
486cvtsd2si	%xmm1, %rax
487// CHECK: cvtsd2siq	%xmm1, %rax
488// CHECK: encoding: [0xf2,0x48,0x0f,0x2d,0xc1]
489cvtsd2si	%xmm1, %eax
490// CHECK: cvtsd2sil	%xmm1, %eax
491// CHECK: encoding: [0xf2,0x0f,0x2d,0xc1]
492
493cvtsd2siq %xmm0, %rax // CHECK: cvtsd2siq	%xmm0, %rax
494cvtsd2sil %xmm0, %eax // CHECK: cvtsd2sil	%xmm0, %eax
495cvtsd2si %xmm0, %rax  // CHECK: cvtsd2siq	%xmm0, %rax
496
497
498cvttpd2dq %xmm1, %xmm0  // CHECK: cvttpd2dq %xmm1, %xmm0
499cvttpd2dq (%rax), %xmm0 // CHECK: cvttpd2dq (%rax), %xmm0
500
501cvttps2dq %xmm1, %xmm0  // CHECK: cvttps2dq %xmm1, %xmm0
502cvttps2dq (%rax), %xmm0 // CHECK: cvttps2dq (%rax), %xmm0
503
504// rdar://8456376 - llvm-mc rejects 'roundss'
505roundss $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x0a,0xc0,0x0e]
506roundps $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x08,0xc0,0x0e]
507roundsd $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x0b,0xc0,0x0e]
508roundpd $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)
512leal	8(%eax), %esi
513// CHECK: leal	8(%eax), %esi
514// CHECK: encoding: [0x67,0x8d,0x70,0x08]
515leaq	8(%eax), %rsi
516// CHECK: leaq	8(%eax), %rsi
517// CHECK: encoding: [0x67,0x48,0x8d,0x70,0x08]
518leaq	8(%rax), %rsi
519// CHECK: leaq	8(%rax), %rsi
520// CHECK: encoding: [0x48,0x8d,0x70,0x08]
521
522
523cvttpd2dq	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'
528movmskpd	%xmm6, %rax
529// CHECK: movmskpd	%xmm6, %rax
530// CHECK: encoding: [0x66,0x48,0x0f,0x50,0xc6]
531movmskpd	%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.
536fdivrp %st(0), %st(1) // CHECK: encoding: [0xde,0xf9]
537fdivrp %st(1), %st(0) // CHECK: encoding: [0xde,0xf9]
538
539fsubrp %ST(0), %ST(1) // CHECK: encoding: [0xde,0xe9]
540fsubrp %ST(1), %ST(0) // CHECK: encoding: [0xde,0xe9]
541
542// also PR8861
543fdivp %st(0), %st(1) // CHECK: encoding: [0xde,0xf1]
544fdivp %st(1), %st(0) // CHECK: encoding: [0xde,0xf1]
545
546
547movl	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
552movb	$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
557movw	$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
562movl	$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
567movq	$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]
574addq $-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
580movq _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
585movq _foo@GOTPCREL(%rip), %r14
586
587
588// CHECK: movq	(%r13,%rax,8), %r13
589// CHECK:  encoding: [0x4d,0x8b,0x6c,0xc5,0x00]
590movq 0x00(%r13,%rax,8),%r13
591
592// CHECK: testq	%rax, %rbx
593// CHECK:  encoding: [0x48,0x85,0xd8]
594testq %rax, %rbx
595
596// CHECK: cmpq	%rbx, %r14
597// CHECK:   encoding: [0x49,0x39,0xde]
598        cmpq %rbx, %r14
599
600// rdar://7947167
601
602movsq
603// CHECK: movsq
604// CHECK:   encoding: [0x48,0xa5]
605
606movsl
607// CHECK: movsd
608// CHECK:   encoding: [0xa5]
609
610stosq
611// CHECK: stosq
612// CHECK:   encoding: [0x48,0xab]
613stosl
614// CHECK: stosl
615// CHECK:   encoding: [0xab]
616
617
618// Not moffset forms of moves, they are x86-32 only! rdar://7947184
619movb	0, %al    // CHECK: movb 0, %al # encoding: [0x8a,0x04,0x25,0x00,0x00,0x00,0x00]
620movw	0, %ax    // CHECK: movw 0, %ax # encoding: [0x66,0x8b,0x04,0x25,0x00,0x00,0x00,0x00]
621movl	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
675btl	$1, 0 // CHECK: btl $1, 0 # encoding: [0x0f,0xba,0x24,0x25,0x00,0x00,0x00,0x00,0x01]
676bt	$1, 0 // CHECK: btl $1, 0 # encoding: [0x0f,0xba,0x24,0x25,0x00,0x00,0x00,0x00,0x01]
677
678// rdar://8017515
679btq $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]
694movsx %al, %ax
695
696// CHECK: movsbl	%al, %eax
697// CHECK: encoding: [0x0f,0xbe,0xc0]
698movsx %al, %eax
699
700// CHECK: movswl	%ax, %eax
701// CHECK: encoding: [0x0f,0xbf,0xc0]
702movsx %ax, %eax
703
704// CHECK: movsbq	%bl, %rax
705// CHECK: encoding: [0x48,0x0f,0xbe,0xc3]
706movsx %bl, %rax
707
708// CHECK: movswq %cx, %rax
709// CHECK: encoding: [0x48,0x0f,0xbf,0xc1]
710movsx %cx, %rax
711
712// CHECK: movslq	%edi, %rax
713// CHECK: encoding: [0x48,0x63,0xc7]
714movsx %edi, %rax
715
716// CHECK: movzbw	%al, %ax
717// CHECK: encoding: [0x66,0x0f,0xb6,0xc0]
718movzx %al, %ax
719
720// CHECK: movzbl	%al, %eax
721// CHECK: encoding: [0x0f,0xb6,0xc0]
722movzx %al, %eax
723
724// CHECK: movzwl	%ax, %eax
725// CHECK: encoding: [0x0f,0xb7,0xc0]
726movzx %ax, %eax
727
728// CHECK: movzbq	%bl, %rax
729// CHECK: encoding: [0x48,0x0f,0xb6,0xc3]
730movzx %bl, %rax
731
732// CHECK: movzwq	%cx, %rax
733// CHECK: encoding: [0x48,0x0f,0xb7,0xc1]
734movzx %cx, %rax
735
736// CHECK: movsbw	(%rax), %ax
737// CHECK: encoding: [0x66,0x0f,0xbe,0x00]
738movsx (%rax), %ax
739
740// CHECK: movzbw	(%rax), %ax
741// CHECK: encoding: [0x66,0x0f,0xb6,0x00]
742movzx (%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
759L1:
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
768xchgl   368(%rax),%ecx
769// CHECK: xchgl	%ecx, 368(%rax)
770xchgl   %ecx, 368(%rax)
771// CHECK: xchgl	%ecx, 368(%rax)
772
773// rdar://8407548
774xchg	0xdeadbeef(%rbx,%rcx,8),%bl
775// CHECK: xchgb	%bl, 3735928559(%rbx,%rcx,8)
776
777
778
779// PR7254
780lock  incl 1(%rsp)
781// CHECK: lock
782// CHECK: incl 1(%rsp)
783
784// rdar://8741045
785lock/incl 1(%rsp)
786// CHECK: lock
787// CHECK: incl 1(%rsp)
788
789// rdar://8033482
790rep movsl
791// CHECK: rep
792// CHECK: encoding: [0xf3]
793// CHECK: movsd
794// CHECK: encoding: [0xa5]
795
796
797// rdar://8403974
798iret
799// CHECK: iretl
800// CHECK: encoding: [0xcf]
801iretw
802// CHECK: iretw
803// CHECK: encoding: [0x66,0xcf]
804iretl
805// CHECK: iretl
806// CHECK: encoding: [0xcf]
807iretq
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
821lretq  // CHECK: lretq # encoding: [0x48,0xcb]
822lretl  // CHECK: lretl # encoding: [0xcb]
823lret   // CHECK: lretl # encoding: [0xcb]
824
825// rdar://8403907
826sysret
827// CHECK: sysretl
828// CHECK: encoding: [0x0f,0x07]
829sysretl
830// CHECK: sysretl
831// CHECK: encoding: [0x0f,0x07]
832sysretq
833// CHECK: sysretq
834// CHECK: encoding: [0x48,0x0f,0x07]
835
836// rdar://8407242
837push %fs
838// CHECK: pushq	%fs
839// CHECK: encoding: [0x0f,0xa0]
840push %gs
841// CHECK: pushq	%gs
842// CHECK: encoding: [0x0f,0xa8]
843
844pushw %fs
845// CHECK: pushw	%fs
846// CHECK: encoding: [0x66,0x0f,0xa0]
847pushw %gs
848// CHECK: pushw	%gs
849// CHECK: encoding: [0x66,0x0f,0xa8]
850
851
852pop %fs
853// CHECK: popq	%fs
854// CHECK: encoding: [0x0f,0xa1]
855pop %gs
856// CHECK: popq	%gs
857// CHECK: encoding: [0x0f,0xa9]
858
859popw %fs
860// CHECK: popw	%fs
861// CHECK: encoding: [0x66,0x0f,0xa1]
862popw %gs
863// CHECK: popw	%gs
864// CHECK: encoding: [0x66,0x0f,0xa9]
865
866// rdar://8438816
867fildq -8(%rsp)
868fildll -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
883mov %dr6, %rax
884mov %db6, %rax
885// CHECK: movq	%dr6, %rax
886// CHECK: movq	%dr6, %rax
887
888
889// INC/DEC encodings.
890incb %al  // CHECK:	incb	%al # encoding: [0xfe,0xc0]
891incw %ax  // CHECK:	incw	%ax # encoding: [0x66,0xff,0xc0]
892incl %eax // CHECK:	incl	%eax # encoding: [0xff,0xc0]
893decb %al  // CHECK:	decb	%al # encoding: [0xfe,0xc8]
894decw %ax  // CHECK:	decw	%ax # encoding: [0x66,0xff,0xc8]
895decl %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
932mov (%rsi), %gs  // CHECK: movl	(%rsi), %gs # encoding: [0x8e,0x2e]
933mov %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
955movd	%rax, %mm5 // CHECK: movd %rax, %mm5 # encoding: [0x48,0x0f,0x6e,0xe8]
956movd	%mm5, %rbx // CHECK: movd %mm5, %rbx # encoding: [0x48,0x0f,0x7e,0xeb]
957movq	%rax, %mm5 // CHECK: movd %rax, %mm5 # encoding: [0x48,0x0f,0x6e,0xe8]
958movq	%mm5, %rbx // CHECK: movd %mm5, %rbx # encoding: [0x48,0x0f,0x7e,0xeb]
959
960rex64 // CHECK: rex64 # encoding: [0x48]
961data16 // CHECK: data16 # encoding: [0x66]
962
963// PR8855
964movq 18446744073709551615,%rbx   // CHECK: movq	-1, %rbx
965
966// PR8946
967movdqu	%xmm0, %xmm1 // CHECK: movdqu	%xmm0, %xmm1 # encoding: [0xf3,0x0f,0x6f,0xc8]
968
969// PR8935
970xgetbv // CHECK: xgetbv # encoding: [0x0f,0x01,0xd0]
971xsetbv // 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: movsd # encoding: [0xa5]
1031// CHECK: movsd
1032// CHECK: movsd
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
1131