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
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with
4 additions and
16 deletions
cranelift/codegen/src/isa/x64/inst.isle
@ -1566,22 +1566,10 @@
;; Helper for creating an SSE register holding an `i64x2` from two `i64` values.
;; Helper for creating an SSE register holding an `i64x2` from two `i64` values.
(decl make_i64x2_from_lanes (GprMem GprMem) Xmm)
(decl make_i64x2_from_lanes (GprMem GprMem) Xmm)
(rule (make_i64x2_from_lanes lo hi)
(rule (make_i64x2_from_lanes lo hi)
(let ((dst_xmm WritableXmm (temp_writable_xmm))
(let ((dst Xmm (xmm_uninit_value))
(dst_reg WritableReg dst_xmm)
(dst Xmm (x64_pinsrd dst lo 0 (OperandSize.Size64)))
(_ Unit (emit (MInst.XmmUninitializedValue dst_xmm)))
(dst Xmm (x64_pinsrd dst hi 1 (OperandSize.Size64))))
(_ Unit (emit (MInst.XmmRmRImm (SseOpcode.Pinsrd)
dst))
dst_reg
lo
dst_reg
0
(OperandSize.Size64))))
(_ Unit (emit (MInst.XmmRmRImm (SseOpcode.Pinsrd)
dst_reg
hi
dst_reg
1
(OperandSize.Size64)))))
dst_xmm))
;; Move a `RegMemImm.Reg` operand to an XMM register, if necessary.
;; Move a `RegMemImm.Reg` operand to an XMM register, if necessary.
(decl mov_rmi_to_xmm (RegMemImm) XmmMemImm)
(decl mov_rmi_to_xmm (RegMemImm) XmmMemImm)