Browse Source

Don't reuse registers in make_i64x2_from_lanes (#5355)

Avoid reusing output registers in make_i64x2_from_lanes by threading the output name instead, and using smart constructors for x64_pinsrd instead of constructing the instructions directly.
pull/5357/head
Trevor Elliott 2 years ago
committed by GitHub
parent
commit
87b63174b1
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 20
      cranelift/codegen/src/isa/x64/inst.isle

20
cranelift/codegen/src/isa/x64/inst.isle

@ -1566,22 +1566,10 @@
;; Helper for creating an SSE register holding an `i64x2` from two `i64` values.
(decl make_i64x2_from_lanes (GprMem GprMem) Xmm)
(rule (make_i64x2_from_lanes lo hi)
(let ((dst_xmm WritableXmm (temp_writable_xmm))
(dst_reg WritableReg dst_xmm)
(_ Unit (emit (MInst.XmmUninitializedValue dst_xmm)))
(_ Unit (emit (MInst.XmmRmRImm (SseOpcode.Pinsrd)
dst_reg
lo
dst_reg
0
(OperandSize.Size64))))
(_ Unit (emit (MInst.XmmRmRImm (SseOpcode.Pinsrd)
dst_reg
hi
dst_reg
1
(OperandSize.Size64)))))
dst_xmm))
(let ((dst Xmm (xmm_uninit_value))
(dst Xmm (x64_pinsrd dst lo 0 (OperandSize.Size64)))
(dst Xmm (x64_pinsrd dst hi 1 (OperandSize.Size64))))
dst))
;; Move a `RegMemImm.Reg` operand to an XMM register, if necessary.
(decl mov_rmi_to_xmm (RegMemImm) XmmMemImm)

Loading…
Cancel
Save