Move emit and emit_safepoint to prelude.isle
Even though the implementation of emit and emit_safepoint may be platform-specific, the interface ought to be common so that other code in prelude.isle may safely call these constructors. This patch moves the definition of emit (from all platforms) and emit_safepoint (s390x only) to prelude.isle. This required adding an emit_safepoint implementation to aarch64 and x64 as well - the latter is still a stub as special move mitosis handling will be required.
This commit is contained in:
@@ -277,6 +277,19 @@
|
||||
(extractor (u64_from_iconst x)
|
||||
(def_inst (iconst (u64_from_imm64 x))))
|
||||
|
||||
;; Instruction creation helpers ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
;; Emit an instruction.
|
||||
;;
|
||||
;; This is low-level and side-effectful; it should only be used as an
|
||||
;; implementation detail by helpers that preserve the SSA facade themselves.
|
||||
|
||||
(decl emit (MInst) Unit)
|
||||
(extern constructor emit emit)
|
||||
|
||||
(decl emit_safepoint (MInst) Unit)
|
||||
(extern constructor emit_safepoint emit_safepoint)
|
||||
|
||||
;;;; Helpers for Side-Effectful Instructions Without Results ;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(type SideEffectNoResult (enum (Inst (inst MInst))))
|
||||
@@ -288,6 +301,12 @@
|
||||
(let ((_ Unit (emit inst)))
|
||||
(value_regs_invalid)))
|
||||
|
||||
;; Similarly, but emit the side-effectful instruction as a safepoint.
|
||||
(decl safepoint (SideEffectNoResult) ValueRegs)
|
||||
(rule (safepoint (SideEffectNoResult.Inst inst))
|
||||
(let ((_ Unit (emit_safepoint inst)))
|
||||
(value_regs_invalid)))
|
||||
|
||||
;;;; Helpers for Working with Flags ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
;; Newtype wrapper around `MInst` for instructions that are used for their
|
||||
|
||||
Reference in New Issue
Block a user