1 use crate::abi::call::{ArgAbi, FnAbi}; 2 classify_ret<Ty>(ret: &mut ArgAbi<'_, Ty>)3fn classify_ret<Ty>(ret: &mut ArgAbi<'_, Ty>) { 4 if ret.layout.is_aggregate() && ret.layout.size.bits() > 64 { 5 ret.make_indirect(); 6 } else { 7 ret.extend_integer_width_to(32); 8 } 9 } 10 classify_arg<Ty>(arg: &mut ArgAbi<'_, Ty>)11fn classify_arg<Ty>(arg: &mut ArgAbi<'_, Ty>) { 12 if arg.layout.is_aggregate() && arg.layout.size.bits() > 64 { 13 arg.make_indirect(); 14 } else { 15 arg.extend_integer_width_to(32); 16 } 17 } 18 compute_abi_info<Ty>(fn_abi: &mut FnAbi<'_, Ty>)19pub fn compute_abi_info<Ty>(fn_abi: &mut FnAbi<'_, Ty>) { 20 if !fn_abi.ret.is_ignore() { 21 classify_ret(&mut fn_abi.ret); 22 } 23 24 for arg in &mut fn_abi.args { 25 if arg.is_ignore() { 26 continue; 27 } 28 classify_arg(arg); 29 } 30 } 31