rustc_target/callconv/bpf.rs
1// see https://github.com/llvm/llvm-project/blob/main/llvm/lib/Target/BPF/BPFCallingConv.td
2use crate::callconv::{ArgAbi, FnAbi};
3
4fn classify_ret<Ty>(ret: &mut ArgAbi<'_, Ty>) {
5 if ret.layout.is_aggregate() || ret.layout.size.bits() > 64 {
6 ret.make_indirect();
7 } else {
8 ret.extend_integer_width_to(32);
9 }
10}
11
12fn classify_arg<Ty>(arg: &mut ArgAbi<'_, Ty>) {
13 if arg.layout.is_aggregate() || arg.layout.size.bits() > 64 {
14 arg.make_indirect();
15 } else {
16 arg.extend_integer_width_to(32);
17 }
18}
19
20pub(crate) fn compute_abi_info<Ty>(fn_abi: &mut FnAbi<'_, Ty>) {
21 if !fn_abi.ret.is_ignore() {
22 classify_ret(&mut fn_abi.ret);
23 }
24
25 for arg in fn_abi.args.iter_mut() {
26 if arg.is_ignore() {
27 continue;
28 }
29 classify_arg(arg);
30 }
31}