gen_wasm: Implement u128 right shift by delegating to compiler_rt

This commit is contained in:
Brian Carroll 2022-12-04 20:42:14 +00:00
parent f30811baac
commit 28d6d000ec
No known key found for this signature in database
GPG key ID: 5C7B2EC4101703C0
2 changed files with 11 additions and 1 deletions

View file

@ -1716,7 +1716,7 @@ impl<'a> LowLevelCall<'a> {
backend.code_builder.i64_extend_u_i32();
backend.code_builder.i64_shr_u();
}
I128 => todo!("{:?} for I128", self.lowlevel),
I128 => self.load_args_and_call_zig(backend, "__lshrti3"), // from compiler_rt
_ => panic_ret_type(),
}
}

View file

@ -2156,6 +2156,16 @@ fn shift_right_zf_by() {
assert_evals_to!("Num.shiftRightZfBy 0b0000_0010u8 1", 0b0000_0001u8, u8);
assert_evals_to!("Num.shiftRightZfBy 0b0000_1100u8 2", 0b0000_0011u8, u8);
assert_evals_to!("Num.shiftRightZfBy 0b1000_0000u8 12", 0b0000_0000u8, u8);
assert_evals_to!(
"Num.shiftRightZfBy 0xffff_0000_0000_0000_0000_0000_0000_ffffu128 4",
0x0fff_f000_0000_0000_0000_0000_0000_0fffu128,
u128
);
assert_evals_to!(
"Num.shiftRightZfBy 0xaaaa_0000_0000_bbbb_ffff_ffff_ffff_ffffu128 68",
0x0000_0000_0000_0000_0aaa_a000_0000_0bbbu128,
u128
);
}
#[test]