| //===- AlphaCallingConv.td - Calling Conventions for Alpha -*- tablegen -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // This describes the calling conventions for Alpha architecture. |
| //===----------------------------------------------------------------------===// |
| |
| //===----------------------------------------------------------------------===// |
| // Alpha Return Value Calling Convention |
| //===----------------------------------------------------------------------===// |
| def RetCC_Alpha : CallingConv<[ |
| // i64 is returned in register R0 |
| // R1 is an llvm extension, I don't know what gcc does |
| CCIfType<[i64], CCAssignToReg<[R0,R1]>>, |
| |
| // f32 / f64 are returned in F0/F1 |
| CCIfType<[f32, f64], CCAssignToReg<[F0, F1]>> |
| ]>; |
| |
| //===----------------------------------------------------------------------===// |
| // Alpha Argument Calling Conventions |
| //===----------------------------------------------------------------------===// |
| def CC_Alpha : CallingConv<[ |
| // The first 6 arguments are passed in registers, whether integer or |
| // floating-point |
| CCIfType<[i64], CCAssignToRegWithShadow<[R16, R17, R18, R19, R20, R21], |
| [F16, F17, F18, F19, F20, F21]>>, |
| |
| CCIfType<[f32, f64], CCAssignToRegWithShadow<[F16, F17, F18, F19, F20, F21], |
| [R16, R17, R18, R19, R20, R21]>>, |
| |
| // Stack slots are 8 bytes in size and 8-byte aligned. |
| CCIfType<[i64, f32, f64], CCAssignToStack<8, 8>> |
| ]>; |