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