master: sb-simd: Implement vector sap-ref for arm64
stassats via Sbcl-commits <[email protected]> Sun, 02 Aug 2026 14:03:20 +0000
| Newsgroups | gmane.lisp.steel-bank.cvs |
|---|---|
| Message-ID | <[email protected]> |
The branch "master" has been updated in SBCL:
via 1f70cb412c55a3d4ee7cd9dea6a31efe018a509d (commit)
from a659610f72c82d9bfb8a4d9eee0eeb014f016672 (commit)
- Log -----------------------------------------------------------------
commit 1f70cb412c55a3d4ee7cd9dea6a31efe018a509d
Author: Sylvia Harrington <[email protected]>
Date: Sun Aug 2 14:22:11 2026 +0100
sb-simd: Implement vector sap-ref for arm64
---
contrib/sb-simd/code/define-vref-vops.lisp | 36 +++++++++++++++++++++++++-----
1 file changed, 31 insertions(+), 5 deletions(-)
diff --git a/contrib/sb-simd/code/define-vref-vops.lisp b/contrib/sb-simd/code/define-vref-vops.lisp
index 2eaca11ae..a60c9da06 100644
--- a/contrib/sb-simd/code/define-vref-vops.lisp
+++ b/contrib/sb-simd/code/define-vref-vops.lisp
@@ -143,11 +143,10 @@
((define-vref-vop (vref-record-name)
(with-accessors ((name sb-simd-internals:vref-record-name)
(vop sb-simd-internals:vref-record-vop)
- (vop-c sb-simd-internals:vref-record-vop-c)
- (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))
(vector-primitive-type (sb-simd-internals:value-record-primitive-type vector-record))
@@ -160,7 +159,9 @@
(sb-simd-internals:value-record value-record)))
(bits-per-element (sb-simd-internals:value-record-bits scalar-record))
(bytes-per-element (ceiling bits-per-element 8))
- (shift (1- (integer-length bytes-per-element))))
+ (shift (1- (integer-length bytes-per-element)))
+ (sap-vop (when sap-ref
+ (sb-simd-internals:mksym (symbol-package name) (if store "%SET-" "%") sap-ref))))
`(progn
(defknown ,vop (,@(when store `(,value-type)) ,vector-type index (integer 0 0))
(values ,value-type &optional)
@@ -201,7 +202,32 @@
(inst ,(if store 'str 'ldr)
value
(@ tmp-tn (load-store-offset (- (ash vector-data-offset word-shift)
- other-pointer-lowtag)))))))))))))
+ other-pointer-lowtag)))))))))
+ ,@(when sap-vop
+ `((sb-c:defknown ,sap-vop (,@(when store `(,value-type))
+ sb-sys:system-area-pointer index (integer 0 0))
+ (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 zero))))
+ (sap :scs (sap-reg))
+ (offset :scs (signed-reg)))
+ (:info addend)
+ (:arg-types ,@(when store `(,value-primitive-type))
+ system-area-pointer
+ signed-num
+ (:constant (integer 0 0)))
+ ,@(unless store
+ `((:results (value :scs ,value-scs))
+ (:result-types ,value-primitive-type)))
+ (:generator 1
+ (let ((addend addend))
+ (declare (ignore addend))
+ (inst ,(if store 'str 'ldr) value
+ (@ sap offset)))))))))))
(define-vref-vops ()
`(progn
,@(loop for vref-record
-----------------------------------------------------------------------
hooks/post-receive
--
SBCL