1*9880d681SAndroid Build Coastguard Worker//===- LanaiCallingConv.td - Calling Conventions Lanai -------*- tablegen -*-===// 2*9880d681SAndroid Build Coastguard Worker// 3*9880d681SAndroid Build Coastguard Worker// The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker// 5*9880d681SAndroid Build Coastguard Worker// This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker// License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker// 8*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker// 10*9880d681SAndroid Build Coastguard Worker// This describes the calling conventions for the Lanai architectures. 11*9880d681SAndroid Build Coastguard Worker// 12*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 15*9880d681SAndroid Build Coastguard Worker// Return Value Calling Conventions 16*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Worker// Lanai 32-bit C Calling convention. 19*9880d681SAndroid Build Coastguard Workerdef CC_Lanai32 : CallingConv<[ 20*9880d681SAndroid Build Coastguard Worker // Promote i8/i16 args to i32 21*9880d681SAndroid Build Coastguard Worker CCIfType<[i8, i16], CCPromoteToType<i32>>, 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker // Put argument in registers if marked 'inreg' and not a vararg call. 24*9880d681SAndroid Build Coastguard Worker CCIfNotVarArg<CCIfInReg<CCIfType<[i32], 25*9880d681SAndroid Build Coastguard Worker CCAssignToReg<[R6, R7, R18, R19]>>>>, 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Worker // Otherwise they are assigned to the stack in 4-byte aligned units. 28*9880d681SAndroid Build Coastguard Worker CCAssignToStack<4, 4> 29*9880d681SAndroid Build Coastguard Worker]>; 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker// Lanai 32-bit Fast Calling convention. 32*9880d681SAndroid Build Coastguard Workerdef CC_Lanai32_Fast : CallingConv<[ 33*9880d681SAndroid Build Coastguard Worker // Promote i8/i16 args to i32 34*9880d681SAndroid Build Coastguard Worker CCIfType<[ i8, i16 ], CCPromoteToType<i32>>, 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Worker // Put arguments in registers. 37*9880d681SAndroid Build Coastguard Worker CCIfNotVarArg<CCIfType<[i32], CCAssignToReg<[ R6, R7, R18, R19 ]>>>, 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker // Otherwise they are assigned to the stack in 4-byte aligned units. 40*9880d681SAndroid Build Coastguard Worker CCAssignToStack<4, 4> 41*9880d681SAndroid Build Coastguard Worker]>; 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Worker// Lanai 32-bit C return-value convention. 44*9880d681SAndroid Build Coastguard Workerdef RetCC_Lanai32 : CallingConv<[ 45*9880d681SAndroid Build Coastguard Worker // Specify two registers to allow returning 64-bit results that have already 46*9880d681SAndroid Build Coastguard Worker // been lowered to 2 32-bit values. 47*9880d681SAndroid Build Coastguard Worker CCIfType<[i32], CCAssignToReg<[RV, R9]>> 48*9880d681SAndroid Build Coastguard Worker]>; 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Workerdef CSR: CalleeSavedRegs<(add)>; 51