diff options
| author | Brian Gaeke <gaeke@uiuc.edu> | 2004-09-30 19:44:32 +0000 |
|---|---|---|
| committer | Brian Gaeke <gaeke@uiuc.edu> | 2004-09-30 19:44:32 +0000 |
| commit | a1640d2427d0bc984d092ba84e6f2e181a9c0526 (patch) | |
| tree | 1aacc815d3d9efc5ff3288710a6f35bc04643a89 | |
| parent | a46820028637ef56d798213488ac61c47a9ed2eb (diff) | |
| download | bcm5719-llvm-a1640d2427d0bc984d092ba84e6f2e181a9c0526.tar.gz bcm5719-llvm-a1640d2427d0bc984d092ba84e6f2e181a9c0526.zip | |
I think this will handle double args.
llvm-svn: 16618
| -rw-r--r-- | llvm/lib/Target/SparcV8/SparcV8ISelSimple.cpp | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/llvm/lib/Target/SparcV8/SparcV8ISelSimple.cpp b/llvm/lib/Target/SparcV8/SparcV8ISelSimple.cpp index fe11d84d506..2a240e2506c 100644 --- a/llvm/lib/Target/SparcV8/SparcV8ISelSimple.cpp +++ b/llvm/lib/Target/SparcV8/SparcV8ISelSimple.cpp @@ -349,9 +349,22 @@ void V8ISel::LoadArgumentsToVirtualRegs (Function *LF) { BuildMI (BB, V8::LDFri, 2, Reg).addFrameIndex (FI).addSImm (0); break; } + case cDouble: { + // Double-fp args are passed in pairs of integer registers; go through + // memory to get them into FP registers. (Double bleh!) + unsigned DblAlign = TM.getTargetData().getDoubleAlignment(); + int FI = F->getFrameInfo()->CreateStackObject(8, DblAlign); + BuildMI (BB, V8::ST, 3).addFrameIndex (FI).addSImm (0) + .addReg (IncomingArgRegs[ArgOffset]); + ++ArgOffset; + BuildMI (BB, V8::ST, 3).addFrameIndex (FI).addSImm (4) + .addReg (IncomingArgRegs[ArgOffset]); + BuildMI (BB, V8::LDDFri, 2, Reg).addFrameIndex (FI).addSImm (0); + break; + } default: - // FIXME: handle cDouble, cLong - assert (0 && "64-bit (double, long, etc.) function args not handled"); + // FIXME: handle cLong + assert (0 && "64-bit int (long/ulong) function args not handled"); return; } |

