master: x86-64: unify all float immediates
stassats via Sbcl-commits <[email protected]> Sun, 28 Jun 2026 13:03:23 +0000
| Newsgroups | gmane.lisp.steel-bank.cvs |
|---|---|
| Message-ID | <[email protected]> |
The branch "master" has been updated in SBCL:
via 5b6a30331b6c25d83cf70a414e57c37ac89dbb33 (commit)
from 225e9c1f80f29930e1227cc66c832c3b9ae31474 (commit)
- Log -----------------------------------------------------------------
commit 5b6a30331b6c25d83cf70a414e57c37ac89dbb33
Author: Stas Boukarev <[email protected]>
Date: Sat Jun 27 18:31:39 2026 +0300
x86-64: unify all float immediates
---
src/compiler/x86-64/array.lisp | 8 +--
src/compiler/x86-64/cell.lisp | 6 +-
src/compiler/x86-64/float.lisp | 118 ++++++++++++++++-----------------
src/compiler/x86-64/simd-pack-256.lisp | 9 +--
src/compiler/x86-64/simd-pack.lisp | 11 ++-
src/compiler/x86-64/vm.lisp | 58 +++++-----------
6 files changed, 89 insertions(+), 121 deletions(-)
diff --git a/src/compiler/x86-64/array.lisp b/src/compiler/x86-64/array.lisp
index 6a6d45d25..6049d370f 100644
--- a/src/compiler/x86-64/array.lisp
+++ b/src/compiler/x86-64/array.lisp
@@ -783,7 +783,7 @@
(define-vop (data-vector-set-with-offset/simple-array-single-float-c dvset)
(:args (object :scs (descriptor-reg))
- (value :scs (single-reg fp-single-immediate)))
+ (value :scs (single-reg fp-immediate)))
(:info index addend)
(:arg-types simple-array-single-float (:constant low-index)
(:constant (constant-displacement other-pointer-lowtag
@@ -791,7 +791,7 @@
single-float)
(:generator 4
(unpoison-element object (+ index addend))
- (if (sc-is value fp-single-immediate)
+ (if (sc-is value fp-immediate)
(inst mov :dword (float-ref-ea object index addend 4)
(single-float-bits (tn-value value)))
(inst movss (float-ref-ea object index addend 4) value))))
@@ -834,7 +834,7 @@
(define-vop (data-vector-set-with-offset/simple-array-double-float-c dvset)
(:args (object :scs (descriptor-reg))
- (value :scs (double-reg (fp-double-immediate
+ (value :scs (double-reg (fp-immediate
(eql (tn-value tn) 0d0)))))
(:info index addend)
(:arg-types simple-array-double-float (:constant low-index)
@@ -843,7 +843,7 @@
double-float)
(:generator 19
(unpoison-element object (+ index addend))
- (if (sc-is value fp-double-immediate)
+ (if (sc-is value fp-immediate)
(inst mov :qword (float-ref-ea object index addend 8) 0)
(inst movsd (float-ref-ea object index addend 8) value))))
diff --git a/src/compiler/x86-64/cell.lisp b/src/compiler/x86-64/cell.lisp
index 6f6f1d48f..576206163 100644
--- a/src/compiler/x86-64/cell.lisp
+++ b/src/compiler/x86-64/cell.lisp
@@ -685,11 +685,11 @@
(index :scs (any-reg immediate))
(value :scs (,result-sc ,@(case result-sc
(single-reg
- '(fp-single-immediate))
+ '(fp-immediate))
(double-reg
- '((fp-double-immediate (eql (tn-value tn) 0d0))))
+ '((fp-immediate (eql (tn-value tn) 0d0))))
(complex-single-reg
- '((fp-complex-single-immediate (eql (tn-value tn) #c(0f0 0f0)))))
+ '((fp-immediate (eql (tn-value tn) #c(0f0 0f0)))))
((unsigned-reg signed-reg)
'((immediate (plausible-signed-imm32-operand-p (tn-value tn)))))))))
(:arg-types * tagged-num ,result-type)
diff --git a/src/compiler/x86-64/float.lisp b/src/compiler/x86-64/float.lisp
index 18c4a3a9d..b2b9396b8 100644
--- a/src/compiler/x86-64/float.lisp
+++ b/src/compiler/x86-64/float.lisp
@@ -74,10 +74,10 @@
;;; X is source, Y is destination.
(define-move-fun (load-fp-immediate 1) (vop x y)
- ((fp-single-immediate) (single-reg)
- (fp-double-immediate) (double-reg)
- (fp-complex-single-immediate) (complex-single-reg)
- (fp-complex-double-immediate) (complex-double-reg))
+ ((fp-immediate) (single-reg)
+ (fp-immediate) (double-reg)
+ (fp-immediate) (complex-single-reg)
+ (fp-immediate) (complex-double-reg))
(if (member (tn-value x) '(0f0 0d0 #c(0d0 0d0) #c(0f0 0f0)))
(sc-case y
((single-reg complex-single-reg) (inst xorps y y))
@@ -352,14 +352,14 @@
(:arg-types ,ptype ,ptype)
(:result-types ,ptype)))))
(frob single-float-op single-float-comm-op
- single-reg fp-single-immediate single-float)
+ single-reg fp-immediate single-float)
(frob double-float-op double-float-comm-op
- double-reg fp-double-immediate double-float)
+ double-reg fp-immediate double-float)
(frob complex-single-float-op complex-single-float-comm-op
- complex-single-reg fp-complex-single-immediate
+ complex-single-reg fp-immediate
complex-single-float)
(frob complex-double-float-op complex-double-float-comm-op
- complex-double-reg fp-complex-double-immediate
+ complex-double-reg fp-immediate
complex-double-float))
(defun note-float-location (op vop &rest args)
@@ -381,7 +381,7 @@
`(flet ((get-constant (tn &optional maybe-aligned)
(declare (ignorable maybe-aligned))
(let ((value (tn-value tn)))
- ,(if (eq constant-sc 'fp-complex-single-immediate)
+ ,(if (eq constant-sc 'fp-immediate)
`(if maybe-aligned
(register-inline-constant
:aligned value)
@@ -426,7 +426,7 @@
(:temporary (:sc single-reg) tmp)
(:vop-var vop)
(:generator ,scost
- (generate ,op ,sinst ,commutative fp-single-immediate movss)))
+ (generate ,op ,sinst ,commutative fp-immediate movss)))
(define-vop (,dname ,(if commutative
'double-float-comm-op
'double-float-op))
@@ -434,7 +434,7 @@
(:temporary (:sc double-reg) tmp)
(:vop-var vop)
(:generator ,dcost
- (generate ,op ,dinst ,commutative fp-double-immediate movsd)))
+ (generate ,op ,dinst ,commutative fp-immediate movsd)))
,(when csinst
`(define-vop (,csname
,(if commutative
@@ -445,7 +445,7 @@
(:vop-var vop)
(:generator ,cscost
(generate ,op ,csinst ,commutative
- fp-complex-single-immediate movq))))
+ fp-immediate movq))))
,(when cdinst
`(define-vop (,cdname
,(if commutative
@@ -456,7 +456,7 @@
(:vop-var vop)
(:generator ,cdcost
(generate ,op ,cdinst ,commutative
- fp-complex-double-immediate movapd)))))))
+ fp-immediate movapd)))))))
(frob + addss +/single-float 2 addsd +/double-float 2 t
addps +/complex-single-float 3 addpd +/complex-double-float 3)
(frob - subss -/single-float 2 subsd -/double-float 2 nil
@@ -679,8 +679,8 @@
(move dup real)
(inst unpcklps dup dup)))
,single-inst movss movq
- single-reg fp-single-immediate single-float
- complex-single-reg fp-complex-single-immediate complex-single-float
+ single-reg fp-immediate single-float
+ complex-single-reg fp-immediate complex-single-float
,single-real-complex-name ,single-complex-real-name)
(frob ,op ,double-cost ,commutativep
,(and duplicatep
@@ -688,8 +688,8 @@
(move dup real)
(inst unpcklpd dup dup)))
,double-inst movsd movapd
- double-reg fp-double-immediate double-float
- complex-double-reg fp-complex-double-immediate complex-double-float
+ double-reg fp-immediate double-float
+ complex-double-reg fp-immediate complex-double-float
,double-real-complex-name ,double-complex-real-name))))
(def-real-complex-op + t nil
addps +/real-complex-single-float +/complex-real-single-float 3
@@ -706,13 +706,13 @@
(define-vop (//complex-real-single-float float-op)
(:translate /)
- (:args (x :scs (complex-single-reg fp-complex-single-immediate)
+ (:args (x :scs (complex-single-reg fp-immediate)
:to (:result 0)
:target r
- :load-if (not (sc-is x fp-complex-single-immediate)))
- (y :scs (single-reg fp-single-immediate)
+ :load-if (not (sc-is x fp-immediate)))
+ (y :scs (single-reg fp-immediate)
:target dup
- :load-if (not (sc-is y fp-single-immediate))))
+ :load-if (not (sc-is y fp-immediate))))
(:arg-types complex-single-float single-float)
(:temporary (:sc complex-single-reg :from (:argument 1)) dup)
(:results (r :scs (complex-single-reg)))
@@ -728,7 +728,7 @@
(single-float-bits (realpart x)))))))
(register-inline-constant :oword (logior (ash word 64) word)))))
(sc-case y
- (fp-single-immediate
+ (fp-immediate
(if (eql (tn-value y) 0f0)
(inst xorps dup dup)
(setf dup (duplicate (complex (setf second-value (tn-value y))
@@ -737,7 +737,7 @@
(setf second-value y)
(inst shufps dup dup #b00000000)))
(sc-case x
- (fp-complex-single-immediate
+ (fp-immediate
(if (eql (tn-value x) #c(0f0 0f0))
(inst xorps r r)
(inst movaps r (duplicate (setf first-value (tn-value x))))))
@@ -919,13 +919,13 @@
(inst movmskps bits mask)
(inst cmp :byte bits #b1111)))))
(define-float-eql eql/single-float 4
- single-reg fp-single-immediate single-float)
+ single-reg fp-immediate single-float)
(define-float-eql eql/double-float 4
- double-reg fp-double-immediate double-float)
+ double-reg fp-immediate double-float)
(define-float-eql eql/complex-single-float 5
- complex-single-reg fp-complex-single-immediate complex-single-float)
+ complex-single-reg fp-immediate complex-single-float)
(define-float-eql eql/complex-double-float 5
- complex-double-reg fp-complex-double-immediate complex-double-float))
+ complex-double-reg fp-immediate complex-double-float))
(define-vop (generic-eq/single-float/c float-compare)
(:translate eq)
@@ -943,23 +943,23 @@
(define-vop (single-float-compare float-compare)
(:args (x :scs (single-reg))
- (y :scs (single-reg single-stack fp-single-immediate)
- :load-if (not (sc-is y single-stack fp-single-immediate))))
+ (y :scs (single-reg single-stack fp-immediate)
+ :load-if (not (sc-is y single-stack fp-immediate))))
(:arg-types single-float single-float))
(define-vop (double-float-compare float-compare)
(:args (x :scs (double-reg))
- (y :scs (double-reg double-stack descriptor-reg fp-double-immediate)
- :load-if (not (sc-is y double-stack descriptor-reg fp-double-immediate))))
+ (y :scs (double-reg double-stack descriptor-reg fp-immediate)
+ :load-if (not (sc-is y double-stack descriptor-reg fp-immediate))))
(:arg-types double-float double-float))
(define-vop (=/single-float single-float-compare)
(:translate =)
- (:args (x :scs (single-reg single-stack fp-single-immediate)
+ (:args (x :scs (single-reg single-stack fp-immediate)
:target xmm
- :load-if (not (sc-is x single-stack fp-single-immediate)))
- (y :scs (single-reg single-stack fp-single-immediate)
+ :load-if (not (sc-is x single-stack fp-immediate)))
+ (y :scs (single-reg single-stack fp-immediate)
:target xmm
- :load-if (not (sc-is y single-stack fp-single-immediate))))
+ :load-if (not (sc-is y single-stack fp-immediate))))
(:temporary (:sc single-reg :from :eval) xmm)
(:conditional not :p :ne)
(:vop-var vop)
@@ -970,13 +970,13 @@
(sc-case x
(single-reg (setf xmm x))
(single-stack (inst movss xmm (ea-for-sf-stack x)))
- (fp-single-immediate
+ (fp-immediate
(inst movss xmm (register-inline-constant (tn-value x)))))
(note-float-location '= vop xmm y)
(sc-case y
(single-stack
(setf y (ea-for-sf-stack y)))
- (fp-single-immediate
+ (fp-immediate
(setf y (register-inline-constant (tn-value y))))
(t))
(inst comiss xmm y)
@@ -986,12 +986,12 @@
(define-vop (=/double-float double-float-compare)
(:translate =)
- (:args (x :scs (double-reg double-stack fp-double-immediate descriptor-reg)
+ (:args (x :scs (double-reg double-stack fp-immediate descriptor-reg)
:target xmm
- :load-if (not (sc-is x double-stack fp-double-immediate descriptor-reg)))
- (y :scs (double-reg double-stack fp-double-immediate descriptor-reg)
+ :load-if (not (sc-is x double-stack fp-immediate descriptor-reg)))
+ (y :scs (double-reg double-stack fp-immediate descriptor-reg)
:target xmm
- :load-if (not (sc-is y double-stack fp-double-immediate descriptor-reg))))
+ :load-if (not (sc-is y double-stack fp-immediate descriptor-reg))))
(:temporary (:sc double-reg :from :eval) xmm)
(:conditional not :p :ne)
(:vop-var vop)
@@ -1004,7 +1004,7 @@
(setf xmm x))
(double-stack
(inst movsd xmm (ea-for-df-stack x)))
- (fp-double-immediate
+ (fp-immediate
(inst movsd xmm (register-inline-constant (tn-value x))))
(descriptor-reg
(inst movsd xmm (ea-for-df-desc x))))
@@ -1012,7 +1012,7 @@
(sc-case y
(double-stack
(setf y (ea-for-df-stack y)))
- (fp-double-immediate
+ (fp-immediate
(setf y (register-inline-constant (tn-value y))))
(descriptor-reg
(setf y (ea-for-df-desc y)))
@@ -1073,12 +1073,12 @@
:load-if (not (sc-is y ,complex-constant-sc))))
(:arg-types ,real-type ,complex-type)))))
(define-complex-float-= =/complex-single-float =/complex-real-single-float =/real-complex-single-float
- single-reg fp-single-immediate single-float
- complex-single-reg fp-complex-single-immediate complex-single-float
+ single-reg fp-immediate single-float
+ complex-single-reg fp-immediate complex-single-float
movss movq cmpps movmskps #b1111)
(define-complex-float-= =/complex-double-float =/complex-real-double-float =/real-complex-double-float
- double-reg fp-double-immediate double-float
- complex-double-reg fp-complex-double-immediate complex-double-float
+ double-reg fp-immediate double-float
+ complex-double-reg fp-immediate complex-double-float
movsd movapd cmppd movmskpd #b11))
(macrolet ((define (op single-name double-name flags &optional flip)
@@ -1095,7 +1095,7 @@
(setf y (ea-for-df-stack y)))
(descriptor-reg
(setf y (ea-for-df-desc y)))
- (fp-double-immediate
+ (fp-immediate
(setf y (register-inline-constant (tn-value y))))
,(if flip
`(t
@@ -1112,7 +1112,7 @@
(sc-case y
(single-stack
(setf y (ea-for-sf-stack y)))
- (fp-single-immediate
+ (fp-immediate
(setf y (register-inline-constant (tn-value y))))
,(if flip
`(t
@@ -1399,10 +1399,10 @@
(define-vop (make-complex-single-float)
(:translate complex)
- (:args (real :scs (single-reg (fp-single-immediate
+ (:args (real :scs (single-reg (fp-immediate
(eql (tn-value tn) 0f0)))
:target r)
- (imag :scs (single-reg (fp-single-immediate
+ (imag :scs (single-reg (fp-immediate
(eql (tn-value tn) 0f0)))))
(:arg-types single-float single-float)
(:results (r :scs (complex-single-reg) :from (:argument 0)))
@@ -1410,24 +1410,24 @@
(:note "inline complex single-float creation")
(:policy :fast-safe)
(:generator 5
- (cond ((sc-is real fp-single-immediate)
+ (cond ((sc-is real fp-immediate)
(inst xorps r r)
- (unless (sc-is imag fp-single-immediate)
+ (unless (sc-is imag fp-immediate)
(inst unpcklps r imag)))
((location= real imag)
(move r real)
(inst unpcklps r r))
(t
(move r real)
- (unless (sc-is imag fp-single-immediate)
+ (unless (sc-is imag fp-immediate)
(inst unpcklps r imag))))))
(define-vop (make-complex-double-float)
(:translate complex)
- (:args (real :scs (double-reg (fp-double-immediate
+ (:args (real :scs (double-reg (fp-immediate
(eql (tn-value tn) 0d0)))
:target r)
- (imag :scs (double-reg (fp-double-immediate
+ (imag :scs (double-reg (fp-immediate
(eql (tn-value tn) 0d0)))))
(:arg-types double-float double-float)
(:results (r :scs (complex-double-reg) :from (:argument 0)))
@@ -1435,16 +1435,16 @@
(:note "inline complex double-float creation")
(:policy :fast-safe)
(:generator 5
- (cond ((sc-is real fp-double-immediate)
+ (cond ((sc-is real fp-immediate)
(inst xorpd r r)
- (unless (sc-is imag fp-double-immediate)
+ (unless (sc-is imag fp-immediate)
(inst unpcklpd r imag)))
((location= real imag)
(move r real)
(inst unpcklpd r r))
(t
(move r real)
- (unless (sc-is imag fp-double-immediate)
+ (unless (sc-is imag fp-immediate)
(inst unpcklpd r imag))))))
(define-vop (complex-float-value)
diff --git a/src/compiler/x86-64/simd-pack-256.lisp b/src/compiler/x86-64/simd-pack-256.lisp
index 5786fa604..e3ca62c76 100644
--- a/src/compiler/x86-64/simd-pack-256.lisp
+++ b/src/compiler/x86-64/simd-pack-256.lisp
@@ -15,10 +15,7 @@
(ea (frame-byte-offset (+ (tn-offset tn) 3)) base))
(defun float-avx2-p (tn)
- (sc-is tn single-avx2-reg single-avx2-stack single-avx2-immediate
- double-avx2-reg double-avx2-stack double-avx2-immediate))
-(defun int-avx2-p (tn)
- (sc-is tn int-avx2-reg int-avx2-stack int-avx2-immediate))
+ (sc-is tn single-avx2-reg double-avx2-reg single-avx2-stack double-avx2-stack))
#+sb-xc-host
(progn ; the host compiler will complain about absence of these
@@ -28,7 +25,7 @@
(defun %simd-pack-256-3 (x) (error "Called %SIMD-PACK-256-3 ~S" x)))
(define-move-fun (load-int-avx2-immediate 1) (vop x y)
- ((int-avx2-immediate) (int-avx2-reg))
+ ((fp-immediate) (int-avx2-reg))
(let* ((x (tn-value x))
(p0 (%simd-pack-256-0 x))
(p1 (%simd-pack-256-1 x))
@@ -43,7 +40,7 @@
(inst vmovdqu y (register-inline-constant x))))))
(define-move-fun (load-float-avx2-immediate 1) (vop x y)
- ((single-avx2-immediate double-avx2-immediate)
+ ((fp-immediate)
(single-avx2-reg double-avx2-reg))
(let* ((x (tn-value x))
(p0 (%simd-pack-256-0 x))
diff --git a/src/compiler/x86-64/simd-pack.lisp b/src/compiler/x86-64/simd-pack.lisp
index 657c927c6..a9c3a734f 100644
--- a/src/compiler/x86-64/simd-pack.lisp
+++ b/src/compiler/x86-64/simd-pack.lisp
@@ -15,18 +15,15 @@
(ea (frame-byte-offset (1+ (tn-offset tn))) base))
(defun float-sse-p (tn)
- (sc-is tn single-sse-reg single-sse-stack single-sse-immediate
- double-sse-reg double-sse-stack double-sse-immediate))
-(defun int-sse-p (tn)
- (sc-is tn int-sse-reg int-sse-stack int-sse-immediate))
+ (sc-is tn single-sse-reg single-sse-stack double-sse-reg double-sse-stack))
#+sb-xc-host
(progn ; the host compiler will complain about absence of these
(defun %simd-pack-low (x) (error "Called %SIMD-PACK-LOW ~S" x))
(defun %simd-pack-high (x) (error "Called %SIMD-PACK-HIGH ~S" x)))
-(define-move-fun (load-int-sse-immediate 1) (vop x y)
- ((int-sse-immediate) (int-sse-reg))
+(define-move-fun (load-sse-immediate 1) (vop x y)
+ ((fp-immediate) (int-sse-reg))
(let* ((x (tn-value x))
(lo (%simd-pack-low x))
(hi (%simd-pack-high x)))
@@ -39,7 +36,7 @@
(inst movdqa y (register-inline-constant x))))))
(define-move-fun (load-float-sse-immediate 1) (vop x y)
- ((single-sse-immediate double-sse-immediate)
+ ((fp-immediate)
(single-sse-reg double-sse-reg))
(let* ((x (tn-value x))
(lo (%simd-pack-low x))
diff --git a/src/compiler/x86-64/vm.lisp b/src/compiler/x86-64/vm.lisp
index 951199d5d..d7ec0296c 100644
--- a/src/compiler/x86-64/vm.lisp
+++ b/src/compiler/x86-64/vm.lisp
@@ -218,17 +218,7 @@
;; non-immediate constants in the constant pool
(constant constant)
- (fp-single-immediate immediate-constant)
- (fp-double-immediate immediate-constant)
- (fp-complex-single-immediate immediate-constant)
- (fp-complex-double-immediate immediate-constant)
-
- #+sb-simd-pack (int-sse-immediate immediate-constant)
- #+sb-simd-pack (double-sse-immediate immediate-constant)
- #+sb-simd-pack (single-sse-immediate immediate-constant)
- #+sb-simd-pack-256 (int-avx2-immediate immediate-constant)
- #+sb-simd-pack-256 (double-avx2-immediate immediate-constant)
- #+sb-simd-pack-256 (single-avx2-immediate immediate-constant)
+ (fp-immediate immediate-constant)
(immediate immediate-constant)
;;
@@ -313,26 +303,26 @@
;; non-descriptor SINGLE-FLOATs
(single-reg float-registers
:locations #.*float-regs*
- :constant-scs (fp-single-immediate)
+ :constant-scs (fp-immediate)
:save-p t
:alternate-scs (single-stack))
;; non-descriptor DOUBLE-FLOATs
(double-reg float-registers
:locations #.*float-regs*
- :constant-scs (fp-double-immediate)
+ :constant-scs (fp-immediate)
:save-p t
:alternate-scs (double-stack))
(complex-single-reg float-registers
:locations #.*float-regs*
- :constant-scs (fp-complex-single-immediate)
+ :constant-scs (fp-immediate)
:save-p t
:alternate-scs (complex-single-stack))
(complex-double-reg float-registers
:locations #.*float-regs*
- :constant-scs (fp-complex-double-immediate)
+ :constant-scs (fp-immediate)
:save-p t
:alternate-scs (complex-double-stack))
@@ -344,19 +334,19 @@
#+sb-simd-pack
(int-sse-reg float-registers
:locations #.*float-regs*
- :constant-scs (int-sse-immediate)
+ :constant-scs (fp-immediate)
:save-p t
:alternate-scs (int-sse-stack))
#+sb-simd-pack
(double-sse-reg float-registers
:locations #.*float-regs*
- :constant-scs (double-sse-immediate)
+ :constant-scs (fp-immediate)
:save-p t
:alternate-scs (double-sse-stack))
#+sb-simd-pack
(single-sse-reg float-registers
:locations #.*float-regs*
- :constant-scs (single-sse-immediate)
+ :constant-scs (fp-immediate)
:save-p t
:alternate-scs (single-sse-stack))
(ymm-reg float-registers :locations #.*float-regs*)
@@ -365,19 +355,19 @@
#+sb-simd-pack-256
(int-avx2-reg float-registers
:locations #.*float-regs*
- :constant-scs (int-avx2-immediate)
+ :constant-scs (fp-immediate)
:save-p t
:alternate-scs (int-avx2-stack))
#+sb-simd-pack-256
(double-avx2-reg float-registers
:locations #.*float-regs*
- :constant-scs (double-avx2-immediate)
+ :constant-scs (fp-immediate)
:save-p t
:alternate-scs (double-avx2-stack))
#+sb-simd-pack-256
(single-avx2-reg float-registers
:locations #.*float-regs*
- :constant-scs (single-avx2-immediate)
+ :constant-scs (fp-immediate)
:save-p t
:alternate-scs (single-avx2-stack))
@@ -494,14 +484,10 @@
(not (sb-c::producing-fasl-file)))))
immediate-sc-number))
#+compact-instance-header (layout immediate-sc-number)
- (single-float
- fp-single-immediate-sc-number)
- (double-float
- fp-double-immediate-sc-number)
- ((complex single-float)
- fp-complex-single-immediate-sc-number)
- ((complex double-float)
- fp-complex-double-immediate-sc-number)
+ ((or float (complex float)
+ #+(and sb-simd-pack (not sb-xc-host)) simd-pack
+ #+(and sb-simd-pack-256 (not sb-xc-host)) simd-pack-256)
+ fp-immediate-sc-number)
;; This case has to follow the numeric cases because proxy floating-point numbers
;; are host structs. Or we could implement and use something like SB-XC:TYPECASE
(structure-object
@@ -514,19 +500,7 @@
#-sb-xc-host (and (eq (heap-allocated-p value) :static)
(< (get-lisp-obj-address value)
(get-lisp-obj-address sb-lockless:+tail+))))
- immediate-sc-number))
- #+(and sb-simd-pack (not sb-xc-host))
- (simd-pack
- (typecase value
- ((simd-pack double-float) double-sse-immediate-sc-number)
- ((simd-pack single-float) single-sse-immediate-sc-number)
- (t int-sse-immediate-sc-number)))
- #+(and sb-simd-pack-256 (not sb-xc-host))
- (simd-pack-256
- (typecase value
- ((simd-pack-256 double-float) double-avx2-immediate-sc-number)
- ((simd-pack-256 single-float) single-avx2-immediate-sc-number)
- (t int-avx2-immediate-sc-number)))))
+ immediate-sc-number))))
(defun boxed-immediate-sc-p (sc)
(eql sc immediate-sc-number))
-----------------------------------------------------------------------
hooks/post-receive
--
SBCL