diff options
Diffstat (limited to 'lib/Target/BPF/BPFCallingConv.td')
-rw-r--r-- | lib/Target/BPF/BPFCallingConv.td | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/lib/Target/BPF/BPFCallingConv.td b/lib/Target/BPF/BPFCallingConv.td index 8cec6fa54698..637f9752ec42 100644 --- a/lib/Target/BPF/BPFCallingConv.td +++ b/lib/Target/BPF/BPFCallingConv.td @@ -26,4 +26,24 @@ def CC_BPF64 : CallingConv<[ CCAssignToStack<8, 8> ]>; +// Return-value convention when -mattr=+alu32 enabled +def RetCC_BPF32 : CallingConv<[ + CCIfType<[i32], CCAssignToRegWithShadow<[W0], [R0]>>, + CCIfType<[i64], CCAssignToRegWithShadow<[R0], [W0]>> +]>; + +// Calling convention when -mattr=+alu32 enabled +def CC_BPF32 : CallingConv<[ + // Promote i8/i16/i32 args to i64 + CCIfType<[i32], CCAssignToRegWithShadow<[W1, W2, W3, W4, W5], + [R1, R2, R3, R4, R5]>>, + + // All arguments get passed in integer registers if there is space. + CCIfType<[i64], CCAssignToRegWithShadow<[R1, R2, R3, R4, R5], + [W1, W2, W3, W4, W5]>>, + + // Could be assigned to the stack in 8-byte aligned units, but unsupported + CCAssignToStack<8, 8> +]>; + def CSR : CalleeSavedRegs<(add R6, R7, R8, R9, R10)>; |