diff options
| author | Ralf Jung <post@ralfj.de> | 2023-12-05 07:42:13 +0100 |
|---|---|---|
| committer | Ralf Jung <post@ralfj.de> | 2023-12-05 07:42:13 +0100 |
| commit | 1fa8fd800f7cdd245b8ea73dd0673a1cf434d925 (patch) | |
| tree | 8fe1f2530f94a2fbabf5ba2c69cd2d5a55e78537 | |
| parent | ff95f8b8723be0b6e6413f05d9da8b2aecbea613 (diff) | |
| download | rust-1fa8fd800f7cdd245b8ea73dd0673a1cf434d925.tar.gz rust-1fa8fd800f7cdd245b8ea73dd0673a1cf434d925.zip | |
simd numeric intrinsics: share code with scalar intrinsic
| -rw-r--r-- | src/tools/miri/src/shims/intrinsics/simd.rs | 13 |
1 files changed, 1 insertions, 12 deletions
diff --git a/src/tools/miri/src/shims/intrinsics/simd.rs b/src/tools/miri/src/shims/intrinsics/simd.rs index a514cadcec9..e17c06be9b8 100644 --- a/src/tools/miri/src/shims/intrinsics/simd.rs +++ b/src/tools/miri/src/shims/intrinsics/simd.rs @@ -115,18 +115,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriInterpCxExt<'mir, 'tcx> { } } Op::Numeric(name) => { - assert!(op.layout.ty.is_integral()); - let size = op.layout.size; - let bits = op.to_scalar().to_bits(size).unwrap(); - let extra = 128u128.checked_sub(u128::from(size.bits())).unwrap(); - let bits_out = match name { - sym::ctlz => u128::from(bits.leading_zeros()).checked_sub(extra).unwrap(), - sym::cttz => u128::from((bits << extra).trailing_zeros()).checked_sub(extra).unwrap(), - sym::bswap => (bits << extra).swap_bytes(), - sym::bitreverse => (bits << extra).reverse_bits(), - _ => unreachable!(), - }; - Scalar::from_uint(bits_out, size) + this.numeric_intrinsic(name, op.to_scalar(), op.layout)? } }; this.write_scalar(val, &dest)?; |
