| use builtins_test::*; |
| |
| macro_rules! shift { |
| ($($i:ty, $fn_std:ident, $fn_builtins:ident);*;) => { |
| $( |
| #[test] |
| fn $fn_builtins() { |
| use compiler_builtins::int::shift::$fn_builtins; |
| |
| fuzz_shift(|x: $i, s: u32| { |
| let tmp0: $i = x.$fn_std(s); |
| let tmp1: $i = $fn_builtins(x, s); |
| if tmp0 != tmp1 { |
| panic!( |
| "{}({}, {}): std: {}, builtins: {}", |
| stringify!($fn_builtins), x, s, tmp0, tmp1 |
| ); |
| } |
| }); |
| } |
| )* |
| }; |
| } |
| |
| shift! { |
| u32, wrapping_shl, __ashlsi3; |
| u64, wrapping_shl, __ashldi3; |
| u128, wrapping_shl, __ashlti3; |
| i32, wrapping_shr, __ashrsi3; |
| i64, wrapping_shr, __ashrdi3; |
| i128, wrapping_shr, __ashrti3; |
| u32, wrapping_shr, __lshrsi3; |
| u64, wrapping_shr, __lshrdi3; |
| u128, wrapping_shr, __lshrti3; |
| } |