1fcef3e46SJacques Pienaar//===- LanaiCallingConv.td - Calling Conventions Lanai -------*- tablegen -*-===// 2fcef3e46SJacques Pienaar// 3*2946cd70SChandler Carruth// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*2946cd70SChandler Carruth// See https://llvm.org/LICENSE.txt for license information. 5*2946cd70SChandler Carruth// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6fcef3e46SJacques Pienaar// 7fcef3e46SJacques Pienaar//===----------------------------------------------------------------------===// 8fcef3e46SJacques Pienaar// 9fcef3e46SJacques Pienaar// This describes the calling conventions for the Lanai architectures. 10fcef3e46SJacques Pienaar// 11fcef3e46SJacques Pienaar//===----------------------------------------------------------------------===// 12fcef3e46SJacques Pienaar 13fcef3e46SJacques Pienaar//===----------------------------------------------------------------------===// 14fcef3e46SJacques Pienaar// Return Value Calling Conventions 15fcef3e46SJacques Pienaar//===----------------------------------------------------------------------===// 16fcef3e46SJacques Pienaar 17fcef3e46SJacques Pienaar// Lanai 32-bit C Calling convention. 18fcef3e46SJacques Pienaardef CC_Lanai32 : CallingConv<[ 19fcef3e46SJacques Pienaar // Promote i8/i16 args to i32 20fcef3e46SJacques Pienaar CCIfType<[i8, i16], CCPromoteToType<i32>>, 21fcef3e46SJacques Pienaar 22fcef3e46SJacques Pienaar // Put argument in registers if marked 'inreg' and not a vararg call. 23fcef3e46SJacques Pienaar CCIfNotVarArg<CCIfInReg<CCIfType<[i32], 24fcef3e46SJacques Pienaar CCAssignToReg<[R6, R7, R18, R19]>>>>, 25fcef3e46SJacques Pienaar 26fcef3e46SJacques Pienaar // Otherwise they are assigned to the stack in 4-byte aligned units. 27fcef3e46SJacques Pienaar CCAssignToStack<4, 4> 28fcef3e46SJacques Pienaar]>; 29fcef3e46SJacques Pienaar 30fcef3e46SJacques Pienaar// Lanai 32-bit Fast Calling convention. 31fcef3e46SJacques Pienaardef CC_Lanai32_Fast : CallingConv<[ 32fcef3e46SJacques Pienaar // Promote i8/i16 args to i32 33fcef3e46SJacques Pienaar CCIfType<[ i8, i16 ], CCPromoteToType<i32>>, 34fcef3e46SJacques Pienaar 35fcef3e46SJacques Pienaar // Put arguments in registers. 36fcef3e46SJacques Pienaar CCIfNotVarArg<CCIfType<[i32], CCAssignToReg<[ R6, R7, R18, R19 ]>>>, 37fcef3e46SJacques Pienaar 38fcef3e46SJacques Pienaar // Otherwise they are assigned to the stack in 4-byte aligned units. 39fcef3e46SJacques Pienaar CCAssignToStack<4, 4> 40fcef3e46SJacques Pienaar]>; 41fcef3e46SJacques Pienaar 42fcef3e46SJacques Pienaar// Lanai 32-bit C return-value convention. 43fcef3e46SJacques Pienaardef RetCC_Lanai32 : CallingConv<[ 44fcef3e46SJacques Pienaar // Specify two registers to allow returning 64-bit results that have already 45fcef3e46SJacques Pienaar // been lowered to 2 32-bit values. 46fcef3e46SJacques Pienaar CCIfType<[i32], CCAssignToReg<[RV, R9]>> 47fcef3e46SJacques Pienaar]>; 48fcef3e46SJacques Pienaar 49fcef3e46SJacques Pienaardef CSR: CalleeSavedRegs<(add)>; 50