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