diff options
| author | Maybe Waffle <waffle.lapkin@gmail.com> | 2022-05-11 17:52:00 +0400 |
|---|---|---|
| committer | Maybe Waffle <waffle.lapkin@gmail.com> | 2022-08-21 05:27:14 +0400 |
| commit | 5b32aa074762faa5d7132aa9d2943cf35a05d833 (patch) | |
| tree | be05172e96c4f26b3b55886ad7e06c5698339bbb | |
| parent | ee65a1018f54669b17c97bad979edfea1accafbf (diff) | |
| download | rust-5b32aa074762faa5d7132aa9d2943cf35a05d833.tar.gz rust-5b32aa074762faa5d7132aa9d2943cf35a05d833.zip | |
Add pointer masking convenience functions
This commit adds the following functions all of which have a signature `pointer, usize -> pointer`: - `<*mut T>::mask` - `<*const T>::mask` - `intrinsics::ptr_mask` These functions are equivalent to `.map_addr(|a| a & mask)` but they utilize `llvm.ptrmask` llvm intrinsic. *masks your pointers*
| -rw-r--r-- | src/intrinsics/mod.rs | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/intrinsics/mod.rs b/src/intrinsics/mod.rs index b2a83e1d4eb..65e964c786b 100644 --- a/src/intrinsics/mod.rs +++ b/src/intrinsics/mod.rs @@ -540,6 +540,13 @@ fn codegen_regular_intrinsic_call<'tcx>( ret.write_cvalue(fx, CValue::by_val(res, base.layout())); } + sym::ptr_mask => { + intrinsic_args!(fx, args => (ptr, mask); intrinsic); + let ptr_val = ptr.load_scalar(fx); + + fx.bcx.ins().band(ptr_val, mask); + } + sym::transmute => { intrinsic_args!(fx, args => (from); intrinsic); |
