diff options
author | Richard Mitton <richard@codersnotes.com> | 2013-08-30 21:19:48 +0000 |
---|---|---|
committer | Richard Mitton <richard@codersnotes.com> | 2013-08-30 21:19:48 +0000 |
commit | d4b3168609d4a6dfb8a948d87dc61f83855ac604 (patch) | |
tree | b212bc4179cbea652c081e67870c5db6c52db541 /test | |
parent | 86d49563a65b3990d8ea7dac62d9222c1fd3b1cf (diff) | |
download | external_llvm-d4b3168609d4a6dfb8a948d87dc61f83855ac604.zip external_llvm-d4b3168609d4a6dfb8a948d87dc61f83855ac604.tar.gz external_llvm-d4b3168609d4a6dfb8a948d87dc61f83855ac604.tar.bz2 |
Fixed a bug where diassembling an instruction that had a prefix would cause LLVM to identify a 1-byte instruction, but then upon querying it for that 1-byte instruction would cause an undefined opcode.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189698 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/MC/Disassembler/X86/prefixes.txt | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/test/MC/Disassembler/X86/prefixes.txt b/test/MC/Disassembler/X86/prefixes.txt new file mode 100644 index 0000000..56596e3 --- /dev/null +++ b/test/MC/Disassembler/X86/prefixes.txt @@ -0,0 +1,59 @@ +# RUN: llvm-mc --disassemble %s -triple=x86_64 | FileCheck %s + +# CHECK: lock +# CHECK-NEXT: orl $16, %fs:776 +0xf0 0x64 0x83 0x0c 0x25 0x08 0x03 0x00 0x00 0x10 + +# CHECK: movq %fs:768, %rdi +0x64 0x48 0x8b 0x3c 0x25 0x00 0x03 0x00 0x00 + +# CHECK: rep +# CHECK-NEXT: stosq +0xf3 0x48 0xab + +# CHECK: rep +# CHECK-NEXT: stosl +0xf3 0x67 0x48 0xab + +# CHECK: movl 32(%rbp), %eax +0x8b 0x45 0x20 + +# CHECK: movl %es:32(%rbp), %eax +0x26 0x8b 0x45 0x20 + +# CHECK: movl %es:32(%rbp), %eax +0x2e 0x26 0x8b 0x45 0x20 + +# Test that multiple prefixes stack. +# (todo- the correct disassembly is actually more like "es movl %cs:32(%rbp), %eax" +# but we don't support that) +# CHECK: movl %cs:32(%rbp), %eax +0x26 0x2e 0x8b 0x45 0x20 + +# Test that 0xf3 as part of the opcode works. +# CHECK: cvtdq2pd (%rax), %xmm0 +0xf3 0x0f 0xe6 0x00 + +# CHECK: pause +0xf3 0x90 + +# CHECK: nop +0x90 + +# CHECK: lock +# CHECK-NEXT: nop +0xf0 0x90 + +# Test that multiple redundant prefixes work (redundant, but valid x86). +# CHECK: rep +# CHECK-NEXT: rep +# CHECK-NEXT: stosq +0xf3 0xf3 0x48 0xab + +# Test that a prefix on it's own works. It's debatable as to if this is +# something that is considered valid, but however as LLVM's own disassembler +# has decided to disassemble prefixes as being separate opcodes, it therefore +# should be capable of re-consuming it's own output. +# CHECK: rep +0xf3 +# ***IMPORTANT ^-- this must be at the end of the file to be a valid test *** |