1# RUN: llvm-mc --disassemble %s -triple=x86_64 | FileCheck %s
2
3# CHECK: lock
4# CHECK-NEXT:	orl	$16, %fs:776
50xf0 0x64 0x83 0x0c 0x25 0x08 0x03 0x00 0x00 0x10
6
7# CHECK: movq	%fs:768, %rdi
80x64 0x48 0x8b 0x3c 0x25 0x00 0x03 0x00 0x00
9
10# CHECK: rep
11# CHECK-NEXT:		stosq %rax, %es:(%rdi)
120xf3 0x48 0xab
13
14# CHECK: rep
15# CHECK-NEXT:		stosq %rax, %es:(%edi)
160xf3 0x67 0x48 0xab
17
18# CHECK: movl 32(%rbp), %eax
190x8b 0x45 0x20
20
21# CHECK: movl %es:32(%rbp), %eax
220x26 0x8b 0x45 0x20
23
24# CHECK: movl %es:32(%rbp), %eax
250x2e 0x26 0x8b 0x45 0x20
26
27# Test that multiple prefixes stack.
28#    (todo- the correct disassembly is actually more like "es movl %cs:32(%rbp), %eax"
29#    but we don't support that)
30# CHECK: movl %cs:32(%rbp), %eax
310x26 0x2e 0x8b 0x45 0x20
32
33# Test that 0xf3 as part of the opcode works.
34# CHECK: cvtdq2pd	(%rax), %xmm0
350xf3 0x0f 0xe6 0x00
36
37# CHECK: pause
380xf3 0x90
39
40# CHECK: nop
410x90
42
43# CHECK: 		lock
44# CHECK-NEXT:	nop
450xf0 0x90
46
47# Test that immediate is printed correctly within opsize prefix
48# CHECK: addw    $-12, %ax
490x66,0x83,0xc0,0xf4
50
51# Test that multiple redundant prefixes work (redundant, but valid x86).
52# CHECK: rep
53# CHECK-NEXT: rep
54# CHECK-NEXT: stosq
550xf3 0xf3 0x48 0xab
56
57
58# Test that we can disassembler control registers above CR8
59# CHECK: movq %cr15, %rax
600x44 0x0f 0x20 0xf8
61# CHECK: movq %dr15, %rax
620x44 0x0f 0x21 0xf8
63
64# Test that MMX ignore REX.R and REX.B.
65# CHECK: movq %mm0, %mm1
660x46 0x0f 0x7f 0xc1
67
68# Test that a prefix on it's own works. It's debatable as to if this is
69# something that is considered valid, but however as LLVM's own disassembler
70# has decided to disassemble prefixes as being separate opcodes, it therefore
71# should be capable of re-consuming it's own output.
72# CHECK: rep
730xf3
74# ***IMPORTANT ^-- this must be at the end of the file to be a valid test ***
75