Skip to content

Commit d2e0c93

Browse files
MabezDev0ndorio
authored andcommitted
Merge pull request rust-lang#3 from 0ndorio/fix/register_calculation
Fix argument register calculation. Co-authored-by: rnd <[email protected]>
1 parent 7b34499 commit d2e0c93

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

src/librustc_target/abi/call/xtensa.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,21 @@ fn classify_arg_ty<Ty>(arg: &mut ArgAbi<'_, Ty>, xlen: u64, remaining_gpr: &mut
1919
// according to the ABI. 2*XLen-aligned varargs are passed in "aligned"
2020
// register pairs, so may consume 3 registers.
2121

22-
let mut stack_required = false;
2322
let arg_size = arg.layout.size;
24-
let alignment = arg.layout.details.align.abi;
25-
23+
if arg_size.bits() > MAX_ARG_IN_REGS_SIZE {
24+
arg.make_indirect();
25+
return;
26+
}
2627

28+
let alignment = arg.layout.details.align.abi;
2729
let mut required_gpr = 1u64; // at least one per arg
2830
if alignment.bits() == 2 * xlen {
2931
required_gpr = 2 + (*remaining_gpr % 2);
3032
} else if arg_size.bits() > xlen && arg_size.bits() <= MAX_ARG_IN_REGS_SIZE {
31-
required_gpr = arg_size.bits() + (xlen - 1) / xlen;
33+
required_gpr = (arg_size.bits() + (xlen - 1)) / xlen;
3234
}
3335

36+
let mut stack_required = false;
3437
if required_gpr > *remaining_gpr {
3538
stack_required = true;
3639
required_gpr = *remaining_gpr;

0 commit comments

Comments
 (0)