40 lines · plain
1//===- XtensaCallingConv.td - Xtensa Calling Conventions -*- tablegen ---*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8// This describes the calling conventions for the Xtensa ABI.9//===----------------------------------------------------------------------===//10 11//===----------------------------------------------------------------------===//12// Xtensa base calling convention13//===----------------------------------------------------------------------===//14// Xtensa return value15def RetCC_Xtensa : CallingConv<[16 // First two return values go in a2, a3, a4, a517 CCIfType<[i32], CCAssignToReg<[A2, A3, A4, A5]>>,18 CCIfType<[f32], CCAssignToReg<[A2, A3, A4, A5]>>,19 CCIfType<[i64], CCAssignToRegWithShadow<[A2, A4], [A3, A5]>>20]>;21 22// Callee-saved register lists23def CSR_Xtensa : CalleeSavedRegs<(add A0, A12, A13, A14, A15)>;24 25//===----------------------------------------------------------------------===//26// Xtensa windowed calling convention. Currently by default implemented27// rotation window by 8 registers.28//===----------------------------------------------------------------------===//29// Xtensa return value for 8 registers window30def RetCCW8_Xtensa : CallingConv<[31 //First two return values go in a10, a11, a12, a1332 CCIfType<[i32], CCAssignToReg<[A10, A11, A12, A13]>>,33 CCIfType<[i64], CCAssignToRegWithShadow<[A10, A12], [A11, A13]>>34]>;35 36// Callee-saved register lists for rotation window by 8 registers37def CSRW8_Xtensa : CalleeSavedRegs<(add)> {38 let OtherPreserved = (add A0, SP, A2, A3, A4, A5, A6, A7);39}40