Port widening ops to ISLE (AArch64) (#4751)
Ported the existing implementations of the following opcodes for AArch64 to ISLE, and implemented support for 64-bit vectors (per the docs): - `SwidenLow` - `SwidenHigh` - `UwidenLow` - `UwidenHigh` Also ported `WideningPairwiseDotProductS` as-is. Copyright (c) 2022 Arm Limited
This commit is contained in:
@@ -528,7 +528,8 @@
|
||||
(t VecExtendOp)
|
||||
(rd WritableReg)
|
||||
(rn Reg)
|
||||
(high_half bool))
|
||||
(high_half bool)
|
||||
(lane_size ScalarSize))
|
||||
|
||||
;; Move vector element to another vector element.
|
||||
(VecMovElement
|
||||
@@ -1080,18 +1081,10 @@
|
||||
;; Type of vector element extensions.
|
||||
(type VecExtendOp
|
||||
(enum
|
||||
;; Signed extension of 8-bit elements
|
||||
(Sxtl8)
|
||||
;; Signed extension of 16-bit elements
|
||||
(Sxtl16)
|
||||
;; Signed extension of 32-bit elements
|
||||
(Sxtl32)
|
||||
;; Unsigned extension of 8-bit elements
|
||||
(Uxtl8)
|
||||
;; Unsigned extension of 16-bit elements
|
||||
(Uxtl16)
|
||||
;; Unsigned extension of 32-bit elements
|
||||
(Uxtl32)
|
||||
;; Signed extension
|
||||
(Sxtl)
|
||||
;; Unsigned extension
|
||||
(Uxtl)
|
||||
))
|
||||
|
||||
;; A vector ALU operation.
|
||||
@@ -1844,6 +1837,12 @@
|
||||
(_ Unit (emit (MInst.MovFromVecSigned dst rn idx size scalar_size))))
|
||||
dst))
|
||||
|
||||
(decl fpu_move_from_vec (Reg u8 VectorSize) Reg)
|
||||
(rule (fpu_move_from_vec rn idx size)
|
||||
(let ((dst WritableReg (temp_writable_reg $I8X16))
|
||||
(_ Unit (emit (MInst.FpuMoveFromVec dst rn idx size))))
|
||||
dst))
|
||||
|
||||
;; Helper for emitting `MInst.Extend` instructions.
|
||||
(decl extend (Reg bool u8 u8) Reg)
|
||||
(rule (extend rn signed from_bits to_bits)
|
||||
@@ -1858,6 +1857,13 @@
|
||||
(_ Unit (emit (MInst.FpuExtend dst src size))))
|
||||
dst))
|
||||
|
||||
;; Helper for emitting `MInst.VecExtend` instructions.
|
||||
(decl vec_extend (VecExtendOp Reg bool ScalarSize) Reg)
|
||||
(rule (vec_extend op src high_half size)
|
||||
(let ((dst WritableReg (temp_writable_reg $I8X16))
|
||||
(_ Unit (emit (MInst.VecExtend op dst src high_half size))))
|
||||
dst))
|
||||
|
||||
;; Helper for emitting `MInst.LoadAcquire` instructions.
|
||||
(decl load_acquire (Type Reg) Reg)
|
||||
(rule (load_acquire ty addr)
|
||||
|
||||
Reference in New Issue
Block a user