x64 backend: migrate stores, and remainder of loads (I128 case), to ISLE. (#4069)

This commit is contained in:
Chris Fallin
2022-04-26 09:50:46 -07:00
committed by GitHub
parent f384938a10
commit 164bfeaf7e
12 changed files with 792 additions and 406 deletions

View File

@@ -838,6 +838,11 @@
(rule (to_amode flags base offset)
(amode_imm_reg_flags offset (put_in_gpr base) flags))
;; Offsetting an Amode. Used when we need to do consecutive
;; loads/stores to adjacent addresses.
(decl amode_offset (Amode u32) Amode)
(extern constructor amode_offset amode_offset)
;; Shift kinds.
(type ShiftKind extern
@@ -1404,6 +1409,15 @@
(rule (x64_pmovzxdq from)
(xmm_unary_rm_r (SseOpcode.Pmovzxdq) from))
(decl x64_movrm (Type SyntheticAmode Gpr) SideEffectNoResult)
(rule (x64_movrm ty addr data)
(let ((size OperandSize (raw_operand_size_of_type ty)))
(SideEffectNoResult.Inst (MInst.MovRM size data addr))))
(decl x64_xmm_movrm (SseOpcode SyntheticAmode Xmm) SideEffectNoResult)
(rule (x64_xmm_movrm op addr data)
(SideEffectNoResult.Inst (MInst.XmmMovRM op data addr)))
;; Load a constant into an XMM register.
(decl x64_xmm_load_const (Type VCodeConstant) Xmm)
(rule (x64_xmm_load_const ty const)