diff options
| author | Maybe Waffle <waffle.lapkin@gmail.com> | 2022-05-13 17:08:44 +0400 |
|---|---|---|
| committer | Maybe Waffle <waffle.lapkin@gmail.com> | 2022-08-21 05:27:14 +0400 |
| commit | 4c54973b65713dccfafd3035de2c60945945be57 (patch) | |
| tree | 1afd409e5907fcb3fde430bbdf29c615f55c464e /compiler/rustc_codegen_gcc | |
| parent | a6183c2f44309a32a54ce13da91ebd4ee49b51c9 (diff) | |
| download | rust-4c54973b65713dccfafd3035de2c60945945be57.tar.gz rust-4c54973b65713dccfafd3035de2c60945945be57.zip | |
Fix `ptr_mask` impl in cg gcc
Diffstat (limited to 'compiler/rustc_codegen_gcc')
| -rw-r--r-- | compiler/rustc_codegen_gcc/src/intrinsic/mod.rs | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/compiler/rustc_codegen_gcc/src/intrinsic/mod.rs b/compiler/rustc_codegen_gcc/src/intrinsic/mod.rs index b0e7e5e1dd0..beb9a800144 100644 --- a/compiler/rustc_codegen_gcc/src/intrinsic/mod.rs +++ b/compiler/rustc_codegen_gcc/src/intrinsic/mod.rs @@ -309,8 +309,18 @@ impl<'a, 'gcc, 'tcx> IntrinsicCallMethods<'tcx> for Builder<'a, 'gcc, 'tcx> { return; } - sym::ptr_mask => self.and(args[0].immediate(), args[1].immediate()), + sym::ptr_mask => { + let usize_type = self.context.new_type::<usize>(); + let void_ptr_type = self.context.new_type::<*const ()>(); + let ptr = args[0].immediate(); + let mask = args[1].immediate(); + + let addr = self.bitcast(ptr, usize_type); + let masked = self.and(addr, mask); + self.bitcast(masked, void_ptr_type) + }, + _ if name_str.starts_with("simd_") => { match generic_simd_intrinsic(self, name, callee_ty, args, ret_ty, llret_ty, span) { Ok(llval) => llval, |
