mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-20 03:23:01 +02:00
Need to handle any 'nest' parameter before integer
parameters, since otherwise it won't be passed in the right register. With this change trampolines work on x86-64 (thanks to Luke Guest for providing access to an x86-64 box). llvm-svn: 46192
This commit is contained in:
parent
7de447b8a6
commit
5e1cbc1ad7
@ -101,7 +101,10 @@ def CC_X86_64_C : CallingConv<[
|
|||||||
|
|
||||||
// Promote i8/i16 arguments to i32.
|
// Promote i8/i16 arguments to i32.
|
||||||
CCIfType<[i8, i16], CCPromoteToType<i32>>,
|
CCIfType<[i8, i16], CCPromoteToType<i32>>,
|
||||||
|
|
||||||
|
// The 'nest' parameter, if any, is passed in R10.
|
||||||
|
CCIfNest<CCAssignToReg<[R10]>>,
|
||||||
|
|
||||||
// The first 6 integer arguments are passed in integer registers.
|
// The first 6 integer arguments are passed in integer registers.
|
||||||
CCIfType<[i32], CCAssignToReg<[EDI, ESI, EDX, ECX, R8D, R9D]>>,
|
CCIfType<[i32], CCAssignToReg<[EDI, ESI, EDX, ECX, R8D, R9D]>>,
|
||||||
CCIfType<[i64], CCAssignToReg<[RDI, RSI, RDX, RCX, R8 , R9 ]>>,
|
CCIfType<[i64], CCAssignToReg<[RDI, RSI, RDX, RCX, R8 , R9 ]>>,
|
||||||
@ -114,9 +117,6 @@ def CC_X86_64_C : CallingConv<[
|
|||||||
CCIfType<[v8i8, v4i16, v2i32, v1i64],
|
CCIfType<[v8i8, v4i16, v2i32, v1i64],
|
||||||
CCAssignToReg<[RDI, RSI, RDX, RCX, R8 , R9 ]>>,
|
CCAssignToReg<[RDI, RSI, RDX, RCX, R8 , R9 ]>>,
|
||||||
|
|
||||||
// The 'nest' parameter, if any, is passed in R10.
|
|
||||||
CCIfNest<CCAssignToReg<[R10]>>,
|
|
||||||
|
|
||||||
// Integer/FP values get stored in stack slots that are 8 bytes in size and
|
// Integer/FP values get stored in stack slots that are 8 bytes in size and
|
||||||
// 8-byte aligned if there are no more registers to hold them.
|
// 8-byte aligned if there are no more registers to hold them.
|
||||||
CCIfType<[i32, i64, f32, f64], CCAssignToStack<8, 8>>,
|
CCIfType<[i32, i64, f32, f64], CCAssignToStack<8, 8>>,
|
||||||
@ -140,7 +140,10 @@ def CC_X86_64_TailCall : CallingConv<[
|
|||||||
|
|
||||||
// Promote i8/i16 arguments to i32.
|
// Promote i8/i16 arguments to i32.
|
||||||
CCIfType<[i8, i16], CCPromoteToType<i32>>,
|
CCIfType<[i8, i16], CCPromoteToType<i32>>,
|
||||||
|
|
||||||
|
// The 'nest' parameter, if any, is passed in R10.
|
||||||
|
CCIfNest<CCAssignToReg<[R10]>>,
|
||||||
|
|
||||||
// The first 6 integer arguments are passed in integer registers.
|
// The first 6 integer arguments are passed in integer registers.
|
||||||
CCIfType<[i32], CCAssignToReg<[EDI, ESI, EDX, ECX, R8D]>>,
|
CCIfType<[i32], CCAssignToReg<[EDI, ESI, EDX, ECX, R8D]>>,
|
||||||
CCIfType<[i64], CCAssignToReg<[RDI, RSI, RDX, RCX, R8]>>,
|
CCIfType<[i64], CCAssignToReg<[RDI, RSI, RDX, RCX, R8]>>,
|
||||||
@ -153,9 +156,6 @@ def CC_X86_64_TailCall : CallingConv<[
|
|||||||
CCIfType<[v8i8, v4i16, v2i32, v1i64],
|
CCIfType<[v8i8, v4i16, v2i32, v1i64],
|
||||||
CCAssignToReg<[RDI, RSI, RDX, RCX, R8]>>,
|
CCAssignToReg<[RDI, RSI, RDX, RCX, R8]>>,
|
||||||
|
|
||||||
// The 'nest' parameter, if any, is passed in R10.
|
|
||||||
CCIfNest<CCAssignToReg<[R10]>>,
|
|
||||||
|
|
||||||
// Integer/FP values get stored in stack slots that are 8 bytes in size and
|
// Integer/FP values get stored in stack slots that are 8 bytes in size and
|
||||||
// 8-byte aligned if there are no more registers to hold them.
|
// 8-byte aligned if there are no more registers to hold them.
|
||||||
CCIfType<[i32, i64, f32, f64], CCAssignToStack<8, 8>>,
|
CCIfType<[i32, i64, f32, f64], CCAssignToStack<8, 8>>,
|
||||||
|
Loading…
Reference in New Issue
Block a user