diff --git a/cranelift/codegen/src/isa/x64/lower.rs b/cranelift/codegen/src/isa/x64/lower.rs index 3867ddc255..2d51d15951 100644 --- a/cranelift/codegen/src/isa/x64/lower.rs +++ b/cranelift/codegen/src/isa/x64/lower.rs @@ -2554,17 +2554,18 @@ fn lower_insn_to_regs>( ctx.emit(Inst::xmm_load_const(constant, zero_mask, ty)); // Use the `zero_mask` on a writable `swizzle_mask`. - let swizzle_mask = Writable::from_reg(swizzle_mask); + let swizzle_mask_tmp = ctx.alloc_tmp(types::I8X16).only_reg().unwrap(); + ctx.emit(Inst::gen_move(swizzle_mask_tmp, swizzle_mask, ty)); ctx.emit(Inst::xmm_rm_r( SseOpcode::Paddusb, RegMem::from(zero_mask), - swizzle_mask, + swizzle_mask_tmp, )); // Shuffle `dst` using the fixed-up `swizzle_mask`. ctx.emit(Inst::xmm_rm_r( SseOpcode::Pshufb, - RegMem::from(swizzle_mask), + RegMem::from(swizzle_mask_tmp), dst, )); }