1*9880d681SAndroid Build Coastguard Worker//===- HexagonCallingConv.td - Calling Conventions Hexagon -*- 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 Hexagon 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// Hexagon 32-bit C return-value convention. 19*9880d681SAndroid Build Coastguard Workerdef RetCC_Hexagon32 : CallingConv<[ 20*9880d681SAndroid Build Coastguard Worker CCIfType<[i32, f32], CCAssignToReg<[R0, R1, R2, R3, R4, R5]>>, 21*9880d681SAndroid Build Coastguard Worker CCIfType<[i64, f64], CCAssignToReg<[D0, D1, D2]>>, 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker // Alternatively, they are assigned to the stack in 4-byte aligned units. 24*9880d681SAndroid Build Coastguard Worker CCAssignToStack<4, 4> 25*9880d681SAndroid Build Coastguard Worker]>; 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Worker// Hexagon 32-bit C Calling convention. 28*9880d681SAndroid Build Coastguard Workerdef CC_Hexagon32 : CallingConv<[ 29*9880d681SAndroid Build Coastguard Worker // All arguments get passed in integer registers if there is space. 30*9880d681SAndroid Build Coastguard Worker CCIfType<[f32, i32, i16, i8], CCAssignToReg<[R0, R1, R2, R3, R4, R5]>>, 31*9880d681SAndroid Build Coastguard Worker CCIfType<[f64, i64], CCAssignToReg<[D0, D1, D2]>>, 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Worker // Alternatively, they are assigned to the stack in 4-byte aligned units. 34*9880d681SAndroid Build Coastguard Worker CCAssignToStack<4, 4> 35*9880d681SAndroid Build Coastguard Worker]>; 36