1//===-- BPFCallingConv.td - Calling Conventions BPF --------*- tablegen -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// This describes the calling conventions for the BPF architecture. 10// 11//===----------------------------------------------------------------------===// 12 13// BPF 64-bit C return-value convention. 14def RetCC_BPF64 : CallingConv<[CCIfType<[i64], CCAssignToReg<[R0]>>]>; 15 16// BPF 64-bit C Calling convention. 17def CC_BPF64 : CallingConv<[ 18 // Promote i8/i16/i32 args to i64 19 CCIfType<[ i8, i16, i32 ], CCPromoteToType<i64>>, 20 21 // All arguments get passed in integer registers if there is space. 22 CCIfType<[i64], CCAssignToReg<[ R1, R2, R3, R4, R5 ]>>, 23 24 // Could be assigned to the stack in 8-byte aligned units, but unsupported 25 CCAssignToStack<8, 8> 26]>; 27 28// Return-value convention when -mattr=+alu32 enabled 29def RetCC_BPF32 : CallingConv<[ 30 CCIfType<[i32], CCAssignToRegWithShadow<[W0], [R0]>>, 31 CCIfType<[i64], CCAssignToRegWithShadow<[R0], [W0]>> 32]>; 33 34// Calling convention when -mattr=+alu32 enabled 35def CC_BPF32 : CallingConv<[ 36 // Promote i8/i16/i32 args to i64 37 CCIfType<[i32], CCAssignToRegWithShadow<[W1, W2, W3, W4, W5], 38 [R1, R2, R3, R4, R5]>>, 39 40 // All arguments get passed in integer registers if there is space. 41 CCIfType<[i64], CCAssignToRegWithShadow<[R1, R2, R3, R4, R5], 42 [W1, W2, W3, W4, W5]>>, 43 44 // Could be assigned to the stack in 8-byte aligned units, but unsupported 45 CCAssignToStack<8, 8> 46]>; 47 48def CSR : CalleeSavedRegs<(add R6, R7, R8, R9, R10)>; 49