mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-01 15:11:24 +00:00
Make VAARG work with x86 long double (which is
10 bytes long, but is passed in 12/16 bytes). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58608 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
06140888b1
commit
5c58a3168f
@ -3438,9 +3438,9 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) {
|
||||
const Value *V = cast<SrcValueSDNode>(Node->getOperand(2))->getValue();
|
||||
SDValue VAList = DAG.getLoad(TLI.getPointerTy(), Tmp1, Tmp2, V, 0);
|
||||
// Increment the pointer, VAList, to the next vaarg
|
||||
Tmp3 = DAG.getNode(ISD::ADD, TLI.getPointerTy(), VAList,
|
||||
DAG.getConstant(VT.getSizeInBits()/8,
|
||||
TLI.getPointerTy()));
|
||||
Tmp3 = DAG.getNode(ISD::ADD, TLI.getPointerTy(), VAList,
|
||||
DAG.getConstant(TLI.getTargetData()->getABITypeSize(VT.getTypeForMVT()),
|
||||
TLI.getPointerTy()));
|
||||
// Store the incremented VAList to the legalized pointer
|
||||
Tmp3 = DAG.getStore(VAList.getValue(1), Tmp3, Tmp2, V, 0);
|
||||
// Load the actual argument out of the pointer VAList
|
||||
|
17
test/CodeGen/X86/2008-11-03-F80VAARG.ll
Normal file
17
test/CodeGen/X86/2008-11-03-F80VAARG.ll
Normal file
@ -0,0 +1,17 @@
|
||||
; RUN: llvm-as < %s | llc -march=x86 -o - | not grep 10
|
||||
|
||||
declare void @llvm.va_start(i8*) nounwind
|
||||
|
||||
declare void @llvm.va_copy(i8*, i8*) nounwind
|
||||
|
||||
declare void @llvm.va_end(i8*) nounwind
|
||||
|
||||
define x86_fp80 @test(...) nounwind {
|
||||
%ap = alloca i8* ; <i8**> [#uses=3]
|
||||
%v1 = bitcast i8** %ap to i8* ; <i8*> [#uses=1]
|
||||
call void @llvm.va_start(i8* %v1)
|
||||
%t1 = va_arg i8** %ap, x86_fp80 ; <x86_fp80> [#uses=1]
|
||||
%t2 = va_arg i8** %ap, x86_fp80 ; <x86_fp80> [#uses=1]
|
||||
%t = add x86_fp80 %t1, %t2 ; <x86_fp80> [#uses=1]
|
||||
ret x86_fp80 %t
|
||||
}
|
Loading…
Reference in New Issue
Block a user