50 lines · plain
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-exception6//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 i6419 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 unsupported25 CCAssignToStack<8, 8>26]>;27 28// Return-value convention when -mattr=+alu32 enabled29def RetCC_BPF32 : CallingConv<[30 CCIfType<[i32], CCAssignToRegWithShadow<[W0], [R0]>>,31 CCIfType<[i64], CCAssignToRegWithShadow<[R0], [W0]>>32]>;33 34// Calling convention when -mattr=+alu32 enabled35def CC_BPF32 : CallingConv<[36 // Promote i8/i16/i32 args to i6437 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 unsupported45 CCAssignToStack<8, 8>46]>;47 48def CSR : CalleeSavedRegs<(add R6, R7, R8, R9, R10)>;49def CSR_PreserveAll : CalleeSavedRegs<(add R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10)>;50