From c798965e63218a6343c9413db8233f8eb16253e9 Mon Sep 17 00:00:00 2001 From: Kevin Enderby Date: Tue, 25 May 2010 18:16:58 +0000 Subject: [PATCH] The BT64ri8 record in X86Instr64bit.td was missing a REX_W which is required for the 64-bit version of the Bit Test instruction. llvm-svn: 104621 --- llvm/lib/Target/X86/X86Instr64bit.td | 3 ++- llvm/test/MC/AsmParser/X86/x86_64-new-encoder.s | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/llvm/lib/Target/X86/X86Instr64bit.td b/llvm/lib/Target/X86/X86Instr64bit.td index a3750a946057..b7d3b4b9c825 100644 --- a/llvm/lib/Target/X86/X86Instr64bit.td +++ b/llvm/lib/Target/X86/X86Instr64bit.td @@ -1313,7 +1313,8 @@ def BT64mr : RI<0xA3, MRMDestMem, (outs), (ins i64mem:$src1, GR64:$src2), def BT64ri8 : Ii8<0xBA, MRM4r, (outs), (ins GR64:$src1, i64i8imm:$src2), "bt{q}\t{$src2, $src1|$src1, $src2}", - [(set EFLAGS, (X86bt GR64:$src1, i64immSExt8:$src2))]>, TB; + [(set EFLAGS, (X86bt GR64:$src1, i64immSExt8:$src2))]>, TB, + REX_W; // Note that these instructions don't need FastBTMem because that // only applies when the other operand is in a register. When it's // an immediate, bt is still fast. diff --git a/llvm/test/MC/AsmParser/X86/x86_64-new-encoder.s b/llvm/test/MC/AsmParser/X86/x86_64-new-encoder.s index 6cd22d03051d..6988110be2de 100644 --- a/llvm/test/MC/AsmParser/X86/x86_64-new-encoder.s +++ b/llvm/test/MC/AsmParser/X86/x86_64-new-encoder.s @@ -126,3 +126,8 @@ movl 0, %eax // CHECK: movl 0, %eax # encoding: [0x8b,0x04,0x25,A,A,A,A] // CHECK: jne // CHECK: encoding: [0x75,A] jnz 0 + +// rdar://8017515 +btq $0x01,%rdx +// CHECK: btq $1, %rdx +// CHECK: encoding: [0x48,0x0f,0xba,0xe2,0x01]