From: Richard Osborne Date: Wed, 23 Feb 2011 16:46:37 +0000 (+0000) Subject: Add XCore intrinsic for the setv instruction. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=292f62e06f15eb45008c6965a5d9f7e9713431e9;p=oota-llvm.git Add XCore intrinsic for the setv instruction. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126315 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/IntrinsicsXCore.td b/include/llvm/IntrinsicsXCore.td index 09f482f941c..854714eec4f 100644 --- a/include/llvm/IntrinsicsXCore.td +++ b/include/llvm/IntrinsicsXCore.td @@ -45,4 +45,6 @@ let TargetPrefix = "xcore" in { // All intrinsics start with "llvm.xcore.". [NoCapture<0>]>; def int_xcore_settw : Intrinsic<[],[llvm_anyptr_ty, llvm_i32_ty], [NoCapture<0>]>; + def int_xcore_setv : Intrinsic<[],[llvm_anyptr_ty, llvm_ptr_ty], + [NoCapture<0>]>; } diff --git a/lib/Target/XCore/XCoreInstrInfo.td b/lib/Target/XCore/XCoreInstrInfo.td index 5c7da24ad7b..b89f6769971 100644 --- a/lib/Target/XCore/XCoreInstrInfo.td +++ b/lib/Target/XCore/XCoreInstrInfo.td @@ -841,7 +841,7 @@ def SETTW_l2r : _FL2R<(outs), (ins GRRegs:$r, GRRegs:$val), // One operand short // TODO edu, eeu, waitet, waitef, tstart, msync, mjoin, clrtp -// setdp, setcp, setv, setev, kcall +// setdp, setcp, setev, kcall // dgetreg let isBranch=1, isIndirectBranch=1, isTerminator=1, isBarrier = 1 in def BAU_1r : _F1R<(outs), (ins GRRegs:$addr), @@ -889,6 +889,11 @@ def FREER_1r : _F1R<(outs), (ins GRRegs:$r), "freer res[$r]", [(int_xcore_freer GRRegs:$r)]>; +let Uses=[R11] in +def SETV_1r : _F1R<(outs), (ins GRRegs:$r), + "setv res[$r], r11", + [(int_xcore_setv GRRegs:$r, R11)]>; + // Zero operand short // TODO waiteu, clre, ssync, freet, ldspc, stspc, ldssr, stssr, ldsed, stsed, // stet, geted, getet, getkep, getksp, setkep, getid, kret, dcall, dret, diff --git a/test/CodeGen/XCore/resources.ll b/test/CodeGen/XCore/resources.ll index 695efec26b2..b34331fa616 100644 --- a/test/CodeGen/XCore/resources.ll +++ b/test/CodeGen/XCore/resources.ll @@ -17,6 +17,7 @@ declare void @llvm.xcore.setpt.p1i8(i8 addrspace(1)* %r, i32 %value) declare i32 @llvm.xcore.getts.p1i8(i8 addrspace(1)* %r) declare void @llvm.xcore.syncr.p1i8(i8 addrspace(1)* %r) declare void @llvm.xcore.settw.p1i8(i8 addrspace(1)* %r, i32 %value) +declare void @llvm.xcore.setv.p1i8(i8 addrspace(1)* %r, i8* %p) define i8 addrspace(1)* @getr() { ; CHECK: getr: @@ -157,3 +158,11 @@ define void @settw(i8 addrspace(1)* %r, i32 %value) { call void @llvm.xcore.settw.p1i8(i8 addrspace(1)* %r, i32 %value) ret void } + +define void @setv(i8 addrspace(1)* %r, i8* %p) { +; CHECK: setv: +; CHECK: mov r11, r1 +; CHECK-NEXT: setv res[r0], r11 + call void @llvm.xcore.setv.p1i8(i8 addrspace(1)* %r, i8* %p) + ret void +}