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