master: sb-simd: support for load/store to and from SAPs
stassats via Sbcl-commits <[email protected]> Sun, 02 Aug 2026 14:03:16 +0000
| Newsgroups | gmane.lisp.steel-bank.cvs |
|---|---|
| Message-ID | <[email protected]> |
The branch "master" has been updated in SBCL:
via a659610f72c82d9bfb8a4d9eee0eeb014f016672 (commit)
from 1a8c99523f5a3ca874ccbf1923d686fe5ff3db4d (commit)
- Log -----------------------------------------------------------------
commit a659610f72c82d9bfb8a4d9eee0eeb014f016672
Author: arthur <[email protected]>
Date: Fri Jul 24 12:37:09 2026 +0200
sb-simd: support for load/store to and from SAPs
---
contrib/sb-simd/code/define-arefs.lisp | 2 +
contrib/sb-simd/code/define-reffers.lisp | 26 ++-
contrib/sb-simd/code/define-vref-vops.lisp | 47 ++++-
contrib/sb-simd/code/define-vrefs.lisp | 52 +++--
contrib/sb-simd/code/instruction-sets/avx.lisp | 136 +++++++-------
contrib/sb-simd/code/instruction-sets/avx2.lisp | 80 ++++----
contrib/sb-simd/code/instruction-sets/neon.lisp | 44 ++---
contrib/sb-simd/code/instruction-sets/sb-simd.lisp | 20 +-
contrib/sb-simd/code/instruction-sets/sse.lisp | 10 +-
contrib/sb-simd/code/instruction-sets/sse2.lisp | 61 +++---
contrib/sb-simd/code/instruction-sets/sse4-1.lisp | 40 ++--
contrib/sb-simd/code/packages.lisp | 209 ++++++++++++---------
contrib/sb-simd/code/record.lisp | 92 ++++++++-
13 files changed, 501 insertions(+), 318 deletions(-)
diff --git a/contrib/sb-simd/code/define-arefs.lisp b/contrib/sb-simd/code/define-arefs.lisp
index 9692adb7e..12b9a2261 100644
--- a/contrib/sb-simd/code/define-arefs.lisp
+++ b/contrib/sb-simd/code/define-arefs.lisp
@@ -101,6 +101,7 @@
((define-aref (load-record-name)
(with-accessors ((load load-record-name)
(aref load-record-aref)
+ (sap-ref load-record-sap-ref)
(row-major-aref load-record-row-major-aref)
(value-record load-record-value-record)
(vector-record load-record-vector-record))
@@ -134,6 +135,7 @@
(define-setf-aref (store-record-name)
(with-accessors ((store store-record-name)
(aref store-record-aref)
+ (sap-ref store-record-sap-ref)
(row-major-aref store-record-row-major-aref)
(value-record store-record-value-record)
(vector-record store-record-vector-record))
diff --git a/contrib/sb-simd/code/define-reffers.lisp b/contrib/sb-simd/code/define-reffers.lisp
index d6261cb06..3d916c0d4 100644
--- a/contrib/sb-simd/code/define-reffers.lisp
+++ b/contrib/sb-simd/code/define-reffers.lisp
@@ -32,6 +32,19 @@
`(let ((,v ,value))
(setf (aref (the (array ,',type) ,array) ,@subscripts)
,v)))))
+ when (sap-ref-record-p record) collect
+ (let ((bits (value-record-bits value-record))
+ (cl-type (value-record-type value-record)))
+ `(define-inline ,name (sap index)
+ (declare (type sb-alien:system-area-pointer sap) (type index index))
+ ,(cond ((subtypep cl-type 'single-float)
+ `(sb-sys:sap-ref-single sap index))
+ ((subtypep cl-type 'double-float)
+ `(sb-sys:sap-ref-double sap index))
+ ((subtypep cl-type 'signed-byte)
+ `(,(mksym "SB-SYS" "SIGNED-SAP-REF-" (format nil "~D" bits)) sap index))
+ (t
+ `(,(mksym "SB-SYS" "SAP-REF-" (format nil "~D" bits)) sap index)))))
when (row-major-aref-record-p record) collect
`(define-inline ,name (array index)
(declare (type (array ,type) array))
@@ -40,5 +53,16 @@
`(define-inline ,name (value array index)
(declare (type ,type value)
(type (array ,type) array))
- (setf (row-major-aref array index) value))))))
+ (setf (row-major-aref array index) value))
+ when (setf-sap-ref-record-p record) collect
+ (let ((bits (value-record-bits value-record))
+ (cl-type (value-record-type value-record)))
+ `(define-inline ,name (value sap index)
+ (declare (type ,cl-type value) (type sb-alien:system-area-pointer sap) (type index index))
+ (setf ,(cond ((subtypep cl-type 'single-float) `(sb-sys:sap-ref-single sap index))
+ ((subtypep cl-type 'double-float) `(sb-sys:sap-ref-double sap index))
+ ((subtypep cl-type 'signed-byte)
+ `(,(mksym "SB-SYS" "SIGNED-SAP-REF-" (format nil "~D" bits)) sap index))
+ (t `(,(mksym "SB-SYS" "SAP-REF-" (format nil "~D" bits)) sap index)))
+ value)))))))
(define-reffers))
diff --git a/contrib/sb-simd/code/define-vref-vops.lisp b/contrib/sb-simd/code/define-vref-vops.lisp
index 3f143b722..2eaca11ae 100644
--- a/contrib/sb-simd/code/define-vref-vops.lisp
+++ b/contrib/sb-simd/code/define-vref-vops.lisp
@@ -16,9 +16,12 @@
(mnemonic sb-simd-internals:vref-record-mnemonic)
(value-record sb-simd-internals:vref-record-value-record)
(vector-record sb-simd-internals:vref-record-vector-record)
- (store sb-simd-internals:store-record-p))
+ (store sb-simd-internals:store-record-p)
+ (sap-ref sb-simd-internals:vref-record-sap-ref))
(sb-simd-internals:find-function-record vref-record-name)
- (let* ((vector-type (sb-simd-internals:value-record-type vector-record))
+ (let* ((sap-vop (when sap-ref (sb-simd-internals:mksym (symbol-package name) (if store "%SET-" "%") sap-ref)))
+ (sap-vop-c (when sap-ref (sb-simd-internals:mksym (symbol-package name) (if store "%SET-" "%") sap-ref "-C")))
+ (vector-type (sb-simd-internals:value-record-type vector-record))
(vector-primitive-type (sb-simd-internals:value-record-primitive-type vector-record))
(value-scs (sb-simd-internals:value-record-scs value-record))
(value-type (sb-simd-internals:value-record-type value-record))
@@ -88,7 +91,45 @@
(if store
`((inst ,mnemonic ,ea value)
(move result value))
- `((inst ,mnemonic result ,ea)))))))))))
+ `((inst ,mnemonic result ,ea))))))
+ ,@(when sap-ref
+ `((sb-c:defknown ,sap-vop (,@(when store `(,value-type))
+ sb-alien:system-area-pointer index ,displacement)
+ (values ,value-type &optional) (always-translatable) :overwrite-fndb-silently t)
+ (define-vop (,sap-vop)
+ (:translate ,sap-vop)
+ (:policy :fast-safe)
+ (:args ,@(when store `((value :scs ,value-scs :target result)))
+ (sap :scs (sap-reg))
+ (index :scs ,index-scs))
+ (:info addend)
+ (:arg-types ,@(when store `(,value-primitive-type))
+ sb-alien:system-area-pointer positive-fixnum
+ (:constant ,displacement))
+ (:results (result :scs ,value-scs))
+ (:result-types ,value-primitive-type)
+ (:generator 2
+ ,@(let ((ea `(ea (* addend ,bytes-per-element) sap index ,scale)))
+ (if store
+ `((inst ,mnemonic ,ea value) (move result value))
+ `((inst ,mnemonic result ,ea))))))
+ (define-vop (,sap-vop-c)
+ (:translate ,sap-vop)
+ (:policy :fast-safe)
+ (:args ,@(when store `((value :scs ,value-scs :target result)))
+ (sap :scs (sap-reg)))
+ (:info index addend)
+ (:arg-types ,@(when store `(,value-primitive-type))
+ sb-alien:system-area-pointer
+ (:constant low-index)
+ (:constant ,displacement))
+ (:results (result :scs ,value-scs))
+ (:result-types ,value-primitive-type)
+ (:generator 1
+ ,@(let ((ea `(ea (* ,bytes-per-element (+ index addend)) sap)))
+ (if store
+ `((inst ,mnemonic ,ea value) (move result value))
+ `((inst ,mnemonic result ,ea)))))))))))))
(define-vref-vops ()
`(progn
,@(loop for vref-record
diff --git a/contrib/sb-simd/code/define-vrefs.lisp b/contrib/sb-simd/code/define-vrefs.lisp
index 11186b567..dbcd89429 100644
--- a/contrib/sb-simd/code/define-vrefs.lisp
+++ b/contrib/sb-simd/code/define-vrefs.lisp
@@ -6,43 +6,59 @@
(instruction-set vref-record-instruction-set)
(value-record vref-record-value-record)
(vector-record vref-record-vector-record)
- (vop vref-record-vop))
+ (vop vref-record-vop)
+ (sap vref-record-sap-ref))
(find-function-record name)
(let* ((simd-width (value-record-simd-width value-record))
(element-type
(second
- (value-record-type vector-record))))
+ (value-record-type vector-record)))
+ (sap-vop (when sap (mksym (symbol-package name) (if (eq kind :store) "%SET-" "%") sap))))
+ (declare (ignorable simd-width element-type))
(ecase kind
(:load
(if (not (instruction-set-available-p instruction-set))
`(define-missing-instruction ,name
:required-arguments (array index))
- `(define-inline ,name (array index)
- (declare (type (array ,element-type) array)
- (index index))
- (sb-kernel:check-bound array (array-total-size array) (+ index ,(1- simd-width)))
- (multiple-value-bind (vector index)
- (sb-kernel:%data-vector-and-index array index)
- (declare (type (simple-array ,element-type (*)) vector))
- (,vop vector index 0)))))
+ `(progn
+ (define-inline ,name (array index)
+ (declare (type (array ,element-type) array)
+ (index index))
+ (sb-kernel:check-bound array (array-total-size array) (+ index ,(1- simd-width)))
+ (multiple-value-bind (vector index)
+ (sb-kernel:%data-vector-and-index array index)
+ (declare (type (simple-array ,element-type (*)) vector))
+ (,vop vector index 0)))
+ ,@(when sap
+ `((define-inline ,sap (sap index)
+ (declare (type sb-alien:system-area-pointer sap) (type index index))
+ (,sap-vop sap index 0)))))))
(:store
(if (not (instruction-set-available-p instruction-set))
`(define-missing-instruction ,name
:required-arguments (value array index))
- `(define-inline ,name (value array index)
- (declare (type (array ,element-type) array)
- (index index))
- (sb-kernel:check-bound array (array-total-size array) (+ index ,(1- simd-width)))
- (multiple-value-bind (vector index)
- (sb-kernel:%data-vector-and-index array index)
- (declare (type (simple-array ,element-type (*)) vector))
- (,vop (,(value-record-name value-record) value) vector index 0)))))))))
+ `(progn
+ (define-inline ,name (value array index)
+ (declare (type (array ,element-type) array)
+ (index index))
+ (sb-kernel:check-bound array (array-total-size array) (+ index ,(1- simd-width)))
+ (multiple-value-bind (vector index)
+ (sb-kernel:%data-vector-and-index array index)
+ (declare (type (simple-array ,element-type (*)) vector))
+ (,vop (,(value-record-name value-record) value) vector
+ index 0)))
+ ,@(when sap
+ `((define-inline (setf ,sap) (value sap index)
+ (declare (type sb-alien:system-area-pointer sap) (type index index))
+ (,sap-vop (,(value-record-name value-record) value) sap index 0)))))))))))
(define-vrefs ()
`(progn
,@(loop for load-record in (filter-function-records #'load-record-p)
for name = (load-record-name load-record)
+ for sap = (vref-record-sap-ref load-record)
collect `(define-vref ,name :load))
,@(loop for store-record in (filter-function-records #'store-record-p)
for name = (store-record-name store-record)
+ for sap = (vref-record-sap-ref store-record)
collect `(define-vref ,name :store)))))
(define-vrefs))
diff --git a/contrib/sb-simd/code/instruction-sets/avx.lisp b/contrib/sb-simd/code/instruction-sets/avx.lisp
index f10877081..4af8b6102 100644
--- a/contrib/sb-simd/code/instruction-sets/avx.lisp
+++ b/contrib/sb-simd/code/instruction-sets/avx.lisp
@@ -641,78 +641,78 @@
(s64.4-permute128 #:vperm2f128 (s64.4) (s64.4 s64.4 imm8) :cost 1))
(:loads
#+sb-unicode
- (u32.4-load-from-string #:vmovdqu u32.4 charvec char-array u32.4-string-ref u32.4-row-major-string-ref)
+ (u32.4-load-from-string #:vmovdqu u32.4 charvec char-array u32.4-string-ref u32.4-row-major-string-ref u32.4-string-sap-ref)
#+sb-unicode
- (u32.8-load-from-string #:vmovdqu u32.8 charvec char-array u32.8-string-ref u32.8-row-major-string-ref)
- (f32-load #:vmovss f32 f32vec f32-array f32-aref f32-row-major-aref)
- (f64-load #:vmovsd f64 f64vec f64-array f64-aref f64-row-major-aref)
- (f32.4-load #:vmovups f32.4 f32vec f32-array f32.4-aref f32.4-row-major-aref)
- (f64.2-load #:vmovupd f64.2 f64vec f64-array f64.2-aref f64.2-row-major-aref)
- (f32.8-load #:vmovups f32.8 f32vec f32-array f32.8-aref f32.8-row-major-aref)
- (f64.4-load #:vmovupd f64.4 f64vec f64-array f64.4-aref f64.4-row-major-aref)
- (u8.16-load #:vmovdqu u8.16 u8vec u8-array u8.16-aref u8.16-row-major-aref)
- (u16.8-load #:vmovdqu u16.8 u16vec u16-array u16.8-aref u16.8-row-major-aref)
- (u32.4-load #:vmovdqu u32.4 u32vec u32-array u32.4-aref u32.4-row-major-aref)
- (u64.2-load #:vmovdqu u64.2 u64vec u64-array u64.2-aref u64.2-row-major-aref)
- (u8.32-load #:vmovdqu u8.32 u8vec u8-array u8.32-aref u8.32-row-major-aref)
- (u16.16-load #:vmovdqu u16.16 u16vec u16-array u16.16-aref u16.16-row-major-aref)
- (u32.8-load #:vmovdqu u32.8 u32vec u32-array u32.8-aref u32.8-row-major-aref)
- (u64.4-load #:vmovdqu u64.4 u64vec u64-array u64.4-aref u64.4-row-major-aref)
- (s8.16-load #:vmovdqu s8.16 s8vec s8-array s8.16-aref s8.16-row-major-aref)
- (s16.8-load #:vmovdqu s16.8 s16vec s16-array s16.8-aref s16.8-row-major-aref)
- (s32.4-load #:vmovdqu s32.4 s32vec s32-array s32.4-aref s32.4-row-major-aref)
- (s64.2-load #:vmovdqu s64.2 s64vec s64-array s64.2-aref s64.2-row-major-aref)
- (s8.32-load #:vmovdqu s8.32 s8vec s8-array s8.32-aref s8.32-row-major-aref)
- (s16.16-load #:vmovdqu s16.16 s16vec s16-array s16.16-aref s16.16-row-major-aref)
- (s32.8-load #:vmovdqu s32.8 s32vec s32-array s32.8-aref s32.8-row-major-aref)
- (s64.4-load #:vmovdqu s64.4 s64vec s64-array s64.4-aref s64.4-row-major-aref))
+ (u32.8-load-from-string #:vmovdqu u32.8 charvec char-array u32.8-string-ref u32.8-row-major-string-ref u32.8-string-sap-ref)
+ (f32-load #:vmovss f32 f32vec f32-array f32-aref f32-row-major-aref f32-sap-ref)
+ (f64-load #:vmovsd f64 f64vec f64-array f64-aref f64-row-major-aref f64-sap-ref)
+ (f32.4-load #:vmovups f32.4 f32vec f32-array f32.4-aref f32.4-row-major-aref f32.4-sap-ref)
+ (f64.2-load #:vmovupd f64.2 f64vec f64-array f64.2-aref f64.2-row-major-aref f64.2-sap-ref)
+ (f32.8-load #:vmovups f32.8 f32vec f32-array f32.8-aref f32.8-row-major-aref f32.8-sap-ref)
+ (f64.4-load #:vmovupd f64.4 f64vec f64-array f64.4-aref f64.4-row-major-aref f64.4-sap-ref)
+ (u8.16-load #:vmovdqu u8.16 u8vec u8-array u8.16-aref u8.16-row-major-aref u8.16-sap-ref)
+ (u16.8-load #:vmovdqu u16.8 u16vec u16-array u16.8-aref u16.8-row-major-aref u16.8-sap-ref)
+ (u32.4-load #:vmovdqu u32.4 u32vec u32-array u32.4-aref u32.4-row-major-aref u32.4-sap-ref)
+ (u64.2-load #:vmovdqu u64.2 u64vec u64-array u64.2-aref u64.2-row-major-aref u64.2-sap-ref)
+ (u8.32-load #:vmovdqu u8.32 u8vec u8-array u8.32-aref u8.32-row-major-aref u8.32-sap-ref)
+ (u16.16-load #:vmovdqu u16.16 u16vec u16-array u16.16-aref u16.16-row-major-aref u16.16-sap-ref)
+ (u32.8-load #:vmovdqu u32.8 u32vec u32-array u32.8-aref u32.8-row-major-aref u32.8-sap-ref)
+ (u64.4-load #:vmovdqu u64.4 u64vec u64-array u64.4-aref u64.4-row-major-aref u64.4-sap-ref)
+ (s8.16-load #:vmovdqu s8.16 s8vec s8-array s8.16-aref s8.16-row-major-aref s8.16-sap-ref)
+ (s16.8-load #:vmovdqu s16.8 s16vec s16-array s16.8-aref s16.8-row-major-aref s16.8-sap-ref)
+ (s32.4-load #:vmovdqu s32.4 s32vec s32-array s32.4-aref s32.4-row-major-aref s32.4-sap-ref)
+ (s64.2-load #:vmovdqu s64.2 s64vec s64-array s64.2-aref s64.2-row-major-aref s64.2-sap-ref)
+ (s8.32-load #:vmovdqu s8.32 s8vec s8-array s8.32-aref s8.32-row-major-aref s8.32-sap-ref)
+ (s16.16-load #:vmovdqu s16.16 s16vec s16-array s16.16-aref s16.16-row-major-aref s16.16-sap-ref)
+ (s32.8-load #:vmovdqu s32.8 s32vec s32-array s32.8-aref s32.8-row-major-aref s32.8-sap-ref)
+ (s64.4-load #:vmovdqu s64.4 s64vec s64-array s64.4-aref s64.4-row-major-aref s64.4-sap-ref))
(:stores
#+sb-unicode
- (u32.4-store-into-string #:vmovdqu u32.4 charvec char-array u32.4-string-ref u32.4-row-major-string-ref)
+ (u32.4-store-into-string #:vmovdqu u32.4 charvec char-array u32.4-string-ref u32.4-row-major-string-ref u32.4-string-sap-ref)
#+sb-unicode
- (u32.8-store-into-string #:vmovdqu u32.8 charvec char-array u32.8-string-ref u32.8-row-major-string-ref)
- (f32-store #:vmovss f32 f32vec f32-array f32-aref f32-row-major-aref)
- (f64-store #:vmovsd f64 f64vec f64-array f64-aref f64-row-major-aref)
- (f32.4-store #:vmovups f32.4 f32vec f32-array f32.4-aref f32.4-row-major-aref)
- (f64.2-store #:vmovupd f64.2 f64vec f64-array f64.2-aref f64.2-row-major-aref)
- (f32.8-store #:vmovups f32.8 f32vec f32-array f32.8-aref f32.8-row-major-aref)
- (f64.4-store #:vmovupd f64.4 f64vec f64-array f64.4-aref f64.4-row-major-aref)
- (u8.16-store #:vmovdqu u8.16 u8vec u8-array u8.16-aref u8.16-row-major-aref)
- (u16.8-store #:vmovdqu u16.8 u16vec u16-array u16.8-aref u16.8-row-major-aref)
- (u32.4-store #:vmovdqu u32.4 u32vec u32-array u32.4-aref u32.4-row-major-aref)
- (u64.2-store #:vmovdqu u64.2 u64vec u64-array u64.2-aref u64.2-row-major-aref)
- (s8.16-store #:vmovdqu s8.16 s8vec s8-array s8.16-aref s8.16-row-major-aref)
- (s16.8-store #:vmovdqu s16.8 s16vec s16-array s16.8-aref s16.8-row-major-aref)
- (s32.4-store #:vmovdqu s32.4 s32vec s32-array s32.4-aref s32.4-row-major-aref)
- (s64.2-store #:vmovdqu s64.2 s64vec s64-array s64.2-aref s64.2-row-major-aref)
- (u8.32-store #:vmovdqu u8.32 u8vec u8-array u8.32-aref u8.32-row-major-aref)
- (u16.16-store #:vmovdqu u16.16 u16vec u16-array u16.16-aref u16.16-row-major-aref)
- (u32.8-store #:vmovdqu u32.8 u32vec u32-array u32.8-aref u32.8-row-major-aref)
- (u64.4-store #:vmovdqu u64.4 u64vec u64-array u64.4-aref u64.4-row-major-aref)
- (s8.32-store #:vmovdqu s8.32 s8vec s8-array s8.32-aref s8.32-row-major-aref)
- (s16.16-store #:vmovdqu s16.16 s16vec s16-array s16.16-aref s16.16-row-major-aref)
- (s32.8-store #:vmovdqu s32.8 s32vec s32-array s32.8-aref s32.8-row-major-aref)
- (s64.4-store #:vmovdqu s64.4 s64vec s64-array s64.4-aref s64.4-row-major-aref)
- (f32.4-ntstore #:vmovntps f32.4 f32vec f32-array f32.4-non-temporal-aref f32.4-non-temporal-row-major-aref)
- (f64.2-ntstore #:vmovntpd f64.2 f64vec f64-array f64.2-non-temporal-aref f64.2-non-temporal-row-major-aref)
- (f32.8-ntstore #:vmovntps f32.8 f32vec f32-array f32.8-non-temporal-aref f32.8-non-temporal-row-major-aref)
- (f64.4-ntstore #:vmovntpd f64.4 f64vec f64-array f64.4-non-temporal-aref f64.4-non-temporal-row-major-aref)
- (u8.16-ntstore #:vmovntdq u8.16 u8vec u8-array u8.16-non-temporal-aref u8.16-non-temporal-row-major-aref)
- (u16.8-ntstore #:vmovntdq u16.8 u16vec u16-array u16.8-non-temporal-aref u16.8-non-temporal-row-major-aref)
- (u32.4-ntstore #:vmovntdq u32.4 u32vec u32-array u32.4-non-temporal-aref u32.4-non-temporal-row-major-aref)
- (u64.2-ntstore #:vmovntdq u64.2 u64vec u64-array u64.2-non-temporal-aref u64.2-non-temporal-row-major-aref)
- (s8.16-ntstore #:vmovntdq s8.16 s8vec s8-array s8.16-non-temporal-aref s8.16-non-temporal-row-major-aref)
- (s16.8-ntstore #:vmovntdq s16.8 s16vec s16-array s16.8-non-temporal-aref s16.8-non-temporal-row-major-aref)
- (s32.4-ntstore #:vmovntdq s32.4 s32vec s32-array s32.4-non-temporal-aref s32.4-non-temporal-row-major-aref)
- (s64.2-ntstore #:vmovntdq s64.2 s64vec s64-array s64.2-non-temporal-aref s64.2-non-temporal-row-major-aref)
- (u8.32-ntstore #:vmovntdq u8.32 u8vec u8-array u8.32-non-temporal-aref u8.32-non-temporal-row-major-aref)
- (u16.16-ntstore #:vmovntdq u16.16 u16vec u16-array u16.16-non-temporal-aref u16.16-non-temporal-row-major-aref)
- (u32.8-ntstore #:vmovntdq u32.8 u32vec u32-array u32.8-non-temporal-aref u32.8-non-temporal-row-major-aref)
- (u64.4-ntstore #:vmovntdq u64.4 u64vec u64-array u64.4-non-temporal-aref u64.4-non-temporal-row-major-aref)
- (s8.32-ntstore #:vmovntdq s8.32 s8vec s8-array s8.32-non-temporal-aref s8.32-non-temporal-row-major-aref)
- (s16.16-ntstore #:vmovntdq s16.16 s16vec s16-array s16.16-non-temporal-aref s16.16-non-temporal-row-major-aref)
- (s32.8-ntstore #:vmovntdq s32.8 s32vec s32-array s32.8-non-temporal-aref s32.8-non-temporal-row-major-aref)
- (s64.4-ntstore #:vmovntdq s64.4 s64vec s64-array s64.4-non-temporal-aref s64.4-non-temporal-row-major-aref))
+ (u32.8-store-into-string #:vmovdqu u32.8 charvec char-array u32.8-string-ref u32.8-row-major-string-ref u32.8-string-sap-ref)
+ (f32-store #:vmovss f32 f32vec f32-array f32-aref f32-row-major-aref f32-sap-ref)
+ (f64-store #:vmovsd f64 f64vec f64-array f64-aref f64-row-major-aref f64-sap-ref)
+ (f32.4-store #:vmovups f32.4 f32vec f32-array f32.4-aref f32.4-row-major-aref f32.4-sap-ref)
+ (f64.2-store #:vmovupd f64.2 f64vec f64-array f64.2-aref f64.2-row-major-aref f64.2-sap-ref)
+ (f32.8-store #:vmovups f32.8 f32vec f32-array f32.8-aref f32.8-row-major-aref f32.8-sap-ref)
+ (f64.4-store #:vmovupd f64.4 f64vec f64-array f64.4-aref f64.4-row-major-aref f64.4-sap-ref)
+ (u8.16-store #:vmovdqu u8.16 u8vec u8-array u8.16-aref u8.16-row-major-aref u8.16-sap-ref)
+ (u16.8-store #:vmovdqu u16.8 u16vec u16-array u16.8-aref u16.8-row-major-aref u16.8-sap-ref)
+ (u32.4-store #:vmovdqu u32.4 u32vec u32-array u32.4-aref u32.4-row-major-aref u32.4-sap-ref)
+ (u64.2-store #:vmovdqu u64.2 u64vec u64-array u64.2-aref u64.2-row-major-aref u64.2-sap-ref)
+ (s8.16-store #:vmovdqu s8.16 s8vec s8-array s8.16-aref s8.16-row-major-aref s8.16-sap-ref)
+ (s16.8-store #:vmovdqu s16.8 s16vec s16-array s16.8-aref s16.8-row-major-aref s16.8-sap-ref)
+ (s32.4-store #:vmovdqu s32.4 s32vec s32-array s32.4-aref s32.4-row-major-aref s32.4-sap-ref)
+ (s64.2-store #:vmovdqu s64.2 s64vec s64-array s64.2-aref s64.2-row-major-aref s64.2-sap-ref)
+ (u8.32-store #:vmovdqu u8.32 u8vec u8-array u8.32-aref u8.32-row-major-aref u8.32-sap-ref)
+ (u16.16-store #:vmovdqu u16.16 u16vec u16-array u16.16-aref u16.16-row-major-aref u16.16-sap-ref)
+ (u32.8-store #:vmovdqu u32.8 u32vec u32-array u32.8-aref u32.8-row-major-aref u32.8-sap-ref)
+ (u64.4-store #:vmovdqu u64.4 u64vec u64-array u64.4-aref u64.4-row-major-aref u64.4-sap-ref)
+ (s8.32-store #:vmovdqu s8.32 s8vec s8-array s8.32-aref s8.32-row-major-aref s8.32-sap-ref)
+ (s16.16-store #:vmovdqu s16.16 s16vec s16-array s16.16-aref s16.16-row-major-aref s16.16-sap-ref)
+ (s32.8-store #:vmovdqu s32.8 s32vec s32-array s32.8-aref s32.8-row-major-aref s32.8-sap-ref)
+ (s64.4-store #:vmovdqu s64.4 s64vec s64-array s64.4-aref s64.4-row-major-aref s64.4-sap-ref)
+ (f32.4-ntstore #:vmovntps f32.4 f32vec f32-array f32.4-non-temporal-aref f32.4-non-temporal-row-major-aref f32.4-non-temporal-sap-ref)
+ (f64.2-ntstore #:vmovntpd f64.2 f64vec f64-array f64.2-non-temporal-aref f64.2-non-temporal-row-major-aref f64.2-non-temporal-sap-ref)
+ (f32.8-ntstore #:vmovntps f32.8 f32vec f32-array f32.8-non-temporal-aref f32.8-non-temporal-row-major-aref f32.8-non-temporal-sap-ref)
+ (f64.4-ntstore #:vmovntpd f64.4 f64vec f64-array f64.4-non-temporal-aref f64.4-non-temporal-row-major-aref f64.4-non-temporal-sap-ref)
+ (u8.16-ntstore #:vmovntdq u8.16 u8vec u8-array u8.16-non-temporal-aref u8.16-non-temporal-row-major-aref u8.16-non-temporal-sap-ref)
+ (u16.8-ntstore #:vmovntdq u16.8 u16vec u16-array u16.8-non-temporal-aref u16.8-non-temporal-row-major-aref u16.8-non-temporal-sap-ref)
+ (u32.4-ntstore #:vmovntdq u32.4 u32vec u32-array u32.4-non-temporal-aref u32.4-non-temporal-row-major-aref u32.4-non-temporal-sap-ref)
+ (u64.2-ntstore #:vmovntdq u64.2 u64vec u64-array u64.2-non-temporal-aref u64.2-non-temporal-row-major-aref u64.2-non-temporal-sap-ref)
+ (s8.16-ntstore #:vmovntdq s8.16 s8vec s8-array s8.16-non-temporal-aref s8.16-non-temporal-row-major-aref s8.16-non-temporal-sap-ref)
+ (s16.8-ntstore #:vmovntdq s16.8 s16vec s16-array s16.8-non-temporal-aref s16.8-non-temporal-row-major-aref s16.8-non-temporal-sap-ref)
+ (s32.4-ntstore #:vmovntdq s32.4 s32vec s32-array s32.4-non-temporal-aref s32.4-non-temporal-row-major-aref s32.4-non-temporal-sap-ref)
+ (s64.2-ntstore #:vmovntdq s64.2 s64vec s64-array s64.2-non-temporal-aref s64.2-non-temporal-row-major-aref s64.2-non-temporal-sap-ref)
+ (u8.32-ntstore #:vmovntdq u8.32 u8vec u8-array u8.32-non-temporal-aref u8.32-non-temporal-row-major-aref u8.32-non-temporal-sap-ref)
+ (u16.16-ntstore #:vmovntdq u16.16 u16vec u16-array u16.16-non-temporal-aref u16.16-non-temporal-row-major-aref u16.16-non-temporal-sap-ref)
+ (u32.8-ntstore #:vmovntdq u32.8 u32vec u32-array u32.8-non-temporal-aref u32.8-non-temporal-row-major-aref u32.8-non-temporal-sap-ref)
+ (u64.4-ntstore #:vmovntdq u64.4 u64vec u64-array u64.4-non-temporal-aref u64.4-non-temporal-row-major-aref u64.4-non-temporal-sap-ref)
+ (s8.32-ntstore #:vmovntdq s8.32 s8vec s8-array s8.32-non-temporal-aref s8.32-non-temporal-row-major-aref s8.32-non-temporal-sap-ref)
+ (s16.16-ntstore #:vmovntdq s16.16 s16vec s16-array s16.16-non-temporal-aref s16.16-non-temporal-row-major-aref s16.16-non-temporal-sap-ref)
+ (s32.8-ntstore #:vmovntdq s32.8 s32vec s32-array s32.8-non-temporal-aref s32.8-non-temporal-row-major-aref s32.8-non-temporal-sap-ref)
+ (s64.4-ntstore #:vmovntdq s64.4 s64vec s64-array s64.4-non-temporal-aref s64.4-non-temporal-row-major-aref s64.4-non-temporal-sap-ref))
(:associatives
(f32-and two-arg-f32-and +f32-true+)
(f32-or two-arg-f32-or +f32-false+)
diff --git a/contrib/sb-simd/code/instruction-sets/avx2.lisp b/contrib/sb-simd/code/instruction-sets/avx2.lisp
index 0466dad5c..77738a038 100644
--- a/contrib/sb-simd/code/instruction-sets/avx2.lisp
+++ b/contrib/sb-simd/code/instruction-sets/avx2.lisp
@@ -368,47 +368,47 @@
(s64.4-insert-s64.2 #:vinserti128 (s64.4) (s64.4 s64.2 imm1) :cost 1)
(s64.4-permute128 #:vperm2i128 (s64.4) (s64.4 s64.4 imm8) :cost 1))
(:loads
- (f32.4-ntload #:vmovntdqa f32.4 f32vec f32-array f32.4-non-temporal-aref f32.4-non-temporal-row-major-aref)
- (f64.2-ntload #:vmovntdqa f64.2 f64vec f64-array f64.2-non-temporal-aref f64.2-non-temporal-row-major-aref)
- (f32.8-ntload #:vmovntdqa f32.8 f32vec f32-array f32.8-non-temporal-aref f32.8-non-temporal-row-major-aref)
- (f64.4-ntload #:vmovntdqa f64.4 f64vec f64-array f64.4-non-temporal-aref f64.4-non-temporal-row-major-aref)
- (u8.16-ntload #:vmovntdqa u8.16 u8vec u8-array u8.16-non-temporal-aref u8.16-non-temporal-row-major-aref)
- (u16.8-ntload #:vmovntdqa u16.8 u16vec u16-array u16.8-non-temporal-aref u16.8-non-temporal-row-major-aref)
- (u32.4-ntload #:vmovntdqa u32.4 u32vec u32-array u32.4-non-temporal-aref u32.4-non-temporal-row-major-aref)
- (u64.2-ntload #:vmovntdqa u64.2 u64vec u64-array u64.2-non-temporal-aref u64.2-non-temporal-row-major-aref)
- (s8.16-ntload #:vmovntdqa s8.16 s8vec s8-array s8.16-non-temporal-aref s8.16-non-temporal-row-major-aref)
- (s16.8-ntload #:vmovntdqa s16.8 s16vec s16-array s16.8-non-temporal-aref s16.8-non-temporal-row-major-aref)
- (s32.4-ntload #:vmovntdqa s32.4 s32vec s32-array s32.4-non-temporal-aref s32.4-non-temporal-row-major-aref)
- (s64.2-ntload #:vmovntdqa s64.2 s64vec s64-array s64.2-non-temporal-aref s64.2-non-temporal-row-major-aref)
- (u8.32-ntload #:vmovntdqa u8.32 u8vec u8-array u8.32-non-temporal-aref u8.32-non-temporal-row-major-aref)
- (u16.16-ntload #:vmovntdqa u16.16 u16vec u16-array u16.16-non-temporal-aref u16.16-non-temporal-row-major-aref)
- (u32.8-ntload #:vmovntdqa u32.8 u32vec u32-array u32.8-non-temporal-aref u32.8-non-temporal-row-major-aref)
- (u64.4-ntload #:vmovntdqa u64.4 u64vec u64-array u64.4-non-temporal-aref u64.4-non-temporal-row-major-aref)
- (s8.32-ntload #:vmovntdqa s8.32 s8vec s8-array s8.32-non-temporal-aref s8.32-non-temporal-row-major-aref)
- (s16.16-ntload #:vmovntdqa s16.16 s16vec s16-array s16.16-non-temporal-aref s16.16-non-temporal-row-major-aref)
- (s32.8-ntload #:vmovntdqa s32.8 s32vec s32-array s32.8-non-temporal-aref s32.8-non-temporal-row-major-aref)
- (s64.4-ntload #:vmovntdqa s64.4 s64vec s64-array s64.4-non-temporal-aref s64.4-non-temporal-row-major-aref))
+ (f32.4-ntload #:vmovntdqa f32.4 f32vec f32-array f32.4-non-temporal-aref f32.4-non-temporal-row-major-aref f32.4-non-temporal-sap-ref)
+ (f64.2-ntload #:vmovntdqa f64.2 f64vec f64-array f64.2-non-temporal-aref f64.2-non-temporal-row-major-aref f64.2-non-temporal-sap-ref)
+ (f32.8-ntload #:vmovntdqa f32.8 f32vec f32-array f32.8-non-temporal-aref f32.8-non-temporal-row-major-aref f32.8-non-temporal-sap-ref)
+ (f64.4-ntload #:vmovntdqa f64.4 f64vec f64-array f64.4-non-temporal-aref f64.4-non-temporal-row-major-aref f64.4-non-temporal-sap-ref)
+ (u8.16-ntload #:vmovntdqa u8.16 u8vec u8-array u8.16-non-temporal-aref u8.16-non-temporal-row-major-aref u8.16-non-temporal-sap-ref)
+ (u16.8-ntload #:vmovntdqa u16.8 u16vec u16-array u16.8-non-temporal-aref u16.8-non-temporal-row-major-aref u16.8-non-temporal-sap-ref)
+ (u32.4-ntload #:vmovntdqa u32.4 u32vec u32-array u32.4-non-temporal-aref u32.4-non-temporal-row-major-aref u32.4-non-temporal-sap-ref)
+ (u64.2-ntload #:vmovntdqa u64.2 u64vec u64-array u64.2-non-temporal-aref u64.2-non-temporal-row-major-aref u64.2-non-temporal-sap-ref)
+ (s8.16-ntload #:vmovntdqa s8.16 s8vec s8-array s8.16-non-temporal-aref s8.16-non-temporal-row-major-aref s8.16-non-temporal-sap-ref)
+ (s16.8-ntload #:vmovntdqa s16.8 s16vec s16-array s16.8-non-temporal-aref s16.8-non-temporal-row-major-aref s16.8-non-temporal-sap-ref)
+ (s32.4-ntload #:vmovntdqa s32.4 s32vec s32-array s32.4-non-temporal-aref s32.4-non-temporal-row-major-aref s32.4-non-temporal-sap-ref)
+ (s64.2-ntload #:vmovntdqa s64.2 s64vec s64-array s64.2-non-temporal-aref s64.2-non-temporal-row-major-aref s64.2-non-temporal-sap-ref)
+ (u8.32-ntload #:vmovntdqa u8.32 u8vec u8-array u8.32-non-temporal-aref u8.32-non-temporal-row-major-aref u8.32-non-temporal-sap-ref)
+ (u16.16-ntload #:vmovntdqa u16.16 u16vec u16-array u16.16-non-temporal-aref u16.16-non-temporal-row-major-aref u16.16-non-temporal-sap-ref)
+ (u32.8-ntload #:vmovntdqa u32.8 u32vec u32-array u32.8-non-temporal-aref u32.8-non-temporal-row-major-aref u32.8-non-temporal-sap-ref)
+ (u64.4-ntload #:vmovntdqa u64.4 u64vec u64-array u64.4-non-temporal-aref u64.4-non-temporal-row-major-aref u64.4-non-temporal-sap-ref)
+ (s8.32-ntload #:vmovntdqa s8.32 s8vec s8-array s8.32-non-temporal-aref s8.32-non-temporal-row-major-aref s8.32-non-temporal-sap-ref)
+ (s16.16-ntload #:vmovntdqa s16.16 s16vec s16-array s16.16-non-temporal-aref s16.16-non-temporal-row-major-aref s16.16-non-temporal-sap-ref)
+ (s32.8-ntload #:vmovntdqa s32.8 s32vec s32-array s32.8-non-temporal-aref s32.8-non-temporal-row-major-aref s32.8-non-temporal-sap-ref)
+ (s64.4-ntload #:vmovntdqa s64.4 s64vec s64-array s64.4-non-temporal-aref s64.4-non-temporal-row-major-aref s64.4-non-temporal-sap-ref))
(:stores
- (f32.4-ntstore #:vmovntps f32.4 f32vec f32-array f32.4-non-temporal-aref f32.4-non-temporal-row-major-aref)
- (f64.2-ntstore #:vmovntpd f64.2 f64vec f64-array f64.2-non-temporal-aref f64.2-non-temporal-row-major-aref)
- (f32.8-ntstore #:vmovntps f32.8 f32vec f32-array f32.8-non-temporal-aref f32.8-non-temporal-row-major-aref)
- (f64.4-ntstore #:vmovntpd f64.4 f64vec f64-array f64.4-non-temporal-aref f64.4-non-temporal-row-major-aref)
- (u8.16-ntstore #:vmovntdq u8.16 u8vec u8-array u8.16-non-temporal-aref u8.16-non-temporal-row-major-aref)
- (u16.8-ntstore #:vmovntdq u16.8 u16vec u16-array u16.8-non-temporal-aref u16.8-non-temporal-row-major-aref)
- (u32.4-ntstore #:vmovntdq u32.4 u32vec u32-array u32.4-non-temporal-aref u32.4-non-temporal-row-major-aref)
- (u64.2-ntstore #:vmovntdq u64.2 u64vec u64-array u64.2-non-temporal-aref u64.2-non-temporal-row-major-aref)
- (s8.16-ntstore #:vmovntdq s8.16 s8vec s8-array s8.16-non-temporal-aref s8.16-non-temporal-row-major-aref)
- (s16.8-ntstore #:vmovntdq s16.8 s16vec s16-array s16.8-non-temporal-aref s16.8-non-temporal-row-major-aref)
- (s32.4-ntstore #:vmovntdq s32.4 s32vec s32-array s32.4-non-temporal-aref s32.4-non-temporal-row-major-aref)
- (s64.2-ntstore #:vmovntdq s64.2 s64vec s64-array s64.2-non-temporal-aref s64.2-non-temporal-row-major-aref)
- (u8.32-ntstore #:vmovntdq u8.32 u8vec u8-array u8.32-non-temporal-aref u8.32-non-temporal-row-major-aref)
- (u16.16-ntstore #:vmovntdq u16.16 u16vec u16-array u16.16-non-temporal-aref u16.16-non-temporal-row-major-aref)
- (u32.8-ntstore #:vmovntdq u32.8 u32vec u32-array u32.8-non-temporal-aref u32.8-non-temporal-row-major-aref)
- (u64.4-ntstore #:vmovntdq u64.4 u64vec u64-array u64.4-non-temporal-aref u64.4-non-temporal-row-major-aref)
- (s8.32-ntstore #:vmovntdq s8.32 s8vec s8-array s8.32-non-temporal-aref s8.32-non-temporal-row-major-aref)
- (s16.16-ntstore #:vmovntdq s16.16 s16vec s16-array s16.16-non-temporal-aref s16.16-non-temporal-row-major-aref)
- (s32.8-ntstore #:vmovntdq s32.8 s32vec s32-array s32.8-non-temporal-aref s32.8-non-temporal-row-major-aref)
- (s64.4-ntstore #:vmovntdq s64.4 s64vec s64-array s64.4-non-temporal-aref s64.4-non-temporal-row-major-aref))
+ (f32.4-ntstore #:vmovntps f32.4 f32vec f32-array f32.4-non-temporal-aref f32.4-non-temporal-row-major-aref f32.4-non-temporal-sap-ref)
+ (f64.2-ntstore #:vmovntpd f64.2 f64vec f64-array f64.2-non-temporal-aref f64.2-non-temporal-row-major-aref f64.2-non-temporal-sap-ref)
+ (f32.8-ntstore #:vmovntps f32.8 f32vec f32-array f32.8-non-temporal-aref f32.8-non-temporal-row-major-aref f32.8-non-temporal-sap-ref)
+ (f64.4-ntstore #:vmovntpd f64.4 f64vec f64-array f64.4-non-temporal-aref f64.4-non-temporal-row-major-aref f64.4-non-temporal-sap-ref)
+ (u8.16-ntstore #:vmovntdq u8.16 u8vec u8-array u8.16-non-temporal-aref u8.16-non-temporal-row-major-aref u8.16-non-temporal-sap-ref)
+ (u16.8-ntstore #:vmovntdq u16.8 u16vec u16-array u16.8-non-temporal-aref u16.8-non-temporal-row-major-aref u16.8-non-temporal-sap-ref)
+ (u32.4-ntstore #:vmovntdq u32.4 u32vec u32-array u32.4-non-temporal-aref u32.4-non-temporal-row-major-aref u32.4-non-temporal-sap-ref)
+ (u64.2-ntstore #:vmovntdq u64.2 u64vec u64-array u64.2-non-temporal-aref u64.2-non-temporal-row-major-aref u64.2-non-temporal-sap-ref)
+ (s8.16-ntstore #:vmovntdq s8.16 s8vec s8-array s8.16-non-temporal-aref s8.16-non-temporal-row-major-aref s8.16-non-temporal-sap-ref)
+ (s16.8-ntstore #:vmovntdq s16.8 s16vec s16-array s16.8-non-temporal-aref s16.8-non-temporal-row-major-aref s16.8-non-temporal-sap-ref)
+ (s32.4-ntstore #:vmovntdq s32.4 s32vec s32-array s32.4-non-temporal-aref s32.4-non-temporal-row-major-aref s32.4-non-temporal-sap-ref)
+ (s64.2-ntstore #:vmovntdq s64.2 s64vec s64-array s64.2-non-temporal-aref s64.2-non-temporal-row-major-aref s64.2-non-temporal-sap-ref)
+ (u8.32-ntstore #:vmovntdq u8.32 u8vec u8-array u8.32-non-temporal-aref u8.32-non-temporal-row-major-aref u8.32-non-temporal-sap-ref)
+ (u16.16-ntstore #:vmovntdq u16.16 u16vec u16-array u16.16-non-temporal-aref u16.16-non-temporal-row-major-aref u16.16-non-temporal-sap-ref)
+ (u32.8-ntstore #:vmovntdq u32.8 u32vec u32-array u32.8-non-temporal-aref u32.8-non-temporal-row-major-aref u32.8-non-temporal-sap-ref)
+ (u64.4-ntstore #:vmovntdq u64.4 u64vec u64-array u64.4-non-temporal-aref u64.4-non-temporal-row-major-aref u64.4-non-temporal-sap-ref)
+ (s8.32-ntstore #:vmovntdq s8.32 s8vec s8-array s8.32-non-temporal-aref s8.32-non-temporal-row-major-aref s8.32-non-temporal-sap-ref)
+ (s16.16-ntstore #:vmovntdq s16.16 s16vec s16-array s16.16-non-temporal-aref s16.16-non-temporal-row-major-aref s16.16-non-temporal-sap-ref)
+ (s32.8-ntstore #:vmovntdq s32.8 s32vec s32-array s32.8-non-temporal-aref s32.8-non-temporal-row-major-aref s32.8-non-temporal-sap-ref)
+ (s64.4-ntstore #:vmovntdq s64.4 s64vec s64-array s64.4-non-temporal-aref s64.4-non-temporal-row-major-aref s64.4-non-temporal-sap-ref))
(:associatives
(u8.32-and two-arg-u8.32-and +u8-true+)
(u8.32-or two-arg-u8.32-or +u8-false+)
diff --git a/contrib/sb-simd/code/instruction-sets/neon.lisp b/contrib/sb-simd/code/instruction-sets/neon.lisp
index 506702c2a..52d2f9c3d 100644
--- a/contrib/sb-simd/code/instruction-sets/neon.lisp
+++ b/contrib/sb-simd/code/instruction-sets/neon.lisp
@@ -576,30 +576,30 @@
(s64.2-zip-odd #:zip2 (s64.2) (s64.2 s64.2) :cost 1 :suffix '(:2d)))
(:loads
#+sb-unicode
- (u32.4-load-from-string #:ldr u32.4 charvec char-array u32.4-string-ref u32.4-row-major-string-ref)
- (f32.4-load #:ldr f32.4 f32vec f32-array f32.4-aref f32.4-row-major-aref)
- (f64.2-load #:ldr f64.2 f64vec f64-array f64.2-aref f64.2-row-major-aref)
- (u8.16-load #:ldr u8.16 u8vec u8-array u8.16-aref u8.16-row-major-aref)
- (u16.8-load #:ldr u16.8 u16vec u16-array u16.8-aref u16.8-row-major-aref)
- (u32.4-load #:ldr u32.4 u32vec u32-array u32.4-aref u32.4-row-major-aref)
- (u64.2-load #:ldr u64.2 u64vec u64-array u64.2-aref u64.2-row-major-aref)
- (s8.16-load #:ldr s8.16 s8vec s8-array s8.16-aref s8.16-row-major-aref)
- (s16.8-load #:ldr s16.8 s16vec s16-array s16.8-aref s16.8-row-major-aref)
- (s32.4-load #:ldr s32.4 s32vec s32-array s32.4-aref s32.4-row-major-aref)
- (s64.2-load #:ldr s64.2 s64vec s64-array s64.2-aref s64.2-row-major-aref))
+ (u32.4-load-from-string #:ldr u32.4 charvec char-array u32.4-string-ref u32.4-row-major-string-ref u32.4-string-sap-ref)
+ (f32.4-load #:ldr f32.4 f32vec f32-array f32.4-aref f32.4-row-major-aref f32.4-sap-ref)
+ (f64.2-load #:ldr f64.2 f64vec f64-array f64.2-aref f64.2-row-major-aref f64.2-sap-ref)
+ (u8.16-load #:ldr u8.16 u8vec u8-array u8.16-aref u8.16-row-major-aref u8.16-sap-ref)
+ (u16.8-load #:ldr u16.8 u16vec u16-array u16.8-aref u16.8-row-major-aref u16.8-sap-ref)
+ (u32.4-load #:ldr u32.4 u32vec u32-array u32.4-aref u32.4-row-major-aref u32.4-sap-ref)
+ (u64.2-load #:ldr u64.2 u64vec u64-array u64.2-aref u64.2-row-major-aref u64.2-sap-ref)
+ (s8.16-load #:ldr s8.16 s8vec s8-array s8.16-aref s8.16-row-major-aref s8.16-sap-ref)
+ (s16.8-load #:ldr s16.8 s16vec s16-array s16.8-aref s16.8-row-major-aref s16.8-sap-ref)
+ (s32.4-load #:ldr s32.4 s32vec s32-array s32.4-aref s32.4-row-major-aref s32.4-sap-ref)
+ (s64.2-load #:ldr s64.2 s64vec s64-array s64.2-aref s64.2-row-major-aref s64.2-sap-ref))
(:stores
#+sb-unicode
- (u32.4-store-into-string #:str u32.4 charvec char-array u32.4-string-ref u32.4-row-major-string-ref)
- (f32.4-store #:str f32.4 f32vec f32-array f32.4-aref f32.4-row-major-aref)
- (f64.2-store #:str f64.2 f64vec f64-array f64.2-aref f64.2-row-major-aref)
- (u8.16-store #:str u8.16 u8vec u8-array u8.16-aref u8.16-row-major-aref)
- (u16.8-store #:str u16.8 u16vec u16-array u16.8-aref u16.8-row-major-aref)
- (u32.4-store #:str u32.4 u32vec u32-array u32.4-aref u32.4-row-major-aref)
- (u64.2-store #:str u64.2 u64vec u64-array u64.2-aref u64.2-row-major-aref)
- (s8.16-store #:str s8.16 s8vec s8-array s8.16-aref s8.16-row-major-aref)
- (s16.8-store #:str s16.8 s16vec s16-array s16.8-aref s16.8-row-major-aref)
- (s32.4-store #:str s32.4 s32vec s32-array s32.4-aref s32.4-row-major-aref)
- (s64.2-store #:str s64.2 s64vec s64-array s64.2-aref s64.2-row-major-aref))
+ (u32.4-store-into-string #:str u32.4 charvec char-array u32.4-string-ref u32.4-row-major-string-ref u32.4-string-sap-ref)
+ (f32.4-store #:str f32.4 f32vec f32-array f32.4-aref f32.4-row-major-aref f32.4-sap-ref)
+ (f64.2-store #:str f64.2 f64vec f64-array f64.2-aref f64.2-row-major-aref f64.2-sap-ref)
+ (u8.16-store #:str u8.16 u8vec u8-array u8.16-aref u8.16-row-major-aref u8.16-sap-ref)
+ (u16.8-store #:str u16.8 u16vec u16-array u16.8-aref u16.8-row-major-aref u16.8-sap-ref)
+ (u32.4-store #:str u32.4 u32vec u32-array u32.4-aref u32.4-row-major-aref u32.4-sap-ref)
+ (u64.2-store #:str u64.2 u64vec u64-array u64.2-aref u64.2-row-major-aref u64.2-sap-ref)
+ (s8.16-store #:str s8.16 s8vec s8-array s8.16-aref s8.16-row-major-aref s8.16-sap-ref)
+ (s16.8-store #:str s16.8 s16vec s16-array s16.8-aref s16.8-row-major-aref s16.8-sap-ref)
+ (s32.4-store #:str s32.4 s32vec s32-array s32.4-aref s32.4-row-major-aref s32.4-sap-ref)
+ (s64.2-store #:str s64.2 s64vec s64-array s64.2-aref s64.2-row-major-aref s64.2-sap-ref))
(:associatives
(f32.4-and two-arg-f32.4-and +f32-true+)
(f32.4-or two-arg-f32.4-or +f32-false+)
diff --git a/contrib/sb-simd/code/instruction-sets/sb-simd.lisp b/contrib/sb-simd/code/instruction-sets/sb-simd.lisp
index 8a6a94a69..3da71f6bb 100644
--- a/contrib/sb-simd/code/instruction-sets/sb-simd.lisp
+++ b/contrib/sb-simd/code/instruction-sets/sb-simd.lisp
@@ -242,16 +242,16 @@
(s64-andc1 nil (s64) (s64 s64) :encoding :fake-vop)
(s64-not nil (s64) (s64) :encoding :fake-vop))
(:reffers
- (f32 f32-array f32-aref f32-row-major-aref)
- (f64 f64-array f64-aref f64-row-major-aref)
- ( u8 u8-array u8-aref u8-row-major-aref)
- (u16 u16-array u16-aref u16-row-major-aref)
- (u32 u32-array u32-aref u32-row-major-aref)
- (u64 u64-array u64-aref u64-row-major-aref)
- ( s8 s8-array s8-aref s8-row-major-aref)
- (s16 s16-array s16-aref s16-row-major-aref)
- (s32 s32-array s32-aref s32-row-major-aref)
- (s64 s64-array s64-aref s64-row-major-aref))
+ (f32 f32-array f32-aref f32-row-major-aref f32-sap-ref)
+ (f64 f64-array f64-aref f64-row-major-aref f64-sap-ref)
+ ( u8 u8-array u8-aref u8-row-major-aref u8-sap-ref)
+ (u16 u16-array u16-aref u16-row-major-aref u16-sap-ref)
+ (u32 u32-array u32-aref u32-row-major-aref u32-sap-ref)
+ (u64 u64-array u64-aref u64-row-major-aref u64-sap-ref)
+ ( s8 s8-array s8-aref s8-row-major-aref s8-sap-ref)
+ (s16 s16-array s16-aref s16-row-major-aref s16-sap-ref)
+ (s32 s32-array s32-aref s32-row-major-aref s32-sap-ref)
+ (s64 s64-array s64-aref s64-row-major-aref s64-sap-ref))
(:associatives
(f32-and two-arg-f32-and +f32-true+)
(f32-or two-arg-f32-or +f32-false+)
diff --git a/contrib/sb-simd/code/instruction-sets/sse.lisp b/contrib/sb-simd/code/instruction-sets/sse.lisp
index 01914ed50..ef861fe1a 100644
--- a/contrib/sb-simd/code/instruction-sets/sse.lisp
+++ b/contrib/sb-simd/code/instruction-sets/sse.lisp
@@ -68,12 +68,12 @@
(f32.4-unpackhi #:unpckhps (f32.4) (f32.4 f32.4) :cost 1 :encoding :sse)
(f32.4-movemask #:movmskps (u4) (f32.4) :cost 1))
(:loads
- (f32-load #:movss f32 f32vec f32-array f32-aref f32-row-major-aref)
- (f32.4-load #:movups f32.4 f32vec f32-array f32.4-aref f32.4-row-major-aref))
+ (f32-load #:movss f32 f32vec f32-array f32-aref f32-row-major-aref f32-sap-ref)
+ (f32.4-load #:movups f32.4 f32vec f32-array f32.4-aref f32.4-row-major-aref f32.4-sap-ref))
(:stores
- (f32-store #:movss f32 f32vec f32-array f32-aref f32-row-major-aref)
- (f32.4-store #:movups f32.4 f32vec f32-array f32.4-aref f32.4-row-major-aref)
- (f32.4-ntstore #:movntps f32.4 f32vec f32-array f32.4-non-temporal-aref f32.4-non-temporal-row-major-aref))
+ (f32-store #:movss f32 f32vec f32-array f32-aref f32-row-major-aref f32-sap-ref)
+ (f32.4-store #:movups f32.4 f32vec f32-array f32.4-aref f32.4-row-major-aref f32.4-sap-ref)
+ (f32.4-ntstore #:movntps f32.4 f32vec f32-array f32.4-non-temporal-aref f32.4-non-temporal-row-major-aref f32.4-non-temporal-sap-ref))
(:associatives
(f32-and two-arg-f32-and +f32-true+)
(f32-or two-arg-f32-or +f32-false+)
diff --git a/contrib/sb-simd/code/instruction-sets/sse2.lisp b/contrib/sb-simd/code/instruction-sets/sse2.lisp
index e7392e95f..6d6af89ce 100644
--- a/contrib/sb-simd/code/instruction-sets/sse2.lisp
+++ b/contrib/sb-simd/code/instruction-sets/sse2.lisp
@@ -308,39 +308,38 @@
(s64.2-shiftr #:psrlq (s64.2) (s64.2 imm6) :cost 1 :encoding :sse))
(:loads
#+sb-unicode
- (u32.4-load-from-string #:movdqu u32.4 charvec char-array u32.4-string-ref u32.4-row-major-string-ref)
- (f64-load #:movsd f64 f64vec f64-array f64-aref f64-row-major-aref)
- (f64.2-load #:movupd f64.2 f64vec f64-array f64.2-aref f64.2-row-major-aref)
- (u8.16-load #:movdqu u8.16 u8vec u8-array u8.16-aref u8.16-row-major-aref)
- (u16.8-load #:movdqu u16.8 u16vec u16-array u16.8-aref u16.8-row-major-aref)
- (u32.4-load #:movdqu u32.4 u32vec u32-array u32.4-aref u32.4-row-major-aref)
- (u64.2-load #:movdqu u64.2 u64vec u64-array u64.2-aref u64.2-row-major-aref)
- (s8.16-load #:movdqu s8.16 s8vec s8-array s8.16-aref s8.16-row-major-aref)
- (s16.8-load #:movdqu s16.8 s16vec s16-array s16.8-aref s16.8-row-major-aref)
- (s32.4-load #:movdqu s32.4 s32vec s32-array s32.4-aref s32.4-row-major-aref)
- (s64.2-load #:movdqu s64.2 s64vec s64-array s64.2-aref s64.2-row-major-aref))
+ (u32.4-load-from-string #:movdqu u32.4 charvec char-array u32.4-string-ref u32.4-row-major-string-ref u32.4-string-sap-ref)
+ (f64-load #:movsd f64 f64vec f64-array f64-aref f64-row-major-aref f64-sap-ref)
+ (f64.2-load #:movupd f64.2 f64vec f64-array f64.2-aref f64.2-row-major-aref f64.2-sap-ref)
+ (u8.16-load #:movdqu u8.16 u8vec u8-array u8.16-aref u8.16-row-major-aref u8.16-sap-ref)
+ (u16.8-load #:movdqu u16.8 u16vec u16-array u16.8-aref u16.8-row-major-aref u16.8-sap-ref)
+ (u32.4-load #:movdqu u32.4 u32vec u32-array u32.4-aref u32.4-row-major-aref u32.4-sap-ref)
+ (u64.2-load #:movdqu u64.2 u64vec u64-array u64.2-aref u64.2-row-major-aref u64.2-sap-ref)
+ (s8.16-load #:movdqu s8.16 s8vec s8-array s8.16-aref s8.16-row-major-aref s8.16-sap-ref)
+ (s16.8-load #:movdqu s16.8 s16vec s16-array s16.8-aref s16.8-row-major-aref s16.8-sap-ref)
+ (s32.4-load #:movdqu s32.4 s32vec s32-array s32.4-aref s32.4-row-major-aref s32.4-sap-ref)
+ (s64.2-load #:movdqu s64.2 s64vec s64-array s64.2-aref s64.2-row-major-aref s64.2-sap-ref))
(:stores
#+sb-unicode
- (u32.4-store-into-string #:movdqu u32.4 charvec char-array u32.4-string-ref u32.4-row-major-string-ref)
- (f64-store #:movsd f64 f64vec f64-array f64-aref f64-row-major-aref)
- (f64.2-store #:movupd f64.2 f64vec f64-array f64.2-aref f64.2-row-major-aref)
- (u8.16-store #:movdqu u8.16 u8vec u8-array u8.16-aref u8.16-row-major-aref)
- (u16.8-store #:movdqu u16.8 u16vec u16-array u16.8-aref u16.8-row-major-aref)
- (u32.4-store #:movdqu u32.4 u32vec u32-array u32.4-aref u32.4-row-major-aref)
- (u64.2-store #:movdqu u64.2 u64vec u64-array u64.2-aref u64.2-row-major-aref)
- (s8.16-store #:movdqu s8.16 s8vec s8-array s8.16-aref s8.16-row-major-aref)
- (s16.8-store #:movdqu s16.8 s16vec s16-array s16.8-aref s16.8-row-major-aref)
- (s32.4-store #:movdqu s32.4 s32vec s32-array s32.4-aref s32.4-row-major-aref)
- (s64.2-store #:movdqu s64.2 s64vec s64-array s64.2-aref s64.2-row-major-aref)
- (f64.2-ntstore #:movntpd f64.2 f64vec f64-array f64.2-non-temporal-aref f64.2-non-temporal-row-major-aref)
- (u8.16-ntstore #:movntdq u8.16 u8vec u8-array u8.16-non-temporal-aref u8.16-non-temporal-row-major-aref)
- (u16.8-ntstore #:movntdq u16.8 u16vec u16-array u16.8-non-temporal-aref u16.8-non-temporal-row-major-aref)
- (u32.4-ntstore #:movntdq u32.4 u32vec u32-array u32.4-non-temporal-aref u32.4-non-temporal-row-major-aref)
- (u64.2-ntstore #:movntdq u64.2 u64vec u64-array u64.2-non-temporal-aref u64.2-non-temporal-row-major-aref)
- (s8.16-ntstore #:movntdq s8.16 s8vec s8-array s8.16-non-temporal-aref s8.16-non-temporal-row-major-aref)
- (s16.8-ntstore #:movntdq s16.8 s16vec s16-array s16.8-non-temporal-aref s16.8-non-temporal-row-major-aref)
- (s32.4-ntstore #:movntdq s32.4 s32vec s32-array s32.4-non-temporal-aref s32.4-non-temporal-row-major-aref)
- (s64.2-ntstore #:movntdq s64.2 s64vec s64-array s64.2-non-temporal-aref s64.2-non-temporal-row-major-aref))
+ (u32.4-store-into-string #:movdqu u32.4 charvec char-array u32.4-string-ref u32.4-row-major-string-ref u32.4-string-sap-ref)
+ (f64.2-store #:movupd f64.2 f64vec f64-array f64.2-aref f64.2-row-major-aref f64.2-sap-ref)
+ (u8.16-store #:movdqu u8.16 u8vec u8-array u8.16-aref u8.16-row-major-aref u8.16-sap-ref)
+ (u16.8-store #:movdqu u16.8 u16vec u16-array u16.8-aref u16.8-row-major-aref u16.8-sap-ref)
+ (u32.4-store #:movdqu u32.4 u32vec u32-array u32.4-aref u32.4-row-major-aref u32.4-sap-ref)
+ (u64.2-store #:movdqu u64.2 u64vec u64-array u64.2-aref u64.2-row-major-aref u64.2-sap-ref)
+ (s8.16-store #:movdqu s8.16 s8vec s8-array s8.16-aref s8.16-row-major-aref s8.16-sap-ref)
+ (s16.8-store #:movdqu s16.8 s16vec s16-array s16.8-aref s16.8-row-major-aref s16.8-sap-ref)
+ (s32.4-store #:movdqu s32.4 s32vec s32-array s32.4-aref s32.4-row-major-aref s32.4-sap-ref)
+ (s64.2-store #:movdqu s64.2 s64vec s64-array s64.2-aref s64.2-row-major-aref s64.2-sap-ref)
+ (f64.2-ntstore #:movntpd f64.2 f64vec f64-array f64.2-non-temporal-aref f64.2-non-temporal-row-major-aref f64.2-non-temporal-sap-ref)
+ (u8.16-ntstore #:movntdq u8.16 u8vec u8-array u8.16-non-temporal-aref u8.16-non-temporal-row-major-aref u8.16-non-temporal-sap-ref)
+ (u16.8-ntstore #:movntdq u16.8 u16vec u16-array u16.8-non-temporal-aref u16.8-non-temporal-row-major-aref u16.8-non-temporal-sap-ref)
+ (u32.4-ntstore #:movntdq u32.4 u32vec u32-array u32.4-non-temporal-aref u32.4-non-temporal-row-major-aref u32.4-non-temporal-sap-ref)
+ (u64.2-ntstore #:movntdq u64.2 u64vec u64-array u64.2-non-temporal-aref u64.2-non-temporal-row-major-aref u64.2-non-temporal-sap-ref)
+ (s8.16-ntstore #:movntdq s8.16 s8vec s8-array s8.16-non-temporal-aref s8.16-non-temporal-row-major-aref s8.16-non-temporal-sap-ref)
+ (s16.8-ntstore #:movntdq s16.8 s16vec s16-array s16.8-non-temporal-aref s16.8-non-temporal-row-major-aref s16.8-non-temporal-sap-ref)
+ (s32.4-ntstore #:movntdq s32.4 s32vec s32-array s32.4-non-temporal-aref s32.4-non-temporal-row-major-aref s32.4-non-temporal-sap-ref)
+ (s64.2-ntstore #:movntdq s64.2 s64vec s64-array s64.2-non-temporal-aref s64.2-non-temporal-row-major-aref s64.2-non-temporal-sap-ref))
(:associatives
(f64-and two-arg-f64-and +f64-true+)
(f64-or two-arg-f64-or +f64-false+)
diff --git a/contrib/sb-simd/code/instruction-sets/sse4-1.lisp b/contrib/sb-simd/code/instruction-sets/sse4-1.lisp
index fe40f9179..fd139bf05 100644
--- a/contrib/sb-simd/code/instruction-sets/sse4-1.lisp
+++ b/contrib/sb-simd/code/instruction-sets/sse4-1.lisp
@@ -72,27 +72,27 @@
(s64.2-elt #:pextrq (s64) (s64.2 imm1) :cost 1)
(s64.2-insert #:pinsrq (s64.2) (s64.2 s64 imm1) :cost 1 :encoding :sse))
(:loads
- (f32.4-ntload #:movntdqa f32.4 f32vec f32-array f32.4-non-temporal-aref f32.4-non-temporal-row-major-aref)
- (f64.2-ntload #:movntdqa f64.2 f64vec f64-array f64.2-non-temporal-aref f64.2-non-temporal-row-major-aref)
- (u8.16-ntload #:movntdqa u8.16 u8vec u8-array u8.16-non-temporal-aref u8.16-non-temporal-row-major-aref)
- (u16.8-ntload #:movntdqa u16.8 u16vec u16-array u16.8-non-temporal-aref u16.8-non-temporal-row-major-aref)
- (u32.4-ntload #:movntdqa u32.4 u32vec u32-array u32.4-non-temporal-aref u32.4-non-temporal-row-major-aref)
- (u64.2-ntload #:movntdqa u64.2 u64vec u64-array u64.2-non-temporal-aref u64.2-non-temporal-row-major-aref)
- (s8.16-ntload #:movntdqa s8.16 s8vec s8-array s8.16-non-temporal-aref s8.16-non-temporal-row-major-aref)
- (s16.8-ntload #:movntdqa s16.8 s16vec s16-array s16.8-non-temporal-aref s16.8-non-temporal-row-major-aref)
- (s32.4-ntload #:movntdqa s32.4 s32vec s32-array s32.4-non-temporal-aref s32.4-non-temporal-row-major-aref)
- (s64.2-ntload #:movntdqa s64.2 s64vec s64-array s64.2-non-temporal-aref s64.2-non-temporal-row-major-aref))
+ (f32.4-ntload #:movntdqa f32.4 f32vec f32-array f32.4-non-temporal-aref f32.4-non-temporal-row-major-aref f32.4-non-temporal-sap-ref)
+ (f64.2-ntload #:movntdqa f64.2 f64vec f64-array f64.2-non-temporal-aref f64.2-non-temporal-row-major-aref f64.2-non-temporal-sap-ref)
+ (u8.16-ntload #:movntdqa u8.16 u8vec u8-array u8.16-non-temporal-aref u8.16-non-temporal-row-major-aref u8.16-non-temporal-sap-ref)
+ (u16.8-ntload #:movntdqa u16.8 u16vec u16-array u16.8-non-temporal-aref u16.8-non-temporal-row-major-aref u16.8-non-temporal-sap-ref)
+ (u32.4-ntload #:movntdqa u32.4 u32vec u32-array u32.4-non-temporal-aref u32.4-non-temporal-row-major-aref u32.4-non-temporal-sap-ref)
+ (u64.2-ntload #:movntdqa u64.2 u64vec u64-array u64.2-non-temporal-aref u64.2-non-temporal-row-major-aref u64.2-non-temporal-sap-ref)
+ (s8.16-ntload #:movntdqa s8.16 s8vec s8-array s8.16-non-temporal-aref s8.16-non-temporal-row-major-aref s8.16-non-temporal-sap-ref)
+ (s16.8-ntload #:movntdqa s16.8 s16vec s16-array s16.8-non-temporal-aref s16.8-non-temporal-row-major-aref s16.8-non-temporal-sap-ref)
+ (s32.4-ntload #:movntdqa s32.4 s32vec s32-array s32.4-non-temporal-aref s32.4-non-temporal-row-major-aref s32.4-non-temporal-sap-ref)
+ (s64.2-ntload #:movntdqa s64.2 s64vec s64-array s64.2-non-temporal-aref s64.2-non-temporal-row-major-aref s64.2-non-temporal-sap-ref))
(:stores
- (f32.4-ntstore #:movntps f32.4 f32vec f32-array f32.4-non-temporal-aref f32.4-non-temporal-row-major-aref)
- (f64.2-ntstore #:movntpd f64.2 f64vec f64-array f64.2-non-temporal-aref f64.2-non-temporal-row-major-aref)
- (u8.16-ntstore #:movntdq u8.16 u8vec u8-array u8.16-non-temporal-aref u8.16-non-temporal-row-major-aref)
- (u16.8-ntstore #:movntdq u16.8 u16vec u16-array u16.8-non-temporal-aref u16.8-non-temporal-row-major-aref)
- (u32.4-ntstore #:movntdq u32.4 u32vec u32-array u32.4-non-temporal-aref u32.4-non-temporal-row-major-aref)
- (u64.2-ntstore #:movntdq u64.2 u64vec u64-array u64.2-non-temporal-aref u64.2-non-temporal-row-major-aref)
- (s8.16-ntstore #:movntdq s8.16 s8vec s8-array s8.16-non-temporal-aref s8.16-non-temporal-row-major-aref)
- (s16.8-ntstore #:movntdq s16.8 s16vec s16-array s16.8-non-temporal-aref s16.8-non-temporal-row-major-aref)
- (s32.4-ntstore #:movntdq s32.4 s32vec s32-array s32.4-non-temporal-aref s32.4-non-temporal-row-major-aref)
- (s64.2-ntstore #:movntdq s64.2 s64vec s64-array s64.2-non-temporal-aref s64.2-non-temporal-row-major-aref))
+ (f32.4-ntstore #:movntps f32.4 f32vec f32-array f32.4-non-temporal-aref f32.4-non-temporal-row-major-aref f32.4-non-temporal-sap-ref)
+ (f64.2-ntstore #:movntpd f64.2 f64vec f64-array f64.2-non-temporal-aref f64.2-non-temporal-row-major-aref f64.2-non-temporal-sap-ref)
+ (u8.16-ntstore #:movntdq u8.16 u8vec u8-array u8.16-non-temporal-aref u8.16-non-temporal-row-major-aref u8.16-non-temporal-sap-ref)
+ (u16.8-ntstore #:movntdq u16.8 u16vec u16-array u16.8-non-temporal-aref u16.8-non-temporal-row-major-aref u16.8-non-temporal-sap-ref)
+ (u32.4-ntstore #:movntdq u32.4 u32vec u32-array u32.4-non-temporal-aref u32.4-non-temporal-row-major-aref u32.4-non-temporal-sap-ref)
+ (u64.2-ntstore #:movntdq u64.2 u64vec u64-array u64.2-non-temporal-aref u64.2-non-temporal-row-major-aref u64.2-non-temporal-sap-ref)
+ (s8.16-ntstore #:movntdq s8.16 s8vec s8-array s8.16-non-temporal-aref s8.16-non-temporal-row-major-aref s8.16-non-temporal-sap-ref)
+ (s16.8-ntstore #:movntdq s16.8 s16vec s16-array s16.8-non-temporal-aref s16.8-non-temporal-row-major-aref s16.8-non-temporal-sap-ref)
+ (s32.4-ntstore #:movntdq s32.4 s32vec s32-array s32.4-non-temporal-aref s32.4-non-temporal-row-major-aref s32.4-non-temporal-sap-ref)
+ (s64.2-ntstore #:movntdq s64.2 s64vec s64-array s64.2-non-temporal-aref s64.2-non-temporal-row-major-aref s64.2-non-temporal-sap-ref))
(:associatives
(u16.8-max two-arg-u16.8-max nil)
(u16.8-min two-arg-u16.8-min nil)
diff --git a/contrib/sb-simd/code/packages.lisp b/contrib/sb-simd/code/packages.lisp
index 13a7a58fc..34e9d02f6 100644
--- a/contrib/sb-simd/code/packages.lisp
+++ b/contrib/sb-simd/code/packages.lisp
@@ -126,6 +126,10 @@
#:row-major-aref-record-p
#:setf-row-major-aref-record
#:setf-row-major-aref-record-p
+ #:sap-ref-record
+ #:sap-ref-record-p
+ #:setf-sap-ref-record
+ #:setf-sap-ref-record-p
#:instruction-record
#:instruction-record-p
#:instruction-record-name
@@ -151,6 +155,7 @@
#:vref-record-value-record
#:vref-record-vector-record
#:vref-record-aref
+ #:vref-record-sap-ref
#:vref-record-row-major-aref
#:load-record
#:load-record-p
@@ -162,6 +167,7 @@
#:load-record-value-record
#:load-record-vector-record
#:load-record-aref
+ #:load-record-sap-ref
#:load-record-row-major-aref
#:store-record
#:store-record-p
@@ -173,6 +179,7 @@
#:store-record-value-record
#:store-record-vector-record
#:store-record-aref
+ #:store-record-sap-ref
#:store-record-row-major-aref
#:reffer-record
#:reffer-record-p
@@ -327,6 +334,7 @@
#:f32-incf
#:f32-decf
#:f32-aref
+ #:f32-sap-ref
#:f32-row-major-aref
;; f64
#:f64
@@ -356,6 +364,7 @@
#:f64-incf
#:f64-decf
#:f64-aref
+ #:f64-sap-ref
#:f64-row-major-aref
;; u1
#:u1
@@ -386,6 +395,7 @@
#:u8-incf
#:u8-decf
#:u8-aref
+ #:u8-sap-ref
#:u8-row-major-aref
;; u16
#:u16
@@ -410,6 +420,7 @@
#:u16-incf
#:u16-decf
#:u16-aref
+ #:u16-sap-ref
#:u16-row-major-aref
;; u32
#:u32
@@ -434,6 +445,7 @@
#:u32-incf
#:u32-decf
#:u32-aref
+ #:u32-sap-ref
#:u32-row-major-aref
;; u64
#:u64
@@ -458,6 +470,7 @@
#:u64-incf
#:u64-decf
#:u64-aref
+ #:u64-sap-ref
#:u64-row-major-aref
;; s8
#:s8
@@ -482,6 +495,7 @@
#:s8-incf
#:s8-decf
#:s8-aref
+ #:s8-sap-ref
#:s8-row-major-aref
;; s16
#:s16
@@ -506,6 +520,7 @@
#:s16-incf
#:s16-decf
#:s16-aref
+ #:s16-sap-ref
#:s16-row-major-aref
;; s32
#:s32
@@ -532,6 +547,7 @@
#:s32-incf
#:s32-decf
#:s32-aref
+ #:s32-sap-ref
#:s32-row-major-aref
;; s64
#:s64
@@ -556,6 +572,7 @@
#:s64-incf
#:s64-decf
#:s64-aref
+ #:s64-sap-ref
#:s64-row-major-aref
;; Simple Strings
#+sb-unicode
@@ -620,8 +637,7 @@
#:f32>=
#:f32-incf
#:f32-decf
- #:f32-aref
- #:f32-row-major-aref)
+ #:f32-aref #:f32-row-major-aref #:f32-sap-ref)
#0#
#1#
#2=
@@ -662,8 +678,8 @@
#:f32.4-unpacklo
#:f32.4-incf
#:f32.4-decf
- #:f32.4-aref #:f32.4-row-major-aref
- #:f32.4-non-temporal-aref #:f32.4-non-temporal-row-major-aref))
+ #:f32.4-aref #:f32.4-row-major-aref #:f32.4-sap-ref
+ #:f32.4-non-temporal-aref #:f32.4-non-temporal-row-major-aref #:f32.4-non-temporal-sap-ref))
(defpackage #:sb-simd-sse2
(:use #:common-lisp #:sb-simd-internals #:sb-simd-sse)
@@ -691,7 +707,8 @@
#:f64-incf
#:f64-decf
#:f64-aref
- #:f64-row-major-aref)
+ #:f64-row-major-aref
+ #:f64-sap-ref)
#0#
#1#
#2#
@@ -746,8 +763,8 @@
#:f64.2-movemask
#:f64.2-incf
#:f64.2-decf
- #:f64.2-aref #:f64.2-row-major-aref
- #:f64.2-non-temporal-aref #:f64.2-non-temporal-row-major-aref
+ #:f64.2-aref #:f64.2-row-major-aref #:f64.2-sap-ref
+ #:f64.2-non-temporal-aref #:f64.2-non-temporal-row-major-aref #:f64.2-non-temporal-sap-ref
;; u8.16
#:make-u8.16
#:u8.16
@@ -777,8 +794,8 @@
;; #:u8.16-shiftr
#:u8.16-incf
#:u8.16-decf
- #:u8.16-aref #:u8.16-row-major-aref
- #:u8.16-non-temporal-aref #:u8.16-non-temporal-row-major-aref
+ #:u8.16-aref #:u8.16-row-major-aref #:u8.16-sap-ref
+ #:u8.16-non-temporal-aref #:u8.16-non-temporal-row-major-aref #:u8.16-non-temporal-sap-ref
;; u16.8
#:make-u16.8
#:u16.8
@@ -809,8 +826,8 @@
#:u16.8-elt
#:u16.8-shufflehi
#:u16.8-shufflelo
- #:u16.8-aref #:u16.8-row-major-aref
- #:u16.8-non-temporal-aref #:u16.8-non-temporal-row-major-aref
+ #:u16.8-aref #:u16.8-row-major-aref #:u16.8-sap-ref
+ #:u16.8-non-temporal-aref #:u16.8-non-temporal-row-major-aref #:u16.8-non-temporal-sap-ref
;; u32.4
#:make-u32.4
#:u32.4
@@ -838,8 +855,8 @@
#:u32.4-shiftr
#:u32.4-incf
#:u32.4-decf
- #:u32.4-aref #:u32.4-row-major-aref
- #:u32.4-non-temporal-aref #:u32.4-non-temporal-row-major-aref
+ #:u32.4-aref #:u32.4-row-major-aref #:u32.4-sap-ref
+ #:u32.4-non-temporal-aref #:u32.4-non-temporal-row-major-aref #:u32.4-non-temporal-sap-ref
#+sb-unicode
#:u32.4-string-ref
#+sb-unicode
@@ -864,8 +881,8 @@
#:u64.2-shiftr
#:u64.2-incf
#:u64.2-decf
- #:u64.2-aref #:u64.2-row-major-aref
- #:u64.2-non-temporal-aref #:u64.2-non-temporal-row-major-aref
+ #:u64.2-aref #:u64.2-row-major-aref #:u64.2-sap-ref
+ #:u64.2-non-temporal-aref #:u64.2-non-temporal-row-major-aref #:u64.2-non-temporal-sap-ref
;; s8.16
#:make-s8.16
#:s8.16
@@ -888,8 +905,8 @@
#:s8.16-unpackhi
#:s8.16-unpacklo
#:s8.16-movemask
- #:s8.16-aref #:s8.16-row-major-aref
- #:s8.16-non-temporal-aref #:s8.16-non-temporal-row-major-aref
+ #:s8.16-aref #:s8.16-row-major-aref #:s8.16-sap-ref
+ #:s8.16-non-temporal-aref #:s8.16-non-temporal-row-major-aref #:s8.16-non-temporal-sap-ref
;; s16.8
#:make-s16.8
#:s16.8
@@ -918,8 +935,8 @@
#:s16.8-shufflelo
#:s16.8-shiftl
#:s16.8-shiftr
- #:s16.8-aref #:s16.8-row-major-aref
- #:s16.8-non-temporal-aref #:s16.8-non-temporal-row-major-aref
+ #:s16.8-aref #:s16.8-row-major-aref #:s16.8-sap-ref
+ #:s16.8-non-temporal-aref #:s16.8-non-temporal-row-major-aref #:s16.8-non-temporal-sap-ref
;; s32.4
#:make-s32.4
#:s32.4
@@ -947,8 +964,8 @@
#:s32.4-shuffle
#:s32.4-shiftl
#:s32.4-shiftr
- #:s32.4-aref #:s32.4-row-major-aref
- #:s32.4-non-temporal-aref #:s32.4-non-temporal-row-major-aref
+ #:s32.4-aref #:s32.4-row-major-aref #:s32.4-sap-ref
+ #:s32.4-non-temporal-aref #:s32.4-non-temporal-row-major-aref #:s32.4-non-temporal-sap-ref
;; s64.2
#:make-s64.2
#:s64.2
@@ -967,8 +984,8 @@
#:s64.2-movemask
#:s64.2-shiftl
#:s64.2-shiftr
- #:s64.2-aref #:s64.2-row-major-aref
- #:s64.2-non-temporal-aref #:s64.2-non-temporal-row-major-aref))
+ #:s64.2-aref #:s64.2-row-major-aref #:s64.2-sap-ref
+ #:s64.2-non-temporal-aref #:s64.2-non-temporal-row-major-aref #:s64.2-non-temporal-sap-ref))
(defpackage #:sb-simd-sse3
(:use #:common-lisp #:sb-simd-internals #:sb-simd-sse2)
@@ -1013,16 +1030,16 @@
(defpackage #:sb-simd-sse4.1
(:use #:common-lisp #:sb-simd-internals #:sb-simd-ssse3)
(:shadow
- #:f32.4-non-temporal-aref #:f32.4-non-temporal-row-major-aref
- #:f64.2-non-temporal-aref #:f64.2-non-temporal-row-major-aref
- #:u8.16-non-temporal-aref #:u8.16-non-temporal-row-major-aref
- #:u16.8-non-temporal-aref #:u16.8-non-temporal-row-major-aref
- #:u32.4-non-temporal-aref #:u32.4-non-temporal-row-major-aref
- #:u64.2-non-temporal-aref #:u64.2-non-temporal-row-major-aref
- #:s8.16-non-temporal-aref #:s8.16-non-temporal-row-major-aref
- #:s16.8-non-temporal-aref #:s16.8-non-temporal-row-major-aref
- #:s32.4-non-temporal-aref #:s32.4-non-temporal-row-major-aref
- #:s64.2-non-temporal-aref #:s64.2-non-temporal-row-major-aref)
+ #:f32.4-non-temporal-aref #:f32.4-non-temporal-row-major-aref #:f32.4-non-temporal-sap-ref
+ #:f64.2-non-temporal-aref #:f64.2-non-temporal-row-major-aref #:f64.2-non-temporal-sap-ref
+ #:u8.16-non-temporal-aref #:u8.16-non-temporal-row-major-aref #:u8.16-non-temporal-sap-ref
+ #:u16.8-non-temporal-aref #:u16.8-non-temporal-row-major-aref #:u16.8-non-temporal-sap-ref
+ #:u32.4-non-temporal-aref #:u32.4-non-temporal-row-major-aref #:u32.4-non-temporal-sap-ref
+ #:u64.2-non-temporal-aref #:u64.2-non-temporal-row-major-aref #:u64.2-non-temporal-sap-ref
+ #:s8.16-non-temporal-aref #:s8.16-non-temporal-row-major-aref #:s8.16-non-temporal-sap-ref
+ #:s16.8-non-temporal-aref #:s16.8-non-temporal-row-major-aref #:s16.8-non-temporal-sap-ref
+ #:s32.4-non-temporal-aref #:s32.4-non-temporal-row-major-aref #:s32.4-non-temporal-sap-ref
+ #:s64.2-non-temporal-aref #:s64.2-non-temporal-row-major-aref #:s64.2-non-temporal-sap-ref)
#0#
#1#
#2#
@@ -1142,6 +1159,7 @@
#:f32-incf
#:f32-decf
#:f32-aref
+ #:f32-sap-ref
#:f32-row-major-aref
;; f64
#:f64
@@ -1166,6 +1184,7 @@
#:f64-incf
#:f64-decf
#:f64-aref
+ #:f64-sap-ref
#:f64-row-major-aref)
#8=
(:export
@@ -1231,8 +1250,8 @@
#:f32.4-decf
#:f32.4-dupeven
#:f32.4-dupodd
- #:f32.4-aref #:f32.4-row-major-aref
- #:f32.4-non-temporal-aref #:f32.4-non-temporal-row-major-aref
+ #:f32.4-aref #:f32.4-row-major-aref #:f32.4-sap-ref
+ #:f32.4-non-temporal-aref #:f32.4-non-temporal-row-major-aref #:f32.4-non-temporal-sap-ref
;; f64.2
#:make-f64.2
#:f64.2
@@ -1279,8 +1298,8 @@
#:f64.2-movemask
#:f64.2-incf
#:f64.2-decf
- #:f64.2-aref #:f64.2-row-major-aref
- #:f64.2-non-temporal-aref #:f64.2-non-temporal-row-major-aref
+ #:f64.2-aref #:f64.2-row-major-aref #:f64.2-sap-ref
+ #:f64.2-non-temporal-aref #:f64.2-non-temporal-row-major-aref #:f64.2-non-temporal-sap-ref
;; f32.8
#:make-f32.8
#:f32.8
@@ -1335,8 +1354,8 @@
#:f32.8-round
#:f32.8-incf
#:f32.8-decf
- #:f32.8-aref #:f32.8-row-major-aref
- #:f32.8-non-temporal-aref #:f32.8-non-temporal-row-major-aref
+ #:f32.8-aref #:f32.8-row-major-aref #:f32.8-sap-ref
+ #:f32.8-non-temporal-aref #:f32.8-non-temporal-row-major-aref #:f32.8-non-temporal-sap-ref
;; f64.4
#:make-f64.4
#:f64.4
@@ -1389,8 +1408,8 @@
#:f64.4-round
#:f64.4-incf
#:f64.4-decf
- #:f64.4-aref #:f64.4-row-major-aref
- #:f64.4-non-temporal-aref #:f64.4-non-temporal-row-major-aref
+ #:f64.4-aref #:f64.4-row-major-aref #:f64.4-sap-ref
+ #:f64.4-non-temporal-aref #:f64.4-non-temporal-row-major-aref #:f64.4-non-temporal-sap-ref
;; u8.16
#:make-u8.16
#:u8.16
@@ -1415,8 +1434,8 @@
#:u8.16-unpacklo
#:u8.16-movemask
#:u8.16-shuffle
- #:u8.16-aref #:u8.16-row-major-aref
- #:u8.16-non-temporal-aref #:u8.16-non-temporal-row-major-aref
+ #:u8.16-aref #:u8.16-row-major-aref #:u8.16-sap-ref
+ #:u8.16-non-temporal-aref #:u8.16-non-temporal-row-major-aref #:u8.16-non-temporal-sap-ref
;; u16.8
#:make-u16.8
#:u16.8
@@ -1444,8 +1463,8 @@
#:u16.8-movemask
#:u16.8-shufflehi
#:u16.8-shufflelo
- #:u16.8-aref #:u16.8-row-major-aref
- #:u16.8-non-temporal-aref #:u16.8-non-temporal-row-major-aref
+ #:u16.8-aref #:u16.8-row-major-aref #:u16.8-sap-ref
+ #:u16.8-non-temporal-aref #:u16.8-non-temporal-row-major-aref #:u16.8-non-temporal-sap-ref
;; u32.4
#:make-u32.4
#:u32.4
@@ -1470,11 +1489,13 @@
#:u32.4-unpacklo
#:u32.4-movemask
#:u32.4-permute
- #:u32.4-aref #:u32.4-row-major-aref
- #:u32.4-non-temporal-aref #:u32.4-non-temporal-row-major-aref
+ #:u32.4-aref #:u32.4-row-major-aref #:u32.4-sap-ref
+ #:u32.4-non-temporal-aref #:u32.4-non-temporal-row-major-aref #:u32.4-non-temporal-sap-ref
#+sb-unicode
#:u32.4-string-ref
#+sb-unicode
+ #:u32.4-string-sap-ref
+ #+sb-unicode
#:u32.4-row-major-string-ref
;; u64.2
#:make-u64.2
@@ -1500,8 +1521,8 @@
#:u64.2-unpacklo
#:u64.2-movemask
#:u64.2-permute
- #:u64.2-aref #:u64.2-row-major-aref
- #:u64.2-non-temporal-aref #:u64.2-non-temporal-row-major-aref
+ #:u64.2-aref #:u64.2-row-major-aref #:u64.2-sap-ref
+ #:u64.2-non-temporal-aref #:u64.2-non-temporal-row-major-aref #:u64.2-non-temporal-sap-ref
;; u8.32
#:make-u8.32
#:u8.32
@@ -1510,8 +1531,8 @@
#:u8.32-broadcast
#:u8.16-from-u8.32
#:u8.32-insert-u8.16
- #:u8.32-aref #:u8.32-row-major-aref
- #:u8.32-non-temporal-aref #:u8.32-non-temporal-row-major-aref
+ #:u8.32-aref #:u8.32-row-major-aref #:u8.32-sap-ref
+ #:u8.32-non-temporal-aref #:u8.32-non-temporal-row-major-aref #:u8.32-non-temporal-sap-ref
;; u16.16
#:make-u16.16
#:u16.16
@@ -1520,8 +1541,8 @@
#:u16.16-broadcast
#:u16.8-from-u16.16
#:u16.16-insert-u16.8
- #:u16.16-aref #:u16.16-row-major-aref
- #:u16.16-non-temporal-aref #:u16.16-non-temporal-row-major-aref
+ #:u16.16-aref #:u16.16-row-major-aref #:u16.16-sap-ref
+ #:u16.16-non-temporal-aref #:u16.16-non-temporal-row-major-aref #:u16.16-non-temporal-sap-ref
;; u32.8
#:make-u32.8
#:u32.8
@@ -1530,11 +1551,13 @@
#:u32.8-broadcast
#:u32.8-permute
#:u32.8-insert-u32.4
- #:u32.8-aref #:u32.8-row-major-aref
- #:u32.8-non-temporal-aref #:u32.8-non-temporal-row-major-aref
+ #:u32.8-aref #:u32.8-row-major-aref #:u32.8-sap-ref
+ #:u32.8-non-temporal-aref #:u32.8-non-temporal-row-major-aref #:u32.8-non-temporal-sap-ref
#+sb-unicode
#:u32.8-string-ref
#+sb-unicode
+ #:u32.8-string-sap-ref
+ #+sb-unicode
#:u32.8-row-major-string-ref
;; u64.4
#:make-u64.4
@@ -1545,8 +1568,8 @@
#:u64.4-permute
#:u64.2-from-u64.4
#:u64.4-insert-u64.2
- #:u64.4-aref #:u64.4-row-major-aref
- #:u64.4-non-temporal-aref #:u64.4-non-temporal-row-major-aref
+ #:u64.4-aref #:u64.4-row-major-aref #:u64.4-sap-ref
+ #:u64.4-non-temporal-aref #:u64.4-non-temporal-row-major-aref #:u64.4-non-temporal-sap-ref
;; s8.16
#:make-s8.16
#:s8.16
@@ -1571,8 +1594,8 @@
#:s8.16-unpacklo
#:s8.16-movemask
#:s8.16-shuffle
- #:s8.16-aref #:s8.16-row-major-aref
- #:s8.16-non-temporal-aref #:s8.16-non-temporal-row-major-aref
+ #:s8.16-aref #:s8.16-row-major-aref #:s8.16-sap-ref
+ #:s8.16-non-temporal-aref #:s8.16-non-temporal-row-major-aref #:s8.16-non-temporal-sap-ref
;; s16.8
#:make-s16.8
#:s16.8
@@ -1602,8 +1625,8 @@
#:s16.8-movemask
#:s16.8-shufflehi
#:s16.8-shufflelo
- #:s16.8-aref #:s16.8-row-major-aref
- #:s16.8-non-temporal-aref #:s16.8-non-temporal-row-major-aref
+ #:s16.8-aref #:s16.8-row-major-aref #:s16.8-sap-ref
+ #:s16.8-non-temporal-aref #:s16.8-non-temporal-row-major-aref #:s16.8-non-temporal-sap-ref
;; s32.4
#:make-s32.4
#:s32.4
@@ -1632,8 +1655,8 @@
#:s32.4-unpacklo
#:s32.4-movemask
#:s32.4-permute
- #:s32.4-aref #:s32.4-row-major-aref
- #:s32.4-non-temporal-aref #:s32.4-non-temporal-row-major-aref
+ #:s32.4-aref #:s32.4-row-major-aref #:s32.4-sap-ref
+ #:s32.4-non-temporal-aref #:s32.4-non-temporal-row-major-aref #:s32.4-non-temporal-sap-ref
;; s64.2
#:s64.2
#:make-s64.2
@@ -1661,8 +1684,8 @@
#:s64.2-unpacklo
#:s64.2-movemask
#:s64.2-permute
- #:s64.2-aref #:s64.2-row-major-aref
- #:s64.2-non-temporal-aref #:s64.2-non-temporal-row-major-aref
+ #:s64.2-aref #:s64.2-row-major-aref #:s64.2-sap-ref
+ #:s64.2-non-temporal-aref #:s64.2-non-temporal-row-major-aref #:s64.2-non-temporal-sap-ref
;; s8.32
#:make-s8.32
#:s8.32
@@ -1672,8 +1695,8 @@
#:s8.16-from-s8.32
#:s8.32-insert-s8.16
#:s8.32-permute128
- #:s8.32-aref #:s8.32-row-major-aref
- #:s8.32-non-temporal-aref #:s8.32-non-temporal-row-major-aref
+ #:s8.32-aref #:s8.32-row-major-aref #:s8.32-sap-ref
+ #:s8.32-non-temporal-aref #:s8.32-non-temporal-row-major-aref #:s8.32-non-temporal-sap-ref
;; s16.16
#:make-s16.16
#:s16.16
@@ -1683,8 +1706,8 @@
#:s16.8-from-s16.16
#:s16.16-insert-s16.8
#:s16.16-permute128
- #:s16.16-aref #:s16.16-row-major-aref
- #:s16.16-non-temporal-aref #:s16.16-non-temporal-row-major-aref
+ #:s16.16-aref #:s16.16-row-major-aref #:s16.16-sap-ref
+ #:s16.16-non-temporal-aref #:s16.16-non-temporal-row-major-aref #:s16.16-non-temporal-sap-ref
;; s32.8
#:make-s32.8
#:s32.8
@@ -1696,8 +1719,8 @@
#:s32.8-insert-s32.4
#:s32.8-permute128
#:s32.8-permute
- #:s32.8-aref #:s32.8-row-major-aref
- #:s32.8-non-temporal-aref #:s32.8-non-temporal-row-major-aref
+ #:s32.8-aref #:s32.8-row-major-aref #:s32.8-sap-ref
+ #:s32.8-non-temporal-aref #:s32.8-non-temporal-row-major-aref #:s32.8-non-temporal-sap-ref
;; s64.4
#:make-s64.4
#:s64.4
@@ -1708,8 +1731,8 @@
#:s64.4-insert-s64.2
#:s64.4-permute
#:s64.4-permute128
- #:s64.4-aref #:s64.4-row-major-aref
- #:s64.4-non-temporal-aref #:s64.4-non-temporal-row-major-aref))
+ #:s64.4-aref #:s64.4-row-major-aref #:s64.4-sap-ref
+ #:s64.4-non-temporal-aref #:s64.4-non-temporal-row-major-aref #:s64.4-non-temporal-sap-ref))
(defpackage #:sb-simd-avx2
(:use #:common-lisp #:sb-simd-internals #:sb-simd-avx)
@@ -1739,26 +1762,26 @@
#:f64.4-reverse
#:s64.2-shiftl
#:s64.2-shiftr
- #:f32.4-non-temporal-aref #:f32.4-non-temporal-row-major-aref
- #:f64.2-non-temporal-aref #:f64.2-non-temporal-row-major-aref
- #:f32.8-non-temporal-aref #:f32.8-non-temporal-row-major-aref
- #:f64.4-non-temporal-aref #:f64.4-non-temporal-row-major-aref
- #:u8.16-non-temporal-aref #:u8.16-non-temporal-row-major-aref
- #:u16.8-non-temporal-aref #:u16.8-non-temporal-row-major-aref
- #:u32.4-non-temporal-aref #:u32.4-non-temporal-row-major-aref
- #:u64.2-non-temporal-aref #:u64.2-non-temporal-row-major-aref
- #:s8.16-non-temporal-aref #:s8.16-non-temporal-row-major-aref
- #:s16.8-non-temporal-aref #:s16.8-non-temporal-row-major-aref
- #:s32.4-non-temporal-aref #:s32.4-non-temporal-row-major-aref
- #:s64.2-non-temporal-aref #:s64.2-non-temporal-row-major-aref
- #:u8.32-non-temporal-aref #:u8.32-non-temporal-row-major-aref
- #:u16.16-non-temporal-aref #:u16.16-non-temporal-row-major-aref
- #:u32.8-non-temporal-aref #:u32.8-non-temporal-row-major-aref
- #:u64.4-non-temporal-aref #:u64.4-non-temporal-row-major-aref
- #:s8.32-non-temporal-aref #:s8.32-non-temporal-row-major-aref
- #:s16.16-non-temporal-aref #:s16.16-non-temporal-row-major-aref
- #:s32.8-non-temporal-aref #:s32.8-non-temporal-row-major-aref
- #:s64.4-non-temporal-aref #:s64.4-non-temporal-row-major-aref)
+ #:f32.4-non-temporal-aref #:f32.4-non-temporal-row-major-aref #:f32.4-non-temporal-sap-ref
+ #:f64.2-non-temporal-aref #:f64.2-non-temporal-row-major-aref #:f64.2-non-temporal-sap-ref
+ #:f32.8-non-temporal-aref #:f32.8-non-temporal-row-major-aref #:f32.8-non-temporal-sap-ref
+ #:f64.4-non-temporal-aref #:f64.4-non-temporal-row-major-aref #:f64.4-non-temporal-sap-ref
+ #:u8.16-non-temporal-aref #:u8.16-non-temporal-row-major-aref #:u8.16-non-temporal-sap-ref
+ #:u16.8-non-temporal-aref #:u16.8-non-temporal-row-major-aref #:u16.8-non-temporal-sap-ref
+ #:u32.4-non-temporal-aref #:u32.4-non-temporal-row-major-aref #:u32.4-non-temporal-sap-ref
+ #:u64.2-non-temporal-aref #:u64.2-non-temporal-row-major-aref #:u64.2-non-temporal-sap-ref
+ #:s8.16-non-temporal-aref #:s8.16-non-temporal-row-major-aref #:s8.16-non-temporal-sap-ref
+ #:s16.8-non-temporal-aref #:s16.8-non-temporal-row-major-aref #:s16.8-non-temporal-sap-ref
+ #:s32.4-non-temporal-aref #:s32.4-non-temporal-row-major-aref #:s32.4-non-temporal-sap-ref
+ #:s64.2-non-temporal-aref #:s64.2-non-temporal-row-major-aref #:s64.2-non-temporal-sap-ref
+ #:u8.32-non-temporal-aref #:u8.32-non-temporal-row-major-aref #:u8.32-non-temporal-sap-ref
+ #:u16.16-non-temporal-aref #:u16.16-non-temporal-row-major-aref #:u16.16-non-temporal-sap-ref
+ #:u32.8-non-temporal-aref #:u32.8-non-temporal-row-major-aref #:u32.8-non-temporal-sap-ref
+ #:u64.4-non-temporal-aref #:u64.4-non-temporal-row-major-aref #:u64.4-non-temporal-sap-ref
+ #:s8.32-non-temporal-aref #:s8.32-non-temporal-row-major-aref #:s8.32-non-temporal-sap-ref
+ #:s16.16-non-temporal-aref #:s16.16-non-temporal-row-major-aref #:s16.16-non-temporal-sap-ref
+ #:s32.8-non-temporal-aref #:s32.8-non-temporal-row-major-aref #:s32.8-non-temporal-sap-ref
+ #:s64.4-non-temporal-aref #:s64.4-non-temporal-row-major-aref #:s64.4-non-temporal-sap-ref)
#0#
#1#
#8#
diff --git a/contrib/sb-simd/code/record.lisp b/contrib/sb-simd/code/record.lisp
index ab8f7aa3f..0ff6dcb4d 100644
--- a/contrib/sb-simd/code/record.lisp
+++ b/contrib/sb-simd/code/record.lisp
@@ -367,9 +367,29 @@
(%name :reader aref-record-name)
(%instruction-set :reader aref-record-instruction-set)))
+(defclass sap-ref-record (function-record)
+ ((%result-records
+ :type list
+ :initarg :result-records
+ :initform (required-argument :result-records)
+ :reader function-record-result-records)
+ ;; A function record, denoting the underlying primitive load or store
+ ;; operation of that record. This primitive always accepts a
+ ;; one-dimensional array and a single row-major index as arguments.
+ (%primitive
+ :type (or function-record null)
+ :initarg :primitive
+ :initform nil
+ :reader reffer-record-primitive)
+ (%name :reader sap-ref-record-name)
+ (%instruction-set :reader sap-ref-record-instruction-set)))
+
(defun aref-record-p (x)
(typep x 'aref-record))
+(defun sap-ref-record-p (x)
+ (typep x 'sap-ref-record))
+
(defmethod function-record-required-argument-records
((aref-record aref-record))
(list (reffer-record-array-record aref-record)))
@@ -378,6 +398,11 @@
((aref-record aref-record))
(find-value-record 'sb-simd:index))
+(defmethod function-record-required-argument-records
+ ((record sap-ref-record))
+ (list (find-value-record 'sb-alien:system-area-pointer)
+ (find-value-record 'sb-simd:index)))
+
(defclass row-major-aref-record (reffer-record)
(;; Define aliases for inherited slots.
(%name :reader row-major-aref-record-name)
@@ -399,11 +424,39 @@
(defun setf-aref-record-p (x)
(typep x 'setf-aref-record))
+(defclass setf-sap-ref-record (function-record)
+ (;; Define aliases for inherited slots.
+ (%name :reader setf-sap-ref-record-name)
+ (%instruction-set :reader setf-sap-ref-record-instruction-set)
+ ;; A value record, describing which kinds of objects are loaded or stored.
+ (%result-records
+ :type list
+ :initarg :result-records
+ :initform (required-argument :result-records)
+ :reader function-record-result-records)
+ ;; A function record, denoting the underlying primitive load or store
+ ;; operation of that record. This primitive always accepts a
+ ;; one-dimensional array and a single row-major index as arguments.
+ (%primitive
+ :type (or function-record null)
+ :initarg :primitive
+ :initform nil
+ :reader reffer-record-primitive)))
+
+(defun setf-sap-ref-record-p (x)
+ (typep x 'setf-sap-ref-record))
+
(defmethod function-record-required-argument-records
((setf-aref-record setf-aref-record))
(list (function-record-result-record setf-aref-record)
(reffer-record-array-record setf-aref-record)))
+(defmethod function-record-required-argument-records
+ ((setf-sap-ref-record setf-sap-ref-record))
+ (list (function-record-result-record setf-sap-ref-record)
+ (find-value-record 'sb-alien:system-area-pointer)
+ (find-value-record 'sb-simd:index)))
+
(defmethod function-record-rest-argument-record
((setf-aref-record setf-aref-record))
(find-value-record 'sb-simd:index))
@@ -423,7 +476,7 @@
(find-value-record 'sb-simd:index)))
(defmethod decode-record-definition ((_ (eql 'reffer-record)) expr)
- (destructuring-bind (type array-type aref row-major-aref) expr
+ (destructuring-bind (type array-type aref row-major-aref &optional sap-ref) expr
`(let ((.value-record. (find-value-record ',type))
(.array-record. (find-value-record ',array-type)))
(let ((.primitive. (make-instance 'row-major-aref-record
@@ -443,7 +496,14 @@
:name '(setf ,aref)
:array-record .array-record.
:primitive .primitive.
- :result-records (list .value-record.))))))
+ :result-records (list .value-record.)))
+ ,@(when sap-ref
+ `((make-instance 'sap-ref-record
+ :name ',sap-ref
+ :result-records (list .value-record.))
+ (make-instance 'setf-sap-ref-record
+ :name '(setf ,sap-ref)
+ :result-records (list .value-record.)))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
@@ -601,7 +661,12 @@
:type function-name
:initarg :row-major-aref
:initform (required-argument :row-major-aref)
- :reader vref-record-row-major-aref)))
+ :reader vref-record-row-major-aref)
+ (%sap-ref
+ :type function-name
+ :initarg :sap-ref
+ :initform (required-argument :sap-ref)
+ :reader vref-record-sap-ref)))
(defun vref-record-p (x)
(typep x 'vref-record))
@@ -612,14 +677,15 @@
:mnemonic (vref-record-mnemonic vref-record)
:vector-record (vref-record-vector-record vref-record)
:aref (vref-record-aref vref-record)
- :row-major-aref (vref-record-row-major-aref vref-record)))
+ :row-major-aref (vref-record-row-major-aref vref-record)
+ :sap-ref (vref-record-sap-ref vref-record)))
(defmethod function-record-result-records ((vref-record vref-record))
(list
(vref-record-value-record vref-record)))
(defun decode-vref-record-definition (expr instance)
- (destructuring-bind (name mnemonic value-type vector-type array-type aref row-major-aref &rest rest) expr
+ (destructuring-bind (name mnemonic value-type vector-type array-type aref row-major-aref sap-ref &rest rest) expr
`(let* ((.value-record. (find-value-record ',value-type))
(.vector-record. (find-value-record ',vector-type))
(.array-record. (find-value-record ',array-type))
@@ -633,6 +699,7 @@
:vector-record .vector-record.
:aref ',aref
:row-major-aref ',row-major-aref
+ :sap-ref ',sap-ref
,@rest)))
,(if (eq instance 'load-record)
`(make-instance 'row-major-aref-record
@@ -655,6 +722,15 @@
:name '(setf ,aref)
:array-record .array-record.
:primitive .primitive.
+ :result-records (list .value-record.)))
+ ,(if (eq instance 'load-record)
+ `(make-instance 'sap-ref-record
+ :name ',sap-ref
+ :primitive .primitive.
+ :result-records (list .value-record.))
+ `(make-instance 'setf-sap-ref-record
+ :name '(setf ,sap-ref)
+ :primitive .primitive.
:result-records (list .value-record.))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -671,7 +747,8 @@
(%value-record :reader load-record-value-record)
(%vector-record :reader load-record-vector-record)
(%aref :reader load-record-aref)
- (%row-major-aref :reader load-record-row-major-aref)))
+ (%row-major-aref :reader load-record-row-major-aref)
+ (%sap-ref :reader load-record-sap-ref)))
(defun load-record-p (x)
(typep x 'load-record))
@@ -697,7 +774,8 @@
(%value-record :reader store-record-value-record)
(%vector-record :reader store-record-vector-record)
(%aref :reader store-record-aref)
- (%row-major-aref :reader store-record-row-major-aref)))
+ (%row-major-aref :reader store-record-row-major-aref)
+ (%sap-ref :reader store-record-sap-ref)))
(defun store-record-p (x)
(typep x 'store-record))
-----------------------------------------------------------------------
hooks/post-receive
--
SBCL