master: arm64: disassemble shifted immediates directly

stassats via Sbcl-commits <[email protected]> Fri, 19 Jun 2026 03:59:12 +0000
Newsgroups gmane.lisp.steel-bank.cvs
Message-ID <[email protected]>
The branch "master" has been updated in SBCL:
       via  b4c1ff116f1d9785f5e36806ad05f937398c9b3c (commit)
      from  2deb9c304315487e6b668b5d64f690884f229c6d (commit)

- Log -----------------------------------------------------------------
commit b4c1ff116f1d9785f5e36806ad05f937398c9b3c
Author: Stas Boukarev <[email protected]>
Date:   Fri Jun 19 06:55:55 2026 +0300

    arm64: disassemble shifted immediates directly
---
 src/compiler/arm64/insts.lisp        | 18 ++++++------------
 src/compiler/arm64/target-insts.lisp |  8 +++++---
 2 files changed, 11 insertions(+), 15 deletions(-)

diff --git a/src/compiler/arm64/insts.lisp b/src/compiler/arm64/insts.lisp
index eb8669f46..da63cb99a 100644
--- a/src/compiler/arm64/insts.lisp
+++ b/src/compiler/arm64/insts.lisp
@@ -67,8 +67,6 @@
 
   (define-arg-type shift :printer #'print-shift)
 
-  (define-arg-type 2-bit-shift :printer #'print-2-bit-shift)
-
   (define-arg-type wide-shift :printer #'print-wide-shift)
 
   (define-arg-type extend :printer #'print-extend)
@@ -80,6 +78,7 @@
   (define-arg-type immediate :sign-extend t :printer #'print-immediate)
 
   (define-arg-type unsigned-immediate :printer #'print-immediate)
+  (define-arg-type shifted-immediate :printer #'print-shifted-immediate)
 
   (define-arg-type logical-immediate :printer #'print-logical-immediate)
 
@@ -415,21 +414,16 @@
 
 (define-instruction-format
     (add-sub-imm 32
-     :default-printer '(:name :tab rd ", " rn ", " imm shift
+     :default-printer '(:name :tab rd ", " rn ", " shifted-imm
                         add-sub-imm-annotation)
      :include add-sub)
   (op2 :field (byte 5 24) :value #b10001)
-  (shift :field (byte 2 22) :type '2-bit-shift)
+  (shift :field (byte 2 22))
+  (shifted-imm :fields (list (byte 12 10) (byte 2 22)) :type 'shifted-immediate)
   (imm :field (byte 12 10) :type 'unsigned-immediate)
   (add-sub-imm-annotation :fields (list (byte 5 5) (byte 2 22) (byte 12 10))
                           :type 'add-sub-imm-annotation))
 
-(define-instruction-format
-    (adds-subs-imm 32
-     :include add-sub-imm
-     :default-printer '(:name :tab rd ", " rn ", " imm shift))
-  (rd :type 'reg))
-
 (define-instruction-format
     (add-sub-shift-reg 32
      :default-printer '(:name :tab rd ", " rn ", " rm shift)
@@ -589,7 +583,7 @@
   (:printer add-sub-ext-reg ((op #b01) (rd nil :type 'reg)))
   (:printer add-sub-shift-reg ((op #b01)))
   (:printer add-sub-imm ((op #b01) (rd #b11111))
-            '('cmn :tab rn ", " imm shift))
+            '('cmn :tab rn ", " shifted-imm))
   (:printer add-sub-ext-reg ((op #b01) (rd #b11111))
             '('cmn :tab rn ", " rm extend))
   (:printer add-sub-shift-reg ((op #b01) (rd #b11111))
@@ -608,7 +602,7 @@
   (:printer add-sub-ext-reg ((op #b11)))
   (:printer add-sub-shift-reg ((op #b11)))
   (:printer add-sub-imm ((op #b11) (rd #b11111))
-            '('cmp :tab rn ", " imm shift))
+            '('cmp :tab rn ", " shifted-imm))
   (:printer add-sub-ext-reg ((op #b11) (rd #b11111))
             '('cmp :tab rn ", " rm extend))
   (:printer add-sub-shift-reg ((op #b11) (rd #b11111))
diff --git a/src/compiler/arm64/target-insts.lisp b/src/compiler/arm64/target-insts.lisp
index 517eecacd..5d95fe847 100644
--- a/src/compiler/arm64/target-insts.lisp
+++ b/src/compiler/arm64/target-insts.lisp
@@ -57,10 +57,12 @@
   (when (plusp value)
     (format stream ", LSL #~d" (* value 16))))
 
-(defun print-2-bit-shift (value stream dstate)
+(defun print-shifted-immediate (value stream dstate)
   (declare (ignore dstate))
-  (when (= value 1)
-    (princ ", LSL #12" stream)))
+  (destructuring-bind (value shift) value
+    (format stream "#~D" (if (= shift 1)
+                             (ash value 12)
+                             value))))
 
 (defun print-extend (value stream dstate)
   (destructuring-bind (kind amount) value

-----------------------------------------------------------------------


hooks/post-receive
-- 
SBCL