x64: remove Inst::XmmLoadConst (#4876)
This is a cherry-pick of a long-ago commit, 2d46637. The original message reads: > Now that `SyntheticAmode` can refer to constants, there is no longer a > need for a separate instruction format--standard load instructions will > work. Since then, the transition to ISLE and the use of `XmmLoadConst` in many more places makes this change a larger diff than the original. The basic idea is the same, though: the extra indirection of `Inst::XMmLoadConst` is removed and replaced by a direct use of `VCodeConstant` as a `SyntheticAmode`. This has no effect on codegen, but the CLIF output is now clearer in that the actual instruction is displayed (e.g., `movdqu`) instead of a made-up instruction (`load_const`).
This commit is contained in:
@@ -246,12 +246,6 @@
|
||||
(src Reg)
|
||||
(dst SyntheticAmode))
|
||||
|
||||
;; XMM (vector) unary op (to move a constant value into an xmm register):
|
||||
;; movups
|
||||
(XmmLoadConst (src VCodeConstant)
|
||||
(dst WritableReg)
|
||||
(ty Type))
|
||||
|
||||
;; XMM (scalar) unary op (from xmm to integer reg): movd, movq,
|
||||
;; cvtts{s,d}2si
|
||||
(XmmToGpr (op SseOpcode)
|
||||
@@ -1716,9 +1710,7 @@
|
||||
;; Load a constant into an XMM register.
|
||||
(decl x64_xmm_load_const (Type VCodeConstant) Xmm)
|
||||
(rule (x64_xmm_load_const ty const)
|
||||
(let ((dst WritableXmm (temp_writable_xmm))
|
||||
(_ Unit (emit (MInst.XmmLoadConst const dst ty))))
|
||||
dst))
|
||||
(x64_load ty (const_to_synthetic_amode const) (ExtKind.None)))
|
||||
|
||||
;;;; Instruction Constructors ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;
|
||||
@@ -3856,6 +3848,8 @@
|
||||
(decl synthetic_amode_to_xmm_mem (SyntheticAmode) XmmMem)
|
||||
(rule (synthetic_amode_to_xmm_mem amode)
|
||||
(synthetic_amode_to_reg_mem amode))
|
||||
(decl const_to_synthetic_amode (VCodeConstant) SyntheticAmode)
|
||||
(extern constructor const_to_synthetic_amode const_to_synthetic_amode)
|
||||
|
||||
;; Helper for creating `MovPReg` instructions.
|
||||
(decl mov_preg (PReg) Reg)
|
||||
|
||||
Reference in New Issue
Block a user