| //===- 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>> | |
| ]>; |