diff options
author | Dale Johannesen <dalej@apple.com> | 2007-10-05 20:04:43 +0000 |
---|---|---|
committer | Dale Johannesen <dalej@apple.com> | 2007-10-05 20:04:43 +0000 |
commit | 161e897b0fb35d156b2fe720fadabd975b0d6723 (patch) | |
tree | 7077a0839c21a1e72afa5dd377d02c66466159a0 /lib/Target/PowerPC | |
parent | b952d1f5be9238b7d39ccb72303b677d97bd8ec5 (diff) | |
download | external_llvm-161e897b0fb35d156b2fe720fadabd975b0d6723.zip external_llvm-161e897b0fb35d156b2fe720fadabd975b0d6723.tar.gz external_llvm-161e897b0fb35d156b2fe720fadabd975b0d6723.tar.bz2 |
First round of ppc long double. call/return and
basic arithmetic works.
Rename RTLIB long double functions to distinguish
different flavors of long double; the lib functions
have different names, alas.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42644 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/PowerPC')
-rw-r--r-- | lib/Target/PowerPC/PPCCallingConv.td | 3 | ||||
-rw-r--r-- | lib/Target/PowerPC/PPCISelLowering.cpp | 14 |
2 files changed, 15 insertions, 2 deletions
diff --git a/lib/Target/PowerPC/PPCCallingConv.td b/lib/Target/PowerPC/PPCCallingConv.td index 9e31b5a..0991d83 100644 --- a/lib/Target/PowerPC/PPCCallingConv.td +++ b/lib/Target/PowerPC/PPCCallingConv.td @@ -25,7 +25,8 @@ def RetCC_PPC : CallingConv<[ CCIfType<[i32], CCAssignToReg<[R3, R4]>>, CCIfType<[i64], CCAssignToReg<[X3, X4]>>, - CCIfType<[f32, f64], CCAssignToReg<[F1]>>, + CCIfType<[f32], CCAssignToReg<[F1]>>, + CCIfType<[f64], CCAssignToReg<[F1, F2]>>, // Vector types are always returned in V2. CCIfType<[v16i8, v8i16, v4i32, v4f32], CCAssignToReg<[V2]>> diff --git a/lib/Target/PowerPC/PPCISelLowering.cpp b/lib/Target/PowerPC/PPCISelLowering.cpp index cfebef1..ec1046f 100644 --- a/lib/Target/PowerPC/PPCISelLowering.cpp +++ b/lib/Target/PowerPC/PPCISelLowering.cpp @@ -1812,8 +1812,20 @@ static SDOperand LowerCALL(SDOperand Op, SelectionDAG &DAG, NumResults = 1; NodeTys.push_back(MVT::i64); break; - case MVT::f32: case MVT::f64: + if (Op.Val->getValueType(1) == MVT::f64) { + Chain = DAG.getCopyFromReg(Chain, PPC::F1, MVT::f64, InFlag).getValue(1); + ResultVals[0] = Chain.getValue(0); + Chain = DAG.getCopyFromReg(Chain, PPC::F2, MVT::f64, + Chain.getValue(2)).getValue(1); + ResultVals[1] = Chain.getValue(0); + NumResults = 2; + NodeTys.push_back(MVT::f64); + NodeTys.push_back(MVT::f64); + break; + } + // else fall through + case MVT::f32: Chain = DAG.getCopyFromReg(Chain, PPC::F1, Op.Val->getValueType(0), InFlag).getValue(1); ResultVals[0] = Chain.getValue(0); |