diff options
author | Evan Cheng <evan.cheng@apple.com> | 2008-09-22 23:57:37 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2008-09-22 23:57:37 +0000 |
commit | 364091e0909dc2ab470a40d3981be2efa2643bd7 (patch) | |
tree | 170edf9369f19f101d9ea8a233b9209b3701aeb3 | |
parent | 869aed7d83e1de50bebd801f44dd5d30c0db0a0b (diff) | |
download | external_llvm-364091e0909dc2ab470a40d3981be2efa2643bd7.zip external_llvm-364091e0909dc2ab470a40d3981be2efa2643bd7.tar.gz external_llvm-364091e0909dc2ab470a40d3981be2efa2643bd7.tar.bz2 |
Support x86 specific inline asm modifier 'J'.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56483 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/X86/X86ISelLowering.cpp | 8 | ||||
-rw-r--r-- | test/CodeGen/X86/inline-asm.ll | 12 |
2 files changed, 16 insertions, 4 deletions
diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index c5c14f0..f988048 100644 --- a/lib/Target/X86/X86ISelLowering.cpp +++ b/lib/Target/X86/X86ISelLowering.cpp @@ -7080,6 +7080,14 @@ void X86TargetLowering::LowerAsmOperandForConstraint(SDValue Op, } } return; + case 'J': + if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op)) { + if (C->getZExtValue() <= 63) { + Result = DAG.getTargetConstant(C->getZExtValue(), Op.getValueType()); + break; + } + } + return; case 'N': if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Op)) { if (C->getZExtValue() <= 255) { diff --git a/test/CodeGen/X86/inline-asm.ll b/test/CodeGen/X86/inline-asm.ll index 54dfe76..02988fc 100644 --- a/test/CodeGen/X86/inline-asm.ll +++ b/test/CodeGen/X86/inline-asm.ll @@ -1,21 +1,25 @@ ; RUN: llvm-as < %s | llc -march=x86 -define i32 @test1() { +define i32 @test1() nounwind { ; Dest is AX, dest type = i32. %tmp4 = call i32 asm sideeffect "FROB $0", "={ax}"() ret i32 %tmp4 } -define void @test2(i32 %V) { +define void @test2(i32 %V) nounwind { ; input is AX, in type = i32. call void asm sideeffect "FROB $0", "{ax}"(i32 %V) ret void } -define void @test3() { +define void @test3() nounwind { ; FP constant as a memory operand. tail call void asm sideeffect "frob $0", "m"( float 0x41E0000000000000) ret void } - +define void @test4() nounwind { + ; J means a constant in range 0 to 63. + tail call void asm sideeffect "bork $0", "J"(i32 37) nounwind + ret void +} |