correct suffix matching to search for s/l/t suffixes on
[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
6 // Suffix inference:
7
8 // CHECK: addl $0, %eax
9         add $0, %eax
10 // CHECK: addb $255, %al
11         add $0xFF, %al
12 // CHECK: orq %rax, %rdx
13         or %rax, %rdx
14 // CHECK: shlq $3, %rax
15         shl $3, %rax
16
17
18 // CHECK: subb %al, %al
19         subb %al, %al
20
21 // CHECK: addl $24, %eax
22         addl $24, %eax
23
24 // CHECK: movl %eax, 10(%ebp)
25         movl %eax, 10(%ebp)
26 // CHECK: movl %eax, 10(%ebp,%ebx)
27         movl %eax, 10(%ebp, %ebx)
28 // CHECK: movl %eax, 10(%ebp,%ebx,4)
29         movl %eax, 10(%ebp, %ebx, 4)
30 // CHECK: movl %eax, 10(,%ebx,4)
31         movl %eax, 10(, %ebx, 4)
32
33 // CHECK: movl 0, %eax        
34         movl 0, %eax
35 // CHECK: movl $0, %eax        
36         movl $0, %eax
37         
38 // CHECK: ret
39         ret
40         
41 // FIXME: Check that this matches SUB32ri8
42 // CHECK: subl $1, %eax
43         subl $1, %eax
44         
45 // FIXME: Check that this matches SUB32ri8
46 // CHECK: subl $-1, %eax
47         subl $-1, %eax
48         
49 // FIXME: Check that this matches SUB32ri
50 // CHECK: subl $256, %eax
51         subl $256, %eax
52
53 // FIXME: Check that this matches XOR64ri8
54 // CHECK: xorq $1, %rax
55         xorq $1, %rax
56         
57 // FIXME: Check that this matches XOR64ri32
58 // CHECK: xorq $256, %rax
59         xorq $256, %rax
60
61 // FIXME: Check that this matches SUB8rr
62 // CHECK: subb %al, %bl
63         subb %al, %bl
64
65 // FIXME: Check that this matches SUB16rr
66 // CHECK: subw %ax, %bx
67         subw %ax, %bx
68         
69 // FIXME: Check that this matches SUB32rr
70 // CHECK: subl %eax, %ebx
71         subl %eax, %ebx
72         
73 // FIXME: Check that this matches the correct instruction.
74 // CHECK: callq *%rax
75         call *%rax
76
77 // FIXME: Check that this matches the correct instruction.
78 // CHECK: shldl %cl, %eax, %ebx
79         shldl %cl, %eax, %ebx
80
81 // CHECK: shll $2, %eax
82         shll $2, %eax
83
84 // CHECK: shll $2, %eax
85         sall $2, %eax
86
87 // CHECK: rep
88 // CHECK: insb
89         rep;insb
90
91 // CHECK: rep
92 // CHECK: outsb
93         rep;outsb
94
95 // CHECK: rep
96 // CHECK: movsb
97         rep;movsb
98
99
100 // rdar://8470918
101 smovb // CHECK: movsb
102 smovw // CHECK: movsw
103 smovl // CHECK: movsl
104 smovq // CHECK: movsq
105
106 // rdar://8456361
107 // CHECK: rep
108 // CHECK: movsl
109         rep movsd
110
111 // CHECK: rep
112 // CHECK: lodsb
113         rep;lodsb
114
115 // CHECK: rep
116 // CHECK: stosb
117         rep;stosb
118
119 // NOTE: repz and repe have the same opcode as rep
120 // CHECK: rep
121 // CHECK: cmpsb
122         repz;cmpsb
123
124 // NOTE: repnz has the same opcode as repne
125 // CHECK: repne
126 // CHECK: cmpsb
127         repnz;cmpsb
128
129 // NOTE: repe and repz have the same opcode as rep
130 // CHECK: rep
131 // CHECK: scasb
132         repe;scasb
133
134 // CHECK: repne
135 // CHECK: scasb
136         repne;scasb
137
138 // CHECK: lock
139 // CHECK: cmpxchgb %al, (%ebx)
140         lock;cmpxchgb %al, 0(%ebx)
141
142 // CHECK: cs
143 // CHECK: movb (%eax), %al
144         cs;movb 0(%eax), %al
145
146 // CHECK: ss
147 // CHECK: movb (%eax), %al
148         ss;movb 0(%eax), %al
149
150 // CHECK: ds
151 // CHECK: movb (%eax), %al
152         ds;movb 0(%eax), %al
153
154 // CHECK: es
155 // CHECK: movb (%eax), %al
156         es;movb 0(%eax), %al
157
158 // CHECK: fs
159 // CHECK: movb (%eax), %al
160         fs;movb 0(%eax), %al
161
162 // CHECK: gs
163 // CHECK: movb (%eax), %al
164         gs;movb 0(%eax), %al
165
166 // CHECK: fadd %st(0)
167 // CHECK: fadd %st(1)
168 // CHECK: fadd %st(7)
169
170 fadd %st(0)
171 fadd %st(1)
172 fadd %st(7)
173
174 // CHECK: leal 0, %eax
175         leal 0, %eax
176
177 // rdar://7986634 - Insensitivity on opcodes.
178 // CHECK: int3
179 INT3
180
181
182 // Allow scale factor without index register.
183 // CHECK: movaps        %xmm3, (%esi)
184 // CHECK-STDERR: warning: scale factor without index register is ignored
185 movaps %xmm3, (%esi, 2)
186
187 // CHECK: imull $12, %eax, %eax
188 imul $12, %eax
189
190 // CHECK: imull %ecx, %eax
191 imull %ecx, %eax
192
193
194 // rdar://8208481
195 // CHECK: outb  %al, $161
196 outb    %al, $161
197 // CHECK: outw  %ax, $128
198 outw    %ax, $128
199 // CHECK: inb   $161, %al
200 inb     $161, %al
201
202 // rdar://8017621
203 // CHECK: pushq $1
204 push $1
205
206 // rdar://8017530
207 // CHECK: sldtw 4
208 sldt    4
209
210 // rdar://8208499
211 // CHECK: cmovnew       %bx, %ax
212 cmovnz %bx, %ax
213 // CHECK: cmovneq       %rbx, %rax
214 cmovnzq %rbx, %rax
215
216
217 // rdar://8407928
218 // CHECK: inb   $127, %al
219 // CHECK: inw   %dx, %ax
220 // CHECK: outb  %al, $127
221 // CHECK: outw  %ax, %dx
222 // CHECK: inl   %dx, %eax
223 inb     $0x7f
224 inw     %dx
225 outb    $0x7f
226 outw    %dx
227 inl     %dx
228
229
230 // PR8114
231 // CHECK: outb  %al, %dx
232 // CHECK: outw  %ax, %dx
233 // CHECK: outl  %eax, %dx
234
235 out %al, (%dx)
236 out %ax, (%dx)
237 outl %eax, (%dx)
238
239
240 // rdar://8431422
241
242 // CHECK: fxch  %st(1)
243 // CHECK: fucom %st(1)
244 // CHECK: fucomp        %st(1)
245 // CHECK: faddp %st(1)
246 // CHECK: faddp %st(0)
247 // CHECK: fsubp %st(1)
248 // CHECK: fsubrp        %st(1)
249 // CHECK: fmulp %st(1)
250 // CHECK: fdivp %st(1)
251 // CHECK: fdivrp        %st(1)
252
253 fxch
254 fucom
255 fucomp
256 faddp
257 faddp %st
258 fsubp
259 fsubrp
260 fmulp
261 fdivp
262 fdivrp
263
264 // CHECK: fcomi %st(1), %st(0)
265 // CHECK: fcomi %st(2), %st(0)
266 // CHECK: fucomi        %st(1), %st(0)
267 // CHECK: fucomi        %st(2), %st(0)
268 // CHECK: fucomi        %st(2), %st(0)
269
270 fcomi
271 fcomi   %st(2)
272 fucomi
273 fucomi  %st(2)
274 fucomi  %st(2), %st
275
276 // CHECK: fnstsw %ax
277 // CHECK: fnstsw %ax
278 // CHECK: fnstsw %ax
279 // CHECK: fnstsw %ax
280
281 fnstsw
282 fnstsw %ax
283 fnstsw %eax
284 fnstsw %al
285
286 // rdar://8431880
287 // CHECK: rclb  $1, %bl
288 // CHECK: rcll  $1, 3735928559(%ebx,%ecx,8)
289 // CHECK: rcrl  $1, %ecx
290 // CHECK: rcrl  $1, 305419896
291
292 rcl     %bl
293 rcll    0xdeadbeef(%ebx,%ecx,8)
294 rcr     %ecx
295 rcrl    0x12345678
296
297 // rdar://8418316
298 // CHECK: shldw $1, %bx, %bx
299 // CHECK: shldw $1, %bx, %bx
300 // CHECK: shrdw $1, %bx, %bx
301 // CHECK: shrdw $1, %bx, %bx
302
303 shld    %bx,%bx
304 shld    $1, %bx,%bx
305 shrd    %bx,%bx
306 shrd    $1, %bx,%bx
307
308 // CHECK: sldtl %ecx
309 // CHECK: encoding: [0x0f,0x00,0xc1]
310 // CHECK: sldtw %cx
311 // CHECK: encoding: [0x66,0x0f,0x00,0xc1]
312
313 sldt    %ecx
314 sldt    %cx
315
316 // CHECK: lcalll        *3135175374 
317 // CHECK: ljmpl *3135175374
318 lcall   *0xbadeface
319 ljmp    *0xbadeface
320
321
322 // rdar://8444631
323 // CHECK: enter $31438, $0
324 // CHECK: encoding: [0xc8,0xce,0x7a,0x00]
325 // CHECK: enter $31438, $1
326 // CHECK: encoding: [0xc8,0xce,0x7a,0x01]
327 // CHECK: enter $31438, $127
328 // CHECK: encoding: [0xc8,0xce,0x7a,0x7f]
329 enter $0x7ace,$0
330 enter $0x7ace,$1
331 enter $0x7ace,$0x7f
332
333
334 // rdar://8456364
335 // CHECK: movw  %cs, %ax
336 mov %CS, %ax
337
338 // rdar://8456391
339 fcmovb %st(1), %st(0)   // CHECK: fcmovb        %st(1), %st(0)
340 fcmove %st(1), %st(0)   // CHECK: fcmove        %st(1), %st(0)
341 fcmovbe %st(1), %st(0)  // CHECK: fcmovbe       %st(1), %st(0)
342 fcmovu %st(1), %st(0)   // CHECK: fcmovu         %st(1), %st(0)
343
344 fcmovnb %st(1), %st(0)  // CHECK: fcmovnb       %st(1), %st(0)
345 fcmovne %st(1), %st(0)  // CHECK: fcmovne       %st(1), %st(0)
346 fcmovnbe %st(1), %st(0) // CHECK: fcmovnbe      %st(1), %st(0)
347 fcmovnu %st(1), %st(0)  // CHECK: fcmovnu       %st(1), %st(0)
348
349 fcmovnae %st(1), %st(0) // CHECK: fcmovb        %st(1), %st(0)
350 fcmovna %st(1), %st(0)  // CHECK: fcmovbe       %st(1), %st(0)
351
352 fcmovae %st(1), %st(0)  // CHECK: fcmovnb       %st(1), %st(0)
353 fcmova %st(1), %st(0)   // CHECK: fcmovnbe      %st(1), %st(0)
354
355 // rdar://8456417
356 .byte 88 + 1 & 15  // CHECK: .byte      9
357
358 // rdar://8456412
359 mov %rdx, %cr0
360 // CHECK: movq  %rdx, %cr0
361 // CHECK: encoding: [0x0f,0x22,0xc2]
362 mov %rdx, %cr4
363 // CHECK: movq  %rdx, %cr4
364 // CHECK: encoding: [0x0f,0x22,0xe2]
365 mov %rdx, %cr8
366 // CHECK: movq  %rdx, %cr8
367 // CHECK: encoding: [0x44,0x0f,0x22,0xc2]
368 mov %rdx, %cr15
369 // CHECK: movq  %rdx, %cr15
370 // CHECK: encoding: [0x44,0x0f,0x22,0xfa]
371
372 // rdar://8456371 - Handle commutable instructions written backward.
373 // CHECK:       faddp   %st(1)
374 // CHECK:       fmulp   %st(2)
375 faddp %st, %st(1)
376 fmulp %st, %st(2)
377
378 // rdar://8468087 - Encode these accurately, they are not synonyms.
379 // CHECK: fmul  %st(0), %st(1)
380 // CHECK: encoding: [0xdc,0xc9]
381 // CHECK: fmul  %st(1)
382 // CHECK: encoding: [0xd8,0xc9]
383 fmul %st, %st(1)
384 fmul %st(1), %st
385
386 // CHECK: fadd  %st(0), %st(1)
387 // CHECK: encoding: [0xdc,0xc1]
388 // CHECK: fadd  %st(1)
389 // CHECK: encoding: [0xd8,0xc1]
390 fadd %st, %st(1)
391 fadd %st(1), %st
392
393
394 // rdar://8416805
395 // CHECK: xorb  %al, %al
396 // CHECK: encoding: [0x30,0xc0]
397 // CHECK: xorw  %di, %di
398 // CHECK: encoding: [0x66,0x31,0xff]
399 // CHECK: xorl  %esi, %esi
400 // CHECK: encoding: [0x31,0xf6]
401 // CHECK: xorq  %rsi, %rsi
402 // CHECK: encoding: [0x48,0x31,0xf6]
403 clrb    %al
404 clr    %di
405 clr    %esi
406 clr    %rsi
407
408 // rdar://8456378
409 cltq  // CHECK: cltq
410 cdqe  // CHECK: cltq
411 cwde  // CHECK: cwtl
412 cwtl  // CHECK: cwtl
413
414 // rdar://8416805
415 cbw   // CHECK: cbtw
416 cwd   // CHECK: cwtd
417 cdq   // CHECK: cltd
418
419 // rdar://8456378 and PR7557 - fstsw
420 fstsw %ax
421 // CHECK: wait
422 // CHECK: fnstsw %ax
423 fstsw (%rax)
424 // CHECK: wait
425 // CHECK: fnstsw (%rax)
426
427 // PR8259
428 fstcw (%rsp)
429 // CHECK: wait
430 // CHECK: fnstcw (%rsp)
431
432 // PR8259
433 fstcw (%rsp)
434 // CHECK: wait
435 // CHECK: fnstcw (%rsp)
436
437 // PR8258
438 finit
439 // CHECK: wait
440 // CHECK: fninit
441
442 fsave   32493
443 // CHECK: wait
444 // CHECK: fnsave 32493
445
446
447 // rdar://8456382 - cvtsd2si support.
448 cvtsd2si        %xmm1, %rax
449 // CHECK: cvtsd2siq     %xmm1, %rax
450 // CHECK: encoding: [0xf2,0x48,0x0f,0x2d,0xc1]
451 cvtsd2si        %xmm1, %eax
452 // CHECK: cvtsd2sil     %xmm1, %eax
453 // CHECK: encoding: [0xf2,0x0f,0x2d,0xc1]
454
455 cvtsd2siq %xmm0, %rax // CHECK: cvtsd2siq       %xmm0, %rax
456 cvtsd2sil %xmm0, %eax // CHECK: cvtsd2sil       %xmm0, %eax
457 cvtsd2si %xmm0, %rax  // CHECK: cvtsd2siq       %xmm0, %rax
458
459
460 cvttpd2dq %xmm1, %xmm0  // CHECK: cvttpd2dq %xmm1, %xmm0
461 cvttpd2dq (%rax), %xmm0 // CHECK: cvttpd2dq (%rax), %xmm0
462
463 cvttps2dq %xmm1, %xmm0  // CHECK: cvttps2dq %xmm1, %xmm0
464 cvttps2dq (%rax), %xmm0 // CHECK: cvttps2dq (%rax), %xmm0
465
466 // rdar://8456376 - llvm-mc rejects 'roundss'
467 roundss $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x0a,0xc0,0x0e]
468 roundps $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x08,0xc0,0x0e]
469 roundsd $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x0b,0xc0,0x0e]
470 roundpd $0xE, %xmm0, %xmm0 // CHECK: encoding: [0x66,0x0f,0x3a,0x09,0xc0,0x0e]
471
472
473 // rdar://8482675 - 32-bit mem operand support in 64-bit mode (0x67 prefix)
474 leal    8(%eax), %esi
475 // CHECK: leal  8(%eax), %esi
476 // CHECK: encoding: [0x67,0x8d,0x70,0x08]
477 leaq    8(%eax), %rsi
478 // CHECK: leaq  8(%eax), %rsi
479 // CHECK: encoding: [0x67,0x48,0x8d,0x70,0x08]
480 leaq    8(%rax), %rsi
481 // CHECK: leaq  8(%rax), %rsi
482 // CHECK: encoding: [0x48,0x8d,0x70,0x08]
483
484
485 cvttpd2dq       0xdeadbeef(%ebx,%ecx,8),%xmm5
486 // CHECK: cvttpd2dq     3735928559(%ebx,%ecx,8), %xmm5
487 // CHECK: encoding: [0x67,0x66,0x0f,0xe6,0xac,0xcb,0xef,0xbe,0xad,0xde]
488
489 // rdar://8490728 - llvm-mc rejects 'movmskpd'
490 movmskpd        %xmm6, %rax
491 // CHECK: movmskpd      %xmm6, %rax
492 // CHECK: encoding: [0x66,0x48,0x0f,0x50,0xc6]
493 movmskpd        %xmm6, %eax
494 // CHECK: movmskpd      %xmm6, %eax
495 // CHECK: encoding: [0x66,0x0f,0x50,0xc6]
496
497 // rdar://8491845 - Gas supports commuted forms of non-commutable instructions.
498 fdivrp %st(0), %st(1) // CHECK: encoding: [0xde,0xf9]
499 fdivrp %st(1), %st(0) // CHECK: encoding: [0xde,0xf9]
500
501 fsubrp %ST(0), %ST(1) // CHECK: encoding: [0xde,0xe9]
502 fsubrp %ST(1), %ST(0) // CHECK: encoding: [0xde,0xe9]
503
504
505 movl    foo(%rip), %eax
506 // CHECK: movl  foo(%rip), %eax
507 // CHECK: encoding: [0x8b,0x05,A,A,A,A]
508 // CHECK: fixup A - offset: 2, value: foo-4, kind: reloc_riprel_4byte
509
510 movb    $12, foo(%rip)
511 // CHECK: movb  $12, foo(%rip)
512 // CHECK: encoding: [0xc6,0x05,A,A,A,A,0x0c]
513 // CHECK:    fixup A - offset: 2, value: foo-5, kind: reloc_riprel_4byte
514
515 movw    $12, foo(%rip)
516 // CHECK: movw  $12, foo(%rip)
517 // CHECK: encoding: [0x66,0xc7,0x05,A,A,A,A,0x0c,0x00]
518 // CHECK:    fixup A - offset: 3, value: foo-6, kind: reloc_riprel_4byte
519
520 movl    $12, foo(%rip)
521 // CHECK: movl  $12, foo(%rip)
522 // CHECK: encoding: [0xc7,0x05,A,A,A,A,0x0c,0x00,0x00,0x00]
523 // CHECK:    fixup A - offset: 2, value: foo-8, kind: reloc_riprel_4byte
524
525 movq    $12, foo(%rip)
526 // CHECK:  movq $12, foo(%rip)
527 // CHECK: encoding: [0x48,0xc7,0x05,A,A,A,A,0x0c,0x00,0x00,0x00]
528 // CHECK:    fixup A - offset: 3, value: foo-8, kind: reloc_riprel_4byte
529
530 // CHECK: addq  $-424, %rax
531 // CHECK: encoding: [0x48,0x05,0x58,0xfe,0xff,0xff]
532 addq $-424, %rax
533
534
535 // CHECK: movq  _foo@GOTPCREL(%rip), %rax
536 // CHECK:  encoding: [0x48,0x8b,0x05,A,A,A,A]
537 // CHECK:  fixup A - offset: 3, value: _foo@GOTPCREL-4, kind: reloc_riprel_4byte_movq_load
538 movq _foo@GOTPCREL(%rip), %rax
539
540 // CHECK: movq  _foo@GOTPCREL(%rip), %r14
541 // CHECK:  encoding: [0x4c,0x8b,0x35,A,A,A,A]
542 // CHECK:  fixup A - offset: 3, value: _foo@GOTPCREL-4, kind: reloc_riprel_4byte_movq_load
543 movq _foo@GOTPCREL(%rip), %r14
544
545
546 // CHECK: movq  (%r13,%rax,8), %r13
547 // CHECK:  encoding: [0x4d,0x8b,0x6c,0xc5,0x00]
548 movq 0x00(%r13,%rax,8),%r13
549
550 // CHECK: testq %rax, %rbx
551 // CHECK:  encoding: [0x48,0x85,0xd8]
552 testq %rax, %rbx
553
554 // CHECK: cmpq  %rbx, %r14
555 // CHECK:   encoding: [0x49,0x39,0xde]
556         cmpq %rbx, %r14
557
558 // rdar://7947167
559
560 movsq
561 // CHECK: movsq
562 // CHECK:   encoding: [0x48,0xa5]
563
564 movsl
565 // CHECK: movsl
566 // CHECK:   encoding: [0xa5]
567
568 stosq
569 // CHECK: stosq
570 // CHECK:   encoding: [0x48,0xab]
571 stosl
572 // CHECK: stosl
573 // CHECK:   encoding: [0xab]
574
575
576 // Not moffset forms of moves, they are x86-32 only! rdar://7947184
577 movb    0, %al    // CHECK: movb 0, %al # encoding: [0x8a,0x04,0x25,0x00,0x00,0x00,0x00]
578 movw    0, %ax    // CHECK: movw 0, %ax # encoding: [0x66,0x8b,0x04,0x25,0x00,0x00,0x00,0x00]
579 movl    0, %eax   // CHECK: movl 0, %eax # encoding: [0x8b,0x04,0x25,0x00,0x00,0x00,0x00]
580
581 // CHECK: pushfq        # encoding: [0x9c]
582         pushf
583 // CHECK: pushfq        # encoding: [0x9c]
584         pushfq
585 // CHECK: popfq         # encoding: [0x9d]
586         popf
587 // CHECK: popfq         # encoding: [0x9d]
588         popfq
589
590 // CHECK: movabsq $-281474976710654, %rax
591 // CHECK: encoding: [0x48,0xb8,0x02,0x00,0x00,0x00,0x00,0x00,0xff,0xff]
592         movabsq $0xFFFF000000000002, %rax
593
594 // CHECK: movabsq $-281474976710654, %rax
595 // CHECK: encoding: [0x48,0xb8,0x02,0x00,0x00,0x00,0x00,0x00,0xff,0xff]
596         movq $0xFFFF000000000002, %rax
597
598 // CHECK: movq $-65536, %rax
599 // CHECK: encoding: [0x48,0xc7,0xc0,0x00,0x00,0xff,0xff]
600         movq $0xFFFFFFFFFFFF0000, %rax
601
602 // CHECK: movq $-256, %rax
603 // CHECK: encoding: [0x48,0xc7,0xc0,0x00,0xff,0xff,0xff]
604         movq $0xFFFFFFFFFFFFFF00, %rax
605
606 // CHECK: movq $10, %rax
607 // CHECK: encoding: [0x48,0xc7,0xc0,0x0a,0x00,0x00,0x00]
608         movq $10, %rax
609
610 // rdar://8014869
611 //
612 // CHECK: ret
613 // CHECK:  encoding: [0xc3]
614         retq
615
616 // CHECK: sete %al
617 // CHECK: encoding: [0x0f,0x94,0xc0]
618         setz %al
619
620 // CHECK: setne %al
621 // CHECK: encoding: [0x0f,0x95,0xc0]
622         setnz %al
623
624 // CHECK: je 0
625 // CHECK: encoding: [0x74,A]
626         jz 0
627
628 // CHECK: jne
629 // CHECK: encoding: [0x75,A]
630         jnz 0
631
632 // rdar://8017515
633 btq $0x01,%rdx
634 // CHECK: btq   $1, %rdx
635 // CHECK:  encoding: [0x48,0x0f,0xba,0xe2,0x01]
636
637 //rdar://8017633
638 // CHECK: movzbl        %al, %esi
639 // CHECK:  encoding: [0x0f,0xb6,0xf0]
640         movzx %al, %esi
641
642 // CHECK: movzbq        %al, %rsi
643 // CHECK:  encoding: [0x48,0x0f,0xb6,0xf0]
644         movzx %al, %rsi
645
646 // CHECK: movsbw        %al, %ax
647 // CHECK: encoding: [0x66,0x0f,0xbe,0xc0]
648 movsx %al, %ax
649
650 // CHECK: movsbl        %al, %eax
651 // CHECK: encoding: [0x0f,0xbe,0xc0]
652 movsx %al, %eax
653
654 // CHECK: movswl        %ax, %eax
655 // CHECK: encoding: [0x0f,0xbf,0xc0]
656 movsx %ax, %eax
657
658 // CHECK: movsbq        %bl, %rax
659 // CHECK: encoding: [0x48,0x0f,0xbe,0xc3]
660 movsx %bl, %rax
661
662 // CHECK: movswq %cx, %rax
663 // CHECK: encoding: [0x48,0x0f,0xbf,0xc1]
664 movsx %cx, %rax
665
666 // CHECK: movslq        %edi, %rax
667 // CHECK: encoding: [0x48,0x63,0xc7]
668 movsx %edi, %rax
669
670 // CHECK: movzbw        %al, %ax
671 // CHECK: encoding: [0x66,0x0f,0xb6,0xc0]
672 movzx %al, %ax
673
674 // CHECK: movzbl        %al, %eax
675 // CHECK: encoding: [0x0f,0xb6,0xc0]
676 movzx %al, %eax
677
678 // CHECK: movzwl        %ax, %eax
679 // CHECK: encoding: [0x0f,0xb7,0xc0]
680 movzx %ax, %eax
681
682 // CHECK: movzbq        %bl, %rax
683 // CHECK: encoding: [0x48,0x0f,0xb6,0xc3]
684 movzx %bl, %rax
685
686 // CHECK: movzwq        %cx, %rax
687 // CHECK: encoding: [0x48,0x0f,0xb7,0xc1]
688 movzx %cx, %rax
689
690 // CHECK: movsbw        (%rax), %ax
691 // CHECK: encoding: [0x66,0x0f,0xbe,0x00]
692 movsx (%rax), %ax
693
694 // CHECK: movzbw        (%rax), %ax
695 // CHECK: encoding: [0x66,0x0f,0xb6,0x00]
696 movzx (%rax), %ax
697
698
699 // rdar://7873482
700 // CHECK: [0x65,0x8b,0x04,0x25,0x7c,0x00,0x00,0x00]
701         movl    %gs:124, %eax
702
703 // CHECK: jmpq *8(%rax)
704 // CHECK:   encoding: [0xff,0x60,0x08]
705         jmp     *8(%rax)
706
707 // CHECK: btq $61, -216(%rbp)
708 // CHECK:   encoding: [0x48,0x0f,0xba,0xa5,0x28,0xff,0xff,0xff,0x3d]
709         btq     $61, -216(%rbp)
710
711
712 // rdar://8061602
713 L1:
714   jecxz L1
715 // CHECK: jecxz L1
716 // CHECK:   encoding: [0x67,0xe3,A]
717   jrcxz L1
718 // CHECK: jrcxz L1
719 // CHECK:   encoding: [0xe3,A]
720
721 // PR8061
722 xchgl   368(%rax),%ecx
723 // CHECK: xchgl %ecx, 368(%rax)
724 xchgl   %ecx, 368(%rax)
725 // CHECK: xchgl %ecx, 368(%rax)
726
727 // rdar://8407548
728 xchg    0xdeadbeef(%rbx,%rcx,8),%bl
729 // CHECK: xchgb %bl, 3735928559(%rbx,%rcx,8)
730
731
732
733 // PR7254
734 lock  incl 1(%rsp)
735 // CHECK: lock
736 // CHECK: incl 1(%rsp)
737
738 // rdar://8033482
739 rep movsl
740 // CHECK: rep
741 // CHECK: encoding: [0xf3]
742 // CHECK: movsl
743 // CHECK: encoding: [0xa5]
744
745
746 // rdar://8403974
747 iret
748 // CHECK: iretl
749 // CHECK: encoding: [0xcf]
750 iretw
751 // CHECK: iretw
752 // CHECK: encoding: [0x66,0xcf]
753 iretl
754 // CHECK: iretl
755 // CHECK: encoding: [0xcf]
756 iretq
757 // CHECK: iretq
758 // CHECK: encoding: [0x48,0xcf]
759
760 // rdar://8416805
761 // CHECK: retw  $31438
762 // CHECK:  encoding: [0x66,0xc2,0xce,0x7a]
763                 retw    $0x7ace
764
765 // CHECK: lretw $31438
766 // CHECK:  encoding: [0x66,0xca,0xce,0x7a]
767                 lretw   $0x7ace
768
769 // rdar://8403907
770 sysret
771 // CHECK: sysretl
772 // CHECK: encoding: [0x0f,0x07]
773 sysretl
774 // CHECK: sysretl
775 // CHECK: encoding: [0x0f,0x07]
776 sysretq
777 // CHECK: sysretq
778 // CHECK: encoding: [0x48,0x0f,0x07]
779
780 // rdar://8407242
781 push %fs
782 // CHECK: pushq %fs
783 // CHECK: encoding: [0x0f,0xa0]
784 push %gs
785 // CHECK: pushq %gs
786 // CHECK: encoding: [0x0f,0xa8]
787
788 pushw %fs
789 // CHECK: pushw %fs
790 // CHECK: encoding: [0x66,0x0f,0xa0]
791 pushw %gs
792 // CHECK: pushw %gs
793 // CHECK: encoding: [0x66,0x0f,0xa8]
794
795
796 pop %fs
797 // CHECK: popq  %fs
798 // CHECK: encoding: [0x0f,0xa1]
799 pop %gs
800 // CHECK: popq  %gs
801 // CHECK: encoding: [0x0f,0xa9]
802
803 popw %fs
804 // CHECK: popw  %fs
805 // CHECK: encoding: [0x66,0x0f,0xa1]
806 popw %gs
807 // CHECK: popw  %gs
808 // CHECK: encoding: [0x66,0x0f,0xa9]
809
810 // rdar://8438816
811 fildq -8(%rsp)
812 fildll -8(%rsp)
813 // CHECK: fildll        -8(%rsp)
814 // CHECK: encoding: [0xdf,0x6c,0x24,0xf8]
815 // CHECK: fildll        -8(%rsp)
816 // CHECK: encoding: [0xdf,0x6c,0x24,0xf8]
817
818 // CHECK: callq a
819         callq a
820
821 // CHECK: leaq  -40(%rbp), %r15
822         leaq    -40(%rbp), %r15
823
824
825
826 // rdar://8013734 - Alias dr6=db6
827 mov %dr6, %rax
828 mov %db6, %rax
829 // CHECK: movq  %dr6, %rax
830 // CHECK: movq  %dr6, %rax
831
832
833 // INC/DEC encodings.
834 incb %al  // CHECK:     incb    %al # encoding: [0xfe,0xc0]
835 incw %ax  // CHECK:     incw    %ax # encoding: [0x66,0xff,0xc0]
836 incl %eax // CHECK:     incl    %eax # encoding: [0xff,0xc0]
837 decb %al  // CHECK:     decb    %al # encoding: [0xfe,0xc8]
838 decw %ax  // CHECK:     decw    %ax # encoding: [0x66,0xff,0xc8]
839 decl %eax // CHECK:     decl    %eax # encoding: [0xff,0xc8]
840
841 // rdar://8416805
842 // CHECK: lgdt  4(%rax)
843 // CHECK:  encoding: [0x0f,0x01,0x50,0x04]
844                 lgdt    4(%rax)
845
846 // CHECK: lgdt  4(%rax)
847 // CHECK:  encoding: [0x0f,0x01,0x50,0x04]
848                 lgdtq   4(%rax)
849
850 // CHECK: lidt  4(%rax)
851 // CHECK:  encoding: [0x0f,0x01,0x58,0x04]
852                 lidt    4(%rax)
853
854 // CHECK: lidt  4(%rax)
855 // CHECK:  encoding: [0x0f,0x01,0x58,0x04]
856                 lidtq   4(%rax)
857
858 // CHECK: sgdt  4(%rax)
859 // CHECK:  encoding: [0x0f,0x01,0x40,0x04]
860                 sgdt    4(%rax)
861
862 // CHECK: sgdt  4(%rax)
863 // CHECK:  encoding: [0x0f,0x01,0x40,0x04]
864                 sgdtq   4(%rax)
865
866 // CHECK: sidt  4(%rax)
867 // CHECK:  encoding: [0x0f,0x01,0x48,0x04]
868                 sidt    4(%rax)
869
870 // CHECK: sidt  4(%rax)
871 // CHECK:  encoding: [0x0f,0x01,0x48,0x04]
872                 sidtq   4(%rax)