[prev in list] [next in list] [prev in thread] [next in thread]
List: sbcl-commits
Subject: [Sbcl-commits] master: Put ARM64 instruction set in its own package.
From: "Douglas Katzman" <snuglas () users ! sourceforge ! net>
Date: 2015-12-23 0:29:28
Message-ID: E1aBXJ6-0007U0-2N () sfs-ml-1 ! v29 ! ch3 ! sourceforge ! com
[Download RAW message or body]
The branch "master" has been updated in SBCL:
via bca07454ab2933219f3a00a572a4d7cd2f82e189 (commit)
from 767a7a2ef5a2d518b764eaf14ed23ef896aa2114 (commit)
- Log -----------------------------------------------------------------
commit bca07454ab2933219f3a00a572a4d7cd2f82e189
Author: Douglas Katzman <dougk@google.com>
Date: Tue Dec 22 19:27:50 2015 -0500
Put ARM64 instruction set in its own package.
---
package-data-list.lisp-expr | 1 +
src/compiler/arm64/insts.lisp | 341 +++++++++++++++++++----------------------
src/compiler/arm64/move.lisp | 3 -
src/compiler/disassem.lisp | 2 +-
4 files changed, 157 insertions(+), 190 deletions(-)
diff --git a/package-data-list.lisp-expr b/package-data-list.lisp-expr
index 4a5ff1a..40aa347 100644
--- a/package-data-list.lisp-expr
+++ b/package-data-list.lisp-expr
@@ -148,6 +148,7 @@ of SBCL which maintained the CMU-CL-style split into two packages.)"
:doc "private: the assembler, used by the compiler"
:use ("CL" "SB!EXT" "SB!INT")
:export ("ASSEMBLY-UNIT"
+ "ASSEMBLY-UNIT-BITS"
"*ASSEM-SCHEDULER-P*"
"*ASSEM-INSTRUCTIONS*"
diff --git a/src/compiler/arm64/insts.lisp b/src/compiler/arm64/insts.lisp
index 90ee517..ad8efb8 100644
--- a/src/compiler/arm64/insts.lisp
+++ b/src/compiler/arm64/insts.lisp
@@ -10,12 +10,24 @@
;;;; provided with absolutely no warranty. See the COPYING and CREDITS
;;;; files for more information.
-(in-package "SB!VM")
-;;; FIXME: SB!DISASSEM: prefixes are used so widely in this file that
-;;; I wonder whether the separation of the disassembler from the
-;;; virtual machine is valid or adds value.
+(in-package "SB!ARM64-ASM")
-(setf sb!disassem:*disassem-inst-alignment-bytes* 4)
+(eval-when (:compile-toplevel :load-toplevel :execute)
+ ;; Imports from this package into SB-VM
+ (import '(*condition-name-vec* conditional-opcode
+ add-sub-immediate-p fixnum-add-sub-immediate-p
+ negative-add-sub-immediate-p
+ encode-logical-immediate fixnum-encode-logical-immediate
+ ldr-str-offset-encodable ldp-stp-offset-p
+ bic-mask extend lsl lsr asr ror @) 'sb!vm)
+ ;; Imports from SB-VM into this package
+ (import '(sb!vm::*register-names*
+ sb!vm::add-sub-immediate
+ sb!vm::32-bit-reg sb!vm::single-reg sb!vm::double-reg
+ sb!vm::complex-single-reg sb!vm::complex-double-reg
+ sb!vm::tmp-tn sb!vm::zr-tn sb!vm::nsp-offset)))
+
+(setf *disassem-inst-alignment-bytes* 4)
(defparameter *conditions*
@@ -45,7 +57,7 @@
;;; Set assembler parameters. (In CMU CL, this was done with
;;; a call to a macro DEF-ASSEMBLER-PARAMS.)
(eval-when (:compile-toplevel :load-toplevel :execute)
- (setf sb!assem:*assem-scheduler-p* nil))
+ (setf *assem-scheduler-p* nil))
(defun conditional-opcode (condition)
(cdr (assoc condition *conditions* :test #'eq)))
@@ -57,11 +69,10 @@
;;;; disassembler field definitions
(defun current-instruction (dstate &optional (offset 0))
- (sb!disassem::sap-ref-int
- (sb!disassem:dstate-segment-sap dstate)
- (+ (sb!disassem:dstate-cur-offs dstate) offset)
- n-word-bytes
- (sb!disassem::dstate-byte-order dstate)))
+ (sap-ref-int (dstate-segment-sap dstate)
+ (+ (dstate-cur-offs dstate) offset)
+ n-word-bytes
+ (dstate-byte-order dstate)))
(defun 32-bit-register-p (dstate)
(not (logbitp 31 (current-instruction dstate))))
@@ -151,7 +162,7 @@
(defun print-imm-writeback (value stream dstate)
(declare (ignore dstate))
(destructuring-bind (imm mode) value
- (let ((imm (sb!disassem:sign-extend imm 9)))
+ (let ((imm (sign-extend imm 9)))
(if (zerop imm)
(princ "]" stream)
(ecase mode
@@ -163,7 +174,7 @@
(format stream ", #~D]!" imm)))))))
(defun decode-pair-scaled-immediate (opc value simd)
- (ash (sb!disassem:sign-extend value 7)
+ (ash (sign-extend value 7)
(+ 2 (ash opc (- (logxor 1 simd))))))
(defun print-pair-imm-writeback (value stream dstate)
@@ -261,6 +272,9 @@
"8B"
"16B"))))
+ (defun lowest-set-bit-index (integer-value)
+ (max 0 (1- (integer-length (logand integer-value (- integer-value))))))
+
(defun print-simd-copy-reg (value stream dstate)
(declare (ignore dstate))
(destructuring-bind (offset imm5 &optional imm4) value
@@ -284,30 +298,31 @@
(logior (ldb (byte 2 0) (car value))
(ash (cadr value) 2))
(ash value 2))))
- (+ value (sb!disassem:dstate-cur-addr dstate))))
+ (+ value (dstate-cur-addr dstate))))
(defun annotate-ldr-str (register offset dstate)
(case register
- (#.code-offset
- (sb!disassem:note-code-constant offset dstate))
- (#.null-offset
- (let ((offset (+ nil-value offset)))
- (sb!disassem:maybe-note-assembler-routine offset nil dstate)
- (sb!disassem::maybe-note-static-symbol (logior offset other-pointer-lowtag)
+ (#.sb!vm::code-offset
+ (note-code-constant offset dstate))
+ (#.sb!vm::null-offset
+ (let ((offset (+ sb!vm::nil-value offset)))
+ (maybe-note-assembler-routine offset nil dstate)
+ (maybe-note-static-symbol (logior offset other-pointer-lowtag)
dstate)))
#!+sb-thread
- (#.thread-offset
- (let* ((thread-slots (primitive-object-slots
- (find 'thread *primitive-objects*
- :key #'primitive-object-name)))
+ (#.sb!vm::thread-offset
+ (let* ((thread-slots
+ (load-time-value
+ (primitive-object-slots
+ (find 'sb!vm::thread *primitive-objects*
+ :key #'primitive-object-name)) t))
(slot (find (ash offset (- word-shift)) thread-slots
:key #'slot-offset)))
(when slot
- (sb!disassem:note
- (lambda (stream)
- (format stream "thread.~(~A~)" (slot-name slot)))
- dstate))))))
+ (note (lambda (stream)
+ (format stream "thread.~(~A~)" (slot-name slot)))
+ dstate))))))
(defun find-value-from-previos-inst (register dstate)
;; Needs to be MOVZ REGISTER, imm, LSL #0
@@ -341,92 +356,65 @@
(progn
+ (define-arg-type shift :printer #'print-shift)
- (sb!disassem:define-arg-type shift
- :printer #'print-shift)
+ (define-arg-type 2-bit-shift :printer #'print-2-bit-shift)
- (sb!disassem:define-arg-type 2-bit-shift
- :printer #'print-2-bit-shift)
+ (define-arg-type wide-shift :printer #'print-wide-shift)
- (sb!disassem:define-arg-type wide-shift
- :printer #'print-wide-shift)
+ (define-arg-type extend :printer #'print-extend)
- (sb!disassem:define-arg-type extend
- :printer #'print-extend)
+ (define-arg-type ldr-str-extend :printer #'print-ldr-str-extend)
- (sb!disassem:define-arg-type ldr-str-extend
- :printer #'print-ldr-str-extend)
+ (define-arg-type scaled-immediate :printer #'print-scaled-immediate)
- (sb!disassem:define-arg-type scaled-immediate
- :printer #'print-scaled-immediate)
+ (define-arg-type immediate :sign-extend t :printer #'print-immediate)
- (sb!disassem:define-arg-type immediate
- :sign-extend t
- :printer #'print-immediate)
+ (define-arg-type unsigned-immediate :printer #'print-immediate)
- (sb!disassem:define-arg-type unsigned-immediate
- :printer #'print-immediate)
+ (define-arg-type logical-immediate :printer #'print-logical-immediate)
- (sb!disassem:define-arg-type logical-immediate
- :printer #'print-logical-immediate)
+ (define-arg-type imm-writeback :printer #'print-imm-writeback)
- (sb!disassem:define-arg-type imm-writeback
- :printer #'print-imm-writeback)
- (sb!disassem:define-arg-type pair-imm-writeback
- :printer #'print-pair-imm-writeback)
+ (define-arg-type pair-imm-writeback :printer #'print-pair-imm-writeback)
- (sb!disassem:define-arg-type reg
- :printer #'print-reg)
+ (define-arg-type reg :printer #'print-reg)
- (sb!disassem:define-arg-type x-reg
- :printer #'print-x-reg)
+ (define-arg-type x-reg :printer #'print-x-reg)
- (sb!disassem:define-arg-type x-reg-sp
- :printer #'print-x-reg-sp)
+ (define-arg-type x-reg-sp :printer #'print-x-reg-sp)
- (sb!disassem:define-arg-type w-reg
- :printer #'print-w-reg)
+ (define-arg-type w-reg :printer #'print-w-reg)
- (sb!disassem:define-arg-type reg-sp
- :printer #'print-reg-sp)
+ (define-arg-type reg-sp :printer #'print-reg-sp)
- (sb!disassem:define-arg-type reg-float-reg
- :printer #'print-reg-float-reg)
+ (define-arg-type reg-float-reg :printer #'print-reg-float-reg)
- (sb!disassem:define-arg-type float-reg
- :printer #'print-float-reg)
+ (define-arg-type float-reg :printer #'print-float-reg)
- (sb!disassem:define-arg-type simd-reg
- :printer #'print-simd-reg)
+ (define-arg-type simd-reg :printer #'print-simd-reg)
- (sb!disassem:define-arg-type simd-copy-reg
- :printer #'print-simd-copy-reg)
+ (define-arg-type simd-copy-reg :printer #'print-simd-copy-reg)
- (sb!disassem:define-arg-type sys-reg
- :printer #'print-sys-reg)
+ (define-arg-type sys-reg :printer #'print-sys-reg)
- (sb!disassem:define-arg-type cond
- :printer #'print-cond)
+ (define-arg-type cond :printer #'print-cond)
- (sb!disassem:define-arg-type ldr-str-annotation
- :printer #'annotate-ldr-str-imm)
+ (define-arg-type ldr-str-annotation :printer #'annotate-ldr-str-imm)
- (sb!disassem:define-arg-type ldr-str-reg-annotation
- :printer #'annotate-ldr-str-reg)
+ (define-arg-type ldr-str-reg-annotation :printer #'annotate-ldr-str-reg)
- (sb!disassem:define-arg-type label
- :sign-extend t
- :use-label #'use-label))
+ (define-arg-type label :sign-extend t :use-label #'use-label))
;;;; special magic to support decoding internal-error and related traps
(defun snarf-error-junk (sap offset &optional length-only)
- (let ((length (sb!sys:sap-ref-8 sap offset)))
- (declare (type sb!sys:system-area-pointer sap)
+ (let ((length (sap-ref-8 sap offset)))
+ (declare (type system-area-pointer sap)
(type (unsigned-byte 8) length))
(cond (length-only
(values 0 (1+ length) nil nil))
(t
- (let* ((inst (sb!sys:sap-ref-32 sap (- offset 4)))
+ (let* ((inst (sap-ref-32 sap (- offset 4)))
(vector (make-array length :element-type '(unsigned-byte 8)))
(index 0)
(error-number (ldb (byte 8 13) inst)))
@@ -440,7 +428,7 @@
(when (>= index length)
(return))
(let ((old-index index))
- (sc-offsets (sb!c:read-var-integer vector index))
+ (sc-offsets (read-var-integer vector index))
(lengths (- index old-index))))
(values error-number
(1+ length)
@@ -450,7 +438,7 @@
(defun brk-control (chunk inst stream dstate)
(declare (ignore inst chunk))
(let ((code (ldb (byte 8 5) (current-instruction dstate))))
- (flet ((nt (x) (if stream (sb!disassem:note x dstate))))
+ (flet ((nt (x) (if stream (note x dstate))))
(case code
(#.halt-trap
(nt "Halt trap"))
@@ -458,10 +446,10 @@
(nt "Pending interrupt trap"))
(#.error-trap
(nt "Error trap")
- (sb!disassem:handle-break-args #'snarf-error-junk stream dstate))
+ (handle-break-args #'snarf-error-junk stream dstate))
(#.cerror-trap
(nt "Cerror trap")
- (sb!disassem:handle-break-args #'snarf-error-junk stream dstate))
+ (handle-break-args #'snarf-error-junk stream dstate))
(#.breakpoint-trap
(nt "Breakpoint trap"))
(#.fun-end-breakpoint-trap
@@ -485,11 +473,11 @@
(defun register-p (thing)
(and (tn-p thing)
- (eq (sb-name (sc-sb (tn-sc thing))) 'registers)))
+ (eq (sb-name (sc-sb (tn-sc thing))) 'sb!vm::registers)))
(defun fp-register-p (thing)
(and (tn-p thing)
- (eq (sb-name (sc-sb (tn-sc thing))) 'float-registers)))
+ (eq (sb-name (sc-sb (tn-sc thing))) 'sb!vm::float-registers)))
(defun reg-size (tn)
(if (sc-is tn 32-bit-reg)
@@ -651,10 +639,10 @@
(defmacro def-emitter (name &rest specs)
- (sb!int:collect ((arg-names) (arg-types))
+ (collect ((arg-names) (arg-types))
(let* ((total-bits 32)
(overall-mask (ash -1 total-bits))
- (num-bytes (truncate total-bits sb!assem::assembly-unit-bits))
+ (num-bytes (truncate total-bits assembly-unit-bits))
(bytes (make-array num-bytes :initial-element nil)))
(dolist (spec-expr specs)
(destructuring-bind (arg size pos) spec-expr
@@ -669,9 +657,9 @@
,(1- (ash 1 size)))
,arg)))
(multiple-value-bind (start-byte offset)
- (floor pos sb!assem::assembly-unit-bits)
+ (floor pos assembly-unit-bits)
(let ((end-byte (floor (1- (+ pos size))
- sb!assem::assembly-unit-bits)))
+ assembly-unit-bits)))
(flet ((maybe-ash (expr offset)
(if (zerop offset)
expr
@@ -684,26 +672,26 @@
(svref bytes start-byte)))
(t
(push (maybe-ash
- `(ldb (byte ,(- sb!assem::assembly-unit-bits offset) 0)
+ `(ldb (byte ,(- assembly-unit-bits offset) 0)
,arg)
offset)
(svref bytes start-byte))
(do ((index (1+ start-byte) (1+ index)))
((>= index end-byte))
(push
- `(ldb (byte ,sb!assem::assembly-unit-bits
- ,(- (* sb!assem::assembly-unit-bits
+ `(ldb (byte ,assembly-unit-bits
+ ,(- (* assembly-unit-bits
(- index start-byte))
offset))
,arg)
(svref bytes index)))
(let ((len (rem (+ size offset)
- sb!assem::assembly-unit-bits)))
+ assembly-unit-bits)))
(push
`(ldb (byte ,(if (zerop len)
- sb!assem::assembly-unit-bits
+ assembly-unit-bits
len)
- ,(- (* sb!assem::assembly-unit-bits
+ ,(- (* assembly-unit-bits
(- end-byte start-byte))
offset))
,arg)
@@ -722,8 +710,8 @@
(car pieces)))
forms)))
`(defun ,(symbolicate "EMIT-" name) (segment ,@(arg-names))
- (declare (type segment segment) ,@(arg-types))
- ,@(ecase sb!c:*backend-byte-order*
+ (declare (type sb!assem:segment segment) ,@(arg-types))
+ ,@(ecase *backend-byte-order*
(:little-endian (nreverse forms))
(:big-endian forms))
nil)))))
@@ -739,13 +727,12 @@
(rn 5 5)
(rd 5 0))
-(sb!disassem:define-instruction-format
- (add-sub 32)
+(define-instruction-format (add-sub 32)
(op :field (byte 2 29))
(rn :field (byte 5 5) :type 'reg-sp)
(rd :field (byte 5 0) :type 'reg-sp))
-(sb!disassem:define-instruction-format
+(define-instruction-format
(add-sub-imm 32
:default-printer '(:name :tab rd ", " rn ", " imm shift)
:include add-sub)
@@ -753,13 +740,13 @@
(shift :field (byte 2 22) :type '2-bit-shift)
(imm :field (byte 12 10) :type 'unsigned-immediate))
-(sb!disassem:define-instruction-format
+(define-instruction-format
(adds-subs-imm 32
:include add-sub-imm
:default-printer '(:name :tab rd ", " rn ", " imm shift))
(rd :type 'reg))
-(sb!disassem:define-instruction-format
+(define-instruction-format
(add-sub-shift-reg 32
:default-printer '(:name :tab rd ", " rn ", " rm shift)
:include add-sub)
@@ -781,7 +768,7 @@
(rn 5 5)
(rd 5 0))
-(sb!disassem:define-instruction-format
+(define-instruction-format
(add-sub-ext-reg 32
:default-printer '(:name :tab rd ", " rn ", " extend)
:include add-sub)
@@ -949,7 +936,7 @@
(rn 5 5)
(rd 5 0))
-(sb!disassem:define-instruction-format
+(define-instruction-format
(add-sub-carry 32 :include add-sub
:default-printer '(:name :tab rd ", " rn ", " rm))
(op2 :field (byte 8 21) :value #b11010000)
@@ -972,8 +959,7 @@
;;;
-(sb!disassem:define-instruction-format
- (logical 32)
+(define-instruction-format (logical 32)
(op :field (byte 2 29))
(rn :field (byte 5 5) :type 'reg)
(rd :field (byte 5 0) :type 'reg))
@@ -989,7 +975,7 @@
(rn 5 5)
(rd 5 0))
-(sb!disassem:define-instruction-format
+(define-instruction-format
(logical-reg 32
:include logical
:default-printer '(:name :tab rd ", " rn ", " rm shift))
@@ -1008,7 +994,7 @@
(rn 5 5)
(rd 5 0))
-(sb!disassem:define-instruction-format
+(define-instruction-format
(logical-imm 32
:include logical
:default-printer '(:name :tab rd ", " rn ", " imm))
@@ -1188,9 +1174,9 @@
(rn 5 5)
(rd 5 0))
-(sb!disassem:define-instruction-format
- (bitfield 32
- :default-printer '(:name :tab rd ", " rn ", " immr ", " imms))
+(define-instruction-format (bitfield 32
+ :default-printer
+ '(:name :tab rd ", " rn ", " immr ", " imms))
(op :field (byte 2 29))
(op2 :field (byte 6 23) :value #b100110)
(n :field (byte 1 22) :value +64-bit-size+)
@@ -1294,8 +1280,7 @@
(rn 5 5)
(rd 5 0))
-(sb!disassem:define-instruction-format
- (extract 32)
+(define-instruction-format (extract 32)
(op2 :field (byte 8 23) :value #b00100111)
(op3 :field (byte 1 21) :value #b0)
(rm :field (byte 5 16) :type 'reg)
@@ -1328,9 +1313,8 @@
(imm 16 5)
(rd 5 0))
-(sb!disassem:define-instruction-format
- (move-wide 32
- :default-printer '(:name :tab rd ", " imm shift))
+(define-instruction-format (move-wide 32
+ :default-printer '(:name :tab rd ", " imm shift))
(op :field (byte 2 29))
(op2 :field (byte 6 23) :value #b100101)
(shift :field (byte 2 21) :type 'wide-shift)
@@ -1340,7 +1324,7 @@
(defmacro process-null-sc (reg)
`(setf ,reg (if (and (tn-p ,reg)
(eq 'null (sc-name (tn-sc ,reg))))
- null-tn
+ sb!vm::null-tn
,reg)))
(define-instruction-macro mov-sp (rd rm)
@@ -1351,7 +1335,7 @@
(rm ,rm))
(process-null-sc rm)
(if (integerp rm)
- (load-immediate-word rd rm)
+ (sb!vm::load-immediate-word rd rm)
(inst orr rd zr-tn rm))))
(define-instruction movn (segment rd imm &optional (shift 0))
@@ -1384,7 +1368,7 @@
(rn 5 5)
(rd 5 0))
-(sb!disassem:define-instruction-format
+(define-instruction-format
(cond-select 32
:default-printer '(:name :tab rd ", " rn ", " rm ", " cond))
(op :field (byte 1 30))
@@ -1457,9 +1441,8 @@
(rn 5 5)
(rd 5 0))
-(sb!disassem:define-instruction-format
- (data-processing-1 32
- :default-printer '(:name :tab rd ", " rn))
+(define-instruction-format (data-processing-1 32
+ :default-printer '(:name :tab rd ", " rn))
(op2 :field (byte 18 13) :value #b101101011000000000)
(op :field (byte 3 10))
(rn :field (byte 5 5) :type 'reg)
@@ -1489,9 +1472,8 @@
(rn 5 5)
(rd 5 0))
-(sb!disassem:define-instruction-format
- (data-processing-2 32
- :default-printer '(:name :tab rd ", " rn ", " rm))
+(define-instruction-format (data-processing-2 32
+ :default-printer '(:name :tab rd ", " rn ", " rm))
(op2 :field (byte 10 21) :value #b0011010110)
(rm :field (byte 5 16) :type 'reg)
(op :field (byte 6 10))
@@ -1531,9 +1513,9 @@
(rn 5 5)
(rd 5 0))
-(sb!disassem:define-instruction-format
- (data-processing-3 32
- :default-printer '(:name :tab rd ", " rn ", " rm ", " ra))
+(define-instruction-format (data-processing-3 32
+ :default-printer
+ '(:name :tab rd ", " rn ", " rm ", " ra))
(op2 :field (byte 7 24) :value #b0011011)
(op31 :field (byte 3 21))
(rm :field (byte 5 16) :type 'reg)
@@ -1584,8 +1566,7 @@
0 31 (tn-offset rn) (tn-offset rd))))
;;;
-(sb!disassem:define-instruction-format
- (ldr-str 32)
+(define-instruction-format (ldr-str 32)
(size :field (byte 2 30))
(op2 :field (byte 3 27) :value #b111)
(v :field (byte 1 26))
@@ -1605,7 +1586,7 @@
(rn 5 5)
(rt 5 0))
-(sb!disassem:define-instruction-format
+(define-instruction-format
(ldr-str-unsigned-imm 32
:default-printer '(:name :tab rt ", [" rn (:unless (just-imm :constant 0) ", " imm) "]"
ldr-str-annotation)
@@ -1628,7 +1609,7 @@
(rn 5 5)
(rt 5 0))
-(sb!disassem:define-instruction-format
+(define-instruction-format
(ldr-str-unscaled-imm 32
:default-printer '(:name :tab rt ", [" rn imm-writeback ldr-str-annotation)
:include ldr-str)
@@ -1652,7 +1633,7 @@
(rn 5 5)
(rt 5 0))
-(sb!disassem:define-instruction-format
+(define-instruction-format
(ldr-str-reg 32
:default-printer '(:name :tab rt ", [" rn ", " rm option "]" ldr-str-annotation)
:include ldr-str)
@@ -1669,10 +1650,9 @@
(imm 19 5)
(rt 5 0))
-(sb!disassem:define-instruction-format
- (ldr-literal 32
- :default-printer '(:name :tab rt ", " label)
- :include ldr-str)
+(define-instruction-format (ldr-literal 32
+ :default-printer '(:name :tab rt ", " label)
+ :include ldr-str)
(op2 :value #b011)
(label :field (byte 19 5) :type 'label)
(rt :fields (list (byte 2 30) (byte 5 0))))
@@ -1816,7 +1796,7 @@
(rn 5 5)
(rt 5 0))
-(sb!disassem:define-instruction-format
+(define-instruction-format
(ldr-str-pair 32
:default-printer '(:name :tab rt ", " rt2 ", [" rn pair-imm-writeback)
:include ldr-str)
@@ -1898,8 +1878,7 @@
(rn 5 5)
(rt 5 0))
-(sb!disassem:define-instruction-format
- (ldr-str-exclusive 32)
+(define-instruction-format (ldr-str-exclusive 32)
(size :field (byte 2 30))
(op2 :field (byte 6 24) :value #b001000)
(o2 :field (byte 1 23))
@@ -1957,8 +1936,8 @@
(#b0 1 4)
(cond 4 0))
-(sb!disassem:define-instruction-format
- (cond-branch 32 :default-printer '(:name cond :tab target))
+(define-instruction-format (cond-branch 32
+ :default-printer '(:name cond :tab target))
(op1 :field (byte 8 24) :value #b01010100)
(target :field (byte 19 5) :type 'label)
(op2 :field (byte 1 4) :value #b0)
@@ -1969,8 +1948,8 @@
(#b00101 5 26)
(imm 26 0))
-(sb!disassem:define-instruction-format
- (uncond-branch 32 :default-printer '(:name :tab target))
+(define-instruction-format (uncond-branch 32
+ :default-printer '(:name :tab target))
(op :field (byte 1 31))
(op2 :field (byte 5 26) :value #b00101)
(target :field (byte 26 0) :type 'label))
@@ -2022,9 +2001,8 @@
(rn 5 5)
(#b00000 5 0))
-(sb!disassem:define-instruction-format
- (uncond-branch-reg 32
- :default-printer '(:name :tab rn))
+(define-instruction-format (uncond-branch-reg 32
+ :default-printer '(:name :tab rn))
(op2 :field (byte 7 25) :value #b1101011)
(op :field (byte 4 21))
(op3 :field (byte 11 10) :value #b11111000000)
@@ -2041,9 +2019,9 @@
(:emitter
(emit-uncond-branch-reg segment 1 (tn-offset register))))
-(define-instruction ret (segment &optional (register lr-tn))
+(define-instruction ret (segment &optional (register sb!vm::lr-tn))
(:printer uncond-branch-reg ((op #b10)))
- (:printer uncond-branch-reg ((op #b10) (rn lr-offset))
+ (:printer uncond-branch-reg ((op #b10) (rn sb!vm::lr-offset))
'(:name))
(:emitter
(emit-uncond-branch-reg segment #b10 (tn-offset register))))
@@ -2057,8 +2035,8 @@
(imm 19 5)
(rt 5 0))
-(sb!disassem:define-instruction-format
- (compare-branch-imm 32 :default-printer '(:name :tab rt ", " label))
+(define-instruction-format (compare-branch-imm 32
+ :default-printer '(:name :tab rt ", " label))
(size :field (byte 1 31))
(op1 :field (byte 6 25) :value #b011010)
(op :field (byte 1 24))
@@ -2130,8 +2108,7 @@
(#b000 3 2)
(ll 2 0))
-(sb!disassem:define-instruction-format
- (exception 32 :default-printer '(:name :tab imm))
+(define-instruction-format (exception 32 :default-printer '(:name :tab imm))
(op2 :field (byte 8 24) :value #b11010100)
(op :field (byte 3 21))
(imm :field (byte 16 5) :type 'unsigned-immediate)
@@ -2158,8 +2135,8 @@
(immhi 19 5)
(rd 5 0))
-(sb!disassem:define-instruction-format
- (pc-relative 32 :default-printer '(:name :tab rd ", " label))
+(define-instruction-format (pc-relative 32
+ :default-printer '(:name :tab rd ", " label))
(op :field (byte 1 31))
(op2 :field (byte 5 24) :value #b10000)
(label :fields (list (byte 2 29) (byte 19 5)) :type 'label)
@@ -2195,8 +2172,7 @@
(sys-reg 16 5)
(rt 5 0))
-(sb!disassem:define-instruction-format
- (sys-reg 32)
+(define-instruction-format (sys-reg 32)
(op :field (byte 10 22) :value #b1101010100)
(l :field (byte 1 21))
(sys-reg :field (byte 16 5) :type 'sys-reg)
@@ -2234,8 +2210,7 @@
(op 3 5)
(#b11111 5 0))
-(sb!disassem:define-instruction-format
- (system 32)
+(define-instruction-format (system 32)
(op1 :field (byte 20 12) :value #b11010101000000110011)
(crm :field (byte 4 8))
(op :field (byte 3 5))
@@ -2293,8 +2268,7 @@
(imm 3 5)
(#b11111 5 0))
-(sb!disassem:define-instruction-format
- (hint 32 :default-printer '(:name))
+(define-instruction-format (hint 32 :default-printer '(:name))
(op1 :field (byte 24 8) :value #b110101010000001100100000)
(imm :field (byte 3 5))
(op2 :field (byte 5 0) :value #b11111))
@@ -2328,8 +2302,8 @@
(z 1 3)
(#b000 3 0))
-(sb!disassem:define-instruction-format
- (fp-compare 32 :default-printer '(:name :tab rn ", " rm))
+(define-instruction-format (fp-compare 32
+ :default-printer '(:name :tab rn ", " rm))
(op1 :field (byte 9 23) :value #b000111100)
(type :field (byte 1 22))
(rm :field (byte 5 16) :type 'float-reg)
@@ -2366,8 +2340,7 @@
(def-fp-compare fcmp #b0)
(def-fp-compare fcmpe #b1)
-(sb!disassem:define-instruction-format
- (fp-data-processing 32)
+(define-instruction-format (fp-data-processing 32)
(rn :field (byte 5 5) :type 'float-reg)
(rd :field (byte 5 0) :type 'float-reg))
@@ -2380,7 +2353,7 @@
(rn 5 5)
(rd 5 0))
-(sb!disassem:define-instruction-format
+(define-instruction-format
(fp-data-processing-1 32
:include fp-data-processing
:default-printer '(:name :tab rd ", " rn))
@@ -2399,7 +2372,7 @@
(rn 5 5)
(rd 5 0))
-(sb!disassem:define-instruction-format
+(define-instruction-format
(fp-data-processing-2 32
:include fp-data-processing
:default-printer '(:name :tab rd ", " rn ", " rm))
@@ -2419,7 +2392,7 @@
(rn 5 5)
(rd 5 0))
-(sb!disassem:define-instruction-format
+(define-instruction-format
(fp-data-processing-3 32
:include fp-data-processing
:default-printer '(:name :tab rd ", " rn ", " rm ", " ra))
@@ -2439,10 +2412,9 @@
(rn 5 5)
(rd 5 0))
-(sb!disassem:define-instruction-format
- (fp-conversion 32
- :include fp-data-processing
- :default-printer '(:name :tab rd ", " rn))
+(define-instruction-format (fp-conversion 32
+ :include fp-data-processing
+ :default-printer '(:name :tab rd ", " rn))
(op2 :field (byte 8 23) :value #b00111100)
(type :field (byte 1 22))
(op1 :field (byte 1 21) :value #b1)
@@ -2474,10 +2446,9 @@
(def-fp-data-processing-1 frintx #b1110)
(def-fp-data-processing-1 frinti #b1111)
-(sb!disassem:define-instruction-format
- (fcvt 32
- :include fp-data-processing-1
- :default-printer '(:name :tab rd ", " rn))
+(define-instruction-format (fcvt 32
+ :include fp-data-processing-1
+ :default-printer '(:name :tab rd ", " rn))
(op :field (byte 2 17) :value #b01)
(rn :fields (list (byte 1 22) (byte 5 5)))
(rd :fields (list (byte 2 15) (byte 5 0))))
@@ -2759,9 +2730,8 @@
(rn 5 5)
(rd 5 0))
-(sb!disassem:define-instruction-format
- (simd-three-same 32
- :default-printer '(:name :tab rd ", " rn ", " rm))
+(define-instruction-format (simd-three-same 32
+ :default-printer '(:name :tab rd ", " rn ", " rm))
(op3 :field (byte 1 31) :value #b0)
(u :field (byte 1 29))
(op4 :field (byte 5 24) :value #b01110)
@@ -2836,9 +2806,8 @@
(rn 5 5)
(rd 5 0))
-(sb!disassem:define-instruction-format
- (simd-copy 32
- :default-printer '(:name :tab rd ", " rn))
+(define-instruction-format (simd-copy 32
+ :default-printer '(:name :tab rd ", " rn))
(op3 :field (byte 1 31) :value #b0)
(q :field (byte 1 30))
(op :field (byte 1 29))
diff --git a/src/compiler/arm64/move.lisp b/src/compiler/arm64/move.lisp
index 2e0c967..220f871 100644
--- a/src/compiler/arm64/move.lisp
+++ b/src/compiler/arm64/move.lisp
@@ -11,9 +11,6 @@
(in-package "SB!VM")
-(defun lowest-set-bit-index (integer-value)
- (max 0 (1- (integer-length (logand integer-value (- integer-value))))))
-
(defun load-immediate-word (y val)
(cond ((typep val '(unsigned-byte 16))
(inst movz y val))
diff --git a/src/compiler/disassem.lisp b/src/compiler/disassem.lisp
index 29385fe..e311c81 100644
--- a/src/compiler/disassem.lisp
+++ b/src/compiler/disassem.lisp
@@ -35,7 +35,7 @@
;; if that backend has been converted to use a distinct ASM package.
(eval-when (:compile-toplevel :load-toplevel :execute)
(defparameter sb!assem::*backend-instruction-set-package*
- (or #!+(or arm mips ppc sparc x86 x86-64)
+ (or #!+(or arm arm64 mips ppc sparc x86 x86-64)
(find-package #.(sb-cold::backend-asm-package-name))
(find-package "SB!VM")))) ; temporary
-----------------------------------------------------------------------
hooks/post-receive
--
SBCL
------------------------------------------------------------------------------
_______________________________________________
Sbcl-commits mailing list
Sbcl-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sbcl-commits
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic