master: Get the encodable ranges right for SAP-REF-{8, 16, 32}
stassats via Sbcl-commits <[email protected]> Sun, 12 Jul 2026 19:52:00 +0000
| Newsgroups | gmane.lisp.steel-bank.cvs |
|---|---|
| Message-ID | <[email protected]> |
The branch "master" has been updated in SBCL:
via 90ce44aad599b74ab63595167f276fccd6f8b0d6 (commit)
from 99af116141b9be142f093e5de5bd54f4a798c52c (commit)
- Log -----------------------------------------------------------------
commit 90ce44aad599b74ab63595167f276fccd6f8b0d6
Author: Hayley Patton <[email protected]>
Date: Sat Jul 11 15:44:25 2026 +1000
Get the encodable ranges right for SAP-REF-{8,16,32}
---
src/compiler/arm64/insts.lisp | 8 +++++++-
src/compiler/arm64/sap.lisp | 30 +++++++++++++++---------------
src/compiler/arm64/vm.lisp | 3 +++
3 files changed, 25 insertions(+), 16 deletions(-)
diff --git a/src/compiler/arm64/insts.lisp b/src/compiler/arm64/insts.lisp
index 2e60636cf..4249591b6 100644
--- a/src/compiler/arm64/insts.lisp
+++ b/src/compiler/arm64/insts.lisp
@@ -19,7 +19,9 @@
negative-add-sub-immediate-p
encode-logical-immediate fixnum-encode-logical-immediate
movi-immediate-p
- ldr-str-offset-encodable ldp-stp-offset-p
+ ldr-str-offset-encodable ldr-str-8-offset-encodable
+ ldr-str-16-offset-encodable ldr-str-32-offset-encodable
+ ldp-stp-offset-p
extend lsl lsr asr ror @ encode-fp-immediate) "SB-VM")
;; Imports from SB-VM into this package
#+sb-simd-pack
@@ -1548,6 +1550,10 @@
(multiple-value-bind (qout rem) (truncate offset (truncate size 8))
(and (zerop rem)
(typep qout '(unsigned-byte 12))))))
+;; kludge for SATISFIES types in sap.lisp
+(defun ldr-str-8-offset-encodable (offset) (ldr-str-offset-encodable offset 8))
+(defun ldr-str-16-offset-encodable (offset) (ldr-str-offset-encodable offset 16))
+(defun ldr-str-32-offset-encodable (offset) (ldr-str-offset-encodable offset 32))
(defun emit-load-store (size opc segment dst address &optional vector-size)
(let* ((base (memory-operand-base address))
diff --git a/src/compiler/arm64/sap.lisp b/src/compiler/arm64/sap.lisp
index c6fd024c3..0f10692c6 100644
--- a/src/compiler/arm64/sap.lisp
+++ b/src/compiler/arm64/sap.lisp
@@ -146,7 +146,7 @@
;;;; mumble-SYSTEM-REF and mumble-SYSTEM-SET
(macrolet ((def-system-ref-and-set
- (ref-name set-name sc type size &key signed)
+ (ref-name set-name sc type size offset-test &key signed)
`(progn
,@(when (implements-cas-sap-ref ref-name)
(multiple-value-bind (load store cas)
@@ -248,7 +248,7 @@
(:policy :fast-safe)
(:args (sap :scs (sap-reg)))
(:info offset)
- (:arg-types system-area-pointer (:constant (satisfies ldr-str-offset-encodable)))
+ (:arg-types system-area-pointer (:constant (satisfies ,offset-test)))
(:RESULTS (result :scs (,sc)))
(:result-types ,type)
(:generator 4
@@ -268,7 +268,7 @@
(:args (value :scs (,sc zero))
(sap :scs (sap-reg)))
(:info offset)
- (:arg-types ,type system-area-pointer (:constant (satisfies ldr-str-offset-encodable)))
+ (:arg-types ,type system-area-pointer (:constant (satisfies ,offset-test)))
(:generator 4
(inst ,(case size
(:byte 'strb)
@@ -279,29 +279,29 @@
'value)
(@ sap offset)))))))
(def-system-ref-and-set sap-ref-8 %set-sap-ref-8
- unsigned-reg positive-fixnum :byte :signed nil)
+ unsigned-reg positive-fixnum :byte ldr-str-8-offset-encodable :signed nil)
(def-system-ref-and-set signed-sap-ref-8 %set-signed-sap-ref-8
- signed-reg tagged-num :byte :signed t)
+ signed-reg tagged-num :byte ldr-str-8-offset-encodable :signed t)
(def-system-ref-and-set sap-ref-16 %set-sap-ref-16
- unsigned-reg positive-fixnum :short :signed nil)
+ unsigned-reg positive-fixnum :short ldr-str-16-offset-encodable :signed nil)
(def-system-ref-and-set signed-sap-ref-16 %set-signed-sap-ref-16
- signed-reg tagged-num :short :signed t)
+ signed-reg tagged-num :short ldr-str-16-offset-encodable :signed t)
(def-system-ref-and-set sap-ref-32 %set-sap-ref-32
- unsigned-reg unsigned-num :word :signed nil)
+ unsigned-reg unsigned-num :word ldr-str-32-offset-encodable :signed nil)
(def-system-ref-and-set signed-sap-ref-32 %set-signed-sap-ref-32
- signed-reg signed-num :word :signed t)
+ signed-reg signed-num :word ldr-str-32-offset-encodable :signed t)
(def-system-ref-and-set sap-ref-64 %set-sap-ref-64
- unsigned-reg unsigned-num :long :signed nil)
+ unsigned-reg unsigned-num :long ldr-str-offset-encodable :signed nil)
(def-system-ref-and-set signed-sap-ref-64 %set-signed-sap-ref-64
- signed-reg signed-num :long :signed t)
+ signed-reg signed-num :long ldr-str-offset-encodable :signed t)
(def-system-ref-and-set sap-ref-sap %set-sap-ref-sap
- sap-reg system-area-pointer :long)
+ sap-reg system-area-pointer :long ldr-str-offset-encodable)
(def-system-ref-and-set sap-ref-lispobj %set-sap-ref-lispobj
- descriptor-reg * :long)
+ descriptor-reg * :long ldr-str-offset-encodable)
(def-system-ref-and-set sap-ref-single %set-sap-ref-single
- single-reg single-float :single)
+ single-reg single-float :single ldr-str-32-offset-encodable)
(def-system-ref-and-set sap-ref-double %set-sap-ref-double
- double-reg double-float :double))
+ double-reg double-float :double ldr-str-offset-encodable))
(define-vop (%sap-ref-indexed)
(:translate %sap-ref-16-indexed %sap-ref-32-indexed %sap-ref-64-indexed)
diff --git a/src/compiler/arm64/vm.lisp b/src/compiler/arm64/vm.lisp
index d7ea7d1a8..b55201bcc 100644
--- a/src/compiler/arm64/vm.lisp
+++ b/src/compiler/arm64/vm.lisp
@@ -366,4 +366,7 @@
bic-fixnum-encode-immediate
logical-immediate-or-word-mask
sb-arm64-asm::ldr-str-offset-encodable
+ sb-arm64-asm::ldr-str-8-offset-encodable
+ sb-arm64-asm::ldr-str-16-offset-encodable
+ sb-arm64-asm::ldr-str-32-offset-encodable
power-of-two-p))
-----------------------------------------------------------------------
hooks/post-receive
--
SBCL