|  | //===- XCoreCallingConv.td - Calling Conventions for XCore -*- tablegen -*-===// | 
|  | // | 
|  | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
|  | // See https://llvm.org/LICENSE.txt for license information. | 
|  | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  | // This describes the calling conventions for XCore architecture. | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | //===----------------------------------------------------------------------===// | 
|  | // XCore Return Value Calling Convention | 
|  | //===----------------------------------------------------------------------===// | 
|  | def RetCC_XCore : CallingConv<[ | 
|  | // i32 are returned in registers R0, R1, R2, R3 | 
|  | CCIfType<[i32], CCAssignToReg<[R0, R1, R2, R3]>>, | 
|  |  | 
|  | // Integer values get stored in stack slots that are 4 bytes in | 
|  | // size and 4-byte aligned. | 
|  | CCIfType<[i32], CCAssignToStack<4, 4>> | 
|  | ]>; | 
|  |  | 
|  | //===----------------------------------------------------------------------===// | 
|  | // XCore Argument Calling Conventions | 
|  | //===----------------------------------------------------------------------===// | 
|  | def CC_XCore : CallingConv<[ | 
|  | // Promote i8/i16 arguments to i32. | 
|  | CCIfType<[i8, i16], CCPromoteToType<i32>>, | 
|  |  | 
|  | // The 'nest' parameter, if any, is passed in R11. | 
|  | CCIfNest<CCAssignToReg<[R11]>>, | 
|  |  | 
|  | // The first 4 integer arguments are passed in integer registers. | 
|  | CCIfType<[i32], CCAssignToReg<[R0, R1, R2, R3]>>, | 
|  |  | 
|  | // Integer values get stored in stack slots that are 4 bytes in | 
|  | // size and 4-byte aligned. | 
|  | CCIfType<[i32], CCAssignToStack<4, 4>> | 
|  | ]>; |