about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2023-12-05 07:42:13 +0100
committerRalf Jung <post@ralfj.de>2023-12-05 07:42:13 +0100
commit1fa8fd800f7cdd245b8ea73dd0673a1cf434d925 (patch)
tree8fe1f2530f94a2fbabf5ba2c69cd2d5a55e78537
parentff95f8b8723be0b6e6413f05d9da8b2aecbea613 (diff)
downloadrust-1fa8fd800f7cdd245b8ea73dd0673a1cf434d925.tar.gz
rust-1fa8fd800f7cdd245b8ea73dd0673a1cf434d925.zip
simd numeric intrinsics: share code with scalar intrinsic
-rw-r--r--src/tools/miri/src/shims/intrinsics/simd.rs13
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)?;