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 | 9e9426cb823d9d272a42d34e88504e79c4988fab (patch) | |
tree | 610b2f21388d228b0d387bd01c931c8d1d665406 | |
parent | c6fdac260bc5890d78647615082e97263fd8a677 (diff) | |
download | bcm5719-llvm-9e9426cb823d9d272a42d34e88504e79c4988fab.tar.gz bcm5719-llvm-9e9426cb823d9d272a42d34e88504e79c4988fab.zip |
Support x86 specific inline asm modifier 'J'.
llvm-svn: 56483
-rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 8 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/inline-asm.ll | 12 |
2 files changed, 16 insertions, 4 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index c5c14f02ae5..f988048a106 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/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/llvm/test/CodeGen/X86/inline-asm.ll b/llvm/test/CodeGen/X86/inline-asm.ll index 54dfe76478a..02988fcc29f 100644 --- a/llvm/test/CodeGen/X86/inline-asm.ll +++ b/llvm/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 +} |