]> git.proxmox.com Git - rustc.git/blame - compiler/rustc_target/src/abi/call/sparc.rs
bump version to 1.80.1+dfsg1-1~bpo12+pve1
[rustc.git] / compiler / rustc_target / src / abi / call / sparc.rs
CommitLineData
60c5eb7d 1use crate::abi::call::{ArgAbi, FnAbi, Reg, Uniform};
94222f64 2use crate::abi::{HasDataLayout, Size};
1a4d82fc 3
94222f64 4fn classify_ret<Ty, C>(cx: &C, ret: &mut ArgAbi<'_, Ty>, offset: &mut Size)
dfeec247 5where
94222f64 6 C: HasDataLayout,
83c7162d 7{
cc61c64b 8 if !ret.layout.is_aggregate() {
54a0048b 9 ret.extend_integer_width_to(32);
1a4d82fc 10 } else {
ff7c6d11 11 ret.make_indirect();
83c7162d 12 *offset += cx.data_layout().pointer_size;
1a4d82fc
JJ
13 }
14}
15
94222f64 16fn classify_arg<Ty, C>(cx: &C, arg: &mut ArgAbi<'_, Ty>, offset: &mut Size)
dfeec247 17where
94222f64 18 C: HasDataLayout,
83c7162d 19{
4b012472
FG
20 if !arg.layout.is_sized() {
21 // Not touching this...
22 return;
23 }
83c7162d 24 let dl = cx.data_layout();
ff7c6d11 25 let size = arg.layout.size;
a1dfa0c6 26 let align = arg.layout.align.max(dl.i32_align).min(dl.i64_align).abi;
1a4d82fc 27
cc61c64b 28 if arg.layout.is_aggregate() {
f2b60f7d 29 let pad_i32 = !offset.is_aligned(align);
e8be2606 30 arg.cast_to_and_pad_i32(Uniform::new(Reg::i32(), size), pad_i32);
1a4d82fc 31 } else {
54a0048b 32 arg.extend_integer_width_to(32);
1a4d82fc 33 }
1a4d82fc 34
a1dfa0c6 35 *offset = offset.align_to(align) + size.align_to(align);
1a4d82fc
JJ
36}
37
94222f64 38pub fn compute_abi_info<Ty, C>(cx: &C, fn_abi: &mut FnAbi<'_, Ty>)
dfeec247 39where
94222f64 40 C: HasDataLayout,
83c7162d 41{
94b46f34 42 let mut offset = Size::ZERO;
60c5eb7d
XL
43 if !fn_abi.ret.is_ignore() {
44 classify_ret(cx, &mut fn_abi.ret, &mut offset);
54a0048b 45 }
1a4d82fc 46
f2b60f7d 47 for arg in fn_abi.args.iter_mut() {
dfeec247
XL
48 if arg.is_ignore() {
49 continue;
50 }
60c5eb7d 51 classify_arg(cx, arg, &mut offset);
54a0048b 52 }
1a4d82fc 53}