Home | History | Annotate | Download | only in Sparc
      1 //===- SparcCallingConv.td - Calling Conventions Sparc -----*- tablegen -*-===//
      2 // 
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 // 
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This describes the calling conventions for the Sparc architectures.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 //===----------------------------------------------------------------------===//
     15 // Return Value Calling Conventions
     16 //===----------------------------------------------------------------------===//
     17 
     18 // Sparc 32-bit C return-value convention.
     19 def RetCC_Sparc32 : CallingConv<[
     20   CCIfType<[i32], CCAssignToReg<[I0, I1, I2, I3, I4, I5]>>,
     21   CCIfType<[f32], CCAssignToReg<[F0, F1, F2, F3]>>,
     22   CCIfType<[f64], CCAssignToReg<[D0, D1]>>
     23 ]>;
     24 
     25 // Sparc 32-bit C Calling convention.
     26 def CC_Sparc32 : CallingConv<[
     27   //Custom assign SRet to [sp+64].
     28   CCIfSRet<CCCustom<"CC_Sparc_Assign_SRet">>,
     29   // i32 f32 arguments get passed in integer registers if there is space.
     30   CCIfType<[i32, f32], CCAssignToReg<[I0, I1, I2, I3, I4, I5]>>,
     31   // f64 arguments are split and passed through registers or through stack.
     32   CCIfType<[f64], CCCustom<"CC_Sparc_Assign_f64">>,
     33 
     34   // Alternatively, they are assigned to the stack in 4-byte aligned units.
     35   CCAssignToStack<4, 4>
     36 ]>;
     37