master: sb-simd: separate x86-64 and arm64 things
stassats via Sbcl-commits <[email protected]> Sun, 02 Aug 2026 14:03:23 +0000
| Newsgroups | gmane.lisp.steel-bank.cvs |
|---|---|
| Message-ID | <[email protected]> |
The branch "master" has been updated in SBCL:
via 8ee5b24141f3e37a3cd56e9917d0027cd4695e2e (commit)
from 1f70cb412c55a3d4ee7cd9dea6a31efe018a509d (commit)
- Log -----------------------------------------------------------------
commit 8ee5b24141f3e37a3cd56e9917d0027cd4695e2e
Author: Stas Boukarev <[email protected]>
Date: Sun Aug 2 16:55:32 2026 +0300
sb-simd: separate x86-64 and arm64 things
---
contrib/sb-simd/code/arm64-fake-vops.lisp | 131 ++
contrib/sb-simd/code/arm64-modify-macros.lisp | 31 +
contrib/sb-simd/code/define-custom-vops.lisp | 415 +++---
contrib/sb-simd/code/define-fake-vops.lisp | 1499 --------------------
contrib/sb-simd/code/define-modify-macros.lisp | 142 --
contrib/sb-simd/code/define-scalar-casts.lisp | 11 +-
contrib/sb-simd/code/define-simd-casts.lisp | 9 +-
contrib/sb-simd/code/packages.lisp | 15 +-
...define-fake-vops.lisp => x86-64-fake-vops.lisp} | 507 -------
...odify-macros.lisp => x86-64-modify-macros.lisp} | 64 -
.../{define-rounders.lisp => x86-64-rounders.lisp} | 0
contrib/sb-simd/sb-simd.asd | 32 +-
contrib/sb-simd/test-suite/test-arefs-arm64.lisp | 13 +
.../{test-arefs.lisp => test-arefs-x86-64.lisp} | 54 -
contrib/sb-simd/test-suite/test-arefs.lisp | 65 -
.../test-suite/test-hairy-simd-functions.lisp | 10 -
.../test-horizontal-functions-arm64.lisp | 41 +
.../test-horizontal-functions-x86-64.lisp | 56 +
.../test-suite/test-horizontal-functions.lisp | 98 --
contrib/sb-simd/test-suite/test-packages.lisp | 21 +-
.../test-simple-simd-functions-arm64.lisp | 149 ++
...lisp => test-simple-simd-functions-x86-64.lisp} | 184 ---
.../test-suite/test-simple-simd-functions.lisp | 657 ---------
tests/sb-simd.impure.lisp | 6 +
24 files changed, 696 insertions(+), 3514 deletions(-)
diff --git a/contrib/sb-simd/code/arm64-fake-vops.lisp b/contrib/sb-simd/code/arm64-fake-vops.lisp
new file mode 100644
index 000000000..c8a6f7605
--- /dev/null
+++ b/contrib/sb-simd/code/arm64-fake-vops.lisp
@@ -0,0 +1,131 @@
+(in-package #:sb-simd-neon)
+
+(define-fake-vop f32.4-values (x)
+ (values (%f32.4-lane-extract x 0)
+ (%f32.4-lane-extract x 1)
+ (%f32.4-lane-extract x 2)
+ (%f32.4-lane-extract x 3)))
+
+(define-fake-vop make-f32.4 (x y z w)
+ (let* ((t1 (%f32.4!-from-f32 x))
+ (t2 (%f32.4-lane-insert t1 y 1))
+ (t3 (%f32.4-lane-insert t2 z 2)))
+ (%f32.4-lane-insert t3 w 3)))
+
+(define-fake-vop two-arg-f32.4/= (a b)
+ (%u32.4-not
+ (%two-arg-f32.4= a b)))
+
+(define-fake-vop two-arg-f32.4< (a b)
+ (%two-arg-f32.4> b a))
+
+(define-fake-vop two-arg-f32.4<= (a b)
+ (%two-arg-f32.4>= b a))
+
+(define-fake-vop f32.4-horizontal+ (x)
+ (let ((tmp (%f32.4-pair+ x x)))
+ ;; TODO: This could use the scalar faddp instead, avoiding the extraction.
+ (%f32.4-lane-extract (%f32.4-pair+ tmp tmp) 0)))
+
+(define-fake-vop f32.4-andc1 (a b)
+ (%f32.4-andc2 b a))
+
+(define-fake-vop f64.2-values (x)
+ (values (%f64.2-lane-extract x 0)
+ (%f64.2-lane-extract x 1)))
+
+(define-fake-vop make-f64.2 (x y)
+ (%f64.2-lane-insert (%f64.2!-from-f64 x) y 1))
+
+(define-fake-vop two-arg-f64.2/= (a b)
+ (%u64.2-not
+ (%two-arg-f64.2= a b)))
+
+(define-fake-vop two-arg-f64.2< (a b)
+ (%two-arg-f64.2> b a))
+
+(define-fake-vop two-arg-f64.2<= (a b)
+ (%two-arg-f64.2>= b a))
+
+(define-fake-vop f64.2-andc1 (a b)
+ (%f64.2-andc2 b a))
+
+(macrolet
+ ((def (sign width count)
+ (flet ((name (format-control &rest format-arguments)
+ (intern (apply #'format nil format-control format-arguments)
+ (find-package :sb-simd-neon))))
+ (let ((make-args (loop for i from 0 below count
+ collect (make-symbol (format nil "V~a" i))))
+ (from (name "%~a~d.~d!-FROM-~a~d" sign width count sign width))
+ (insert (name "%~a~d.~d-LANE-INSERT" sign width count))
+ (extract (name "%~a~d.~d-LANE-EXTRACT" sign width count)))
+ `(progn
+ (define-fake-vop ,(name "MAKE-~a~d.~d" sign width count) ,make-args
+ ,(loop with result = (list from (first make-args))
+ for arg in (rest make-args)
+ for i from 1
+ do (setf result (list insert result arg i))
+ finally (return result)))
+ (define-fake-vop ,(name "~a~d.~d-VALUES" sign width count) (x)
+ (values ,@(loop for i from 0 below count
+ collect `(,extract x ,i))))
+ (define-fake-vop ,(name "~a~d.~d-ANDC1" sign width count) (a b)
+ (,(name "%~a~d.~d-ANDC2" sign width count) b a))
+ (define-fake-vop ,(name "TWO-ARG-~a~d.~d/=" sign width count) (a b)
+ (,(name "%U~d.~d-NOT" width count)
+ (,(name "%TWO-ARG-~a~d.~d=" sign width count) a b)))
+ (define-fake-vop ,(name "TWO-ARG-~a~d.~d<" sign width count) (a b)
+ (,(name "%TWO-ARG-~a~d.~d>" sign width count) b a))
+ (define-fake-vop ,(name "TWO-ARG-~a~d.~d<=" sign width count) (a b)
+ (,(name "%TWO-ARG-~a~d.~d>=" sign width count) b a)))))))
+ (def :u 8 16)
+ (def :u 16 8)
+ (def :u 32 4)
+ (def :u 64 2)
+ (def :s 8 16)
+ (def :s 16 8)
+ (def :s 32 4)
+ (def :s 64 2))
+
+(define-fake-vop u64.2-pair-min (a b)
+ (%make-u64.2 (sb-simd::%two-arg-u64-min (%u64.2-lane-extract a 0) (%u64.2-lane-extract a 1))
+ (sb-simd::%two-arg-u64-min (%u64.2-lane-extract b 0) (%u64.2-lane-extract b 1))))
+
+(define-fake-vop u64.2-horizontal-min (a)
+ (sb-simd::%two-arg-u64-min (%u64.2-lane-extract a 0) (%u64.2-lane-extract a 1)))
+
+(define-fake-vop u64.2-pair-max (a b)
+ (%make-u64.2 (sb-simd::%two-arg-u64-max (%u64.2-lane-extract a 0) (%u64.2-lane-extract a 1))
+ (sb-simd::%two-arg-u64-max (%u64.2-lane-extract b 0) (%u64.2-lane-extract b 1))))
+
+(define-fake-vop u64.2-horizontal-max (a)
+ (sb-simd::%two-arg-u64-max (%u64.2-lane-extract a 0) (%u64.2-lane-extract a 1)))
+
+(define-fake-vop u64.2-pair+ (a b)
+ (%make-u64.2 (sb-simd::%two-arg-u64+ (%u64.2-lane-extract a 0) (%u64.2-lane-extract a 1))
+ (sb-simd::%two-arg-u64+ (%u64.2-lane-extract b 0) (%u64.2-lane-extract b 1))))
+
+(define-fake-vop u64.2-horizontal+ (a)
+ (sb-simd::%two-arg-u64+ (%u64.2-lane-extract a 0) (%u64.2-lane-extract a 1)))
+
+(define-fake-vop s64.2-pair-min (a b)
+ (%make-s64.2 (sb-simd::%two-arg-s64-min (%s64.2-lane-extract a 0) (%s64.2-lane-extract a 1))
+ (sb-simd::%two-arg-s64-min (%s64.2-lane-extract b 0) (%s64.2-lane-extract b 1))))
+
+(define-fake-vop s64.2-horizontal-min (a)
+ (sb-simd::%two-arg-s64-min (%s64.2-lane-extract a 0) (%s64.2-lane-extract a 1)))
+
+(define-fake-vop s64.2-pair-max (a b)
+ (%make-s64.2 (sb-simd::%two-arg-s64-max (%s64.2-lane-extract a 0) (%s64.2-lane-extract a 1))
+ (sb-simd::%two-arg-s64-max (%s64.2-lane-extract b 0) (%s64.2-lane-extract b 1))))
+
+(define-fake-vop s64.2-horizontal-max (a)
+ (sb-simd::%two-arg-s64-max (%s64.2-lane-extract a 0) (%s64.2-lane-extract a 1)))
+
+(define-fake-vop s64.2-pair+ (a b)
+ (%make-s64.2 (sb-simd::%two-arg-s64+ (%s64.2-lane-extract a 0) (%s64.2-lane-extract a 1))
+ (sb-simd::%two-arg-s64+ (%s64.2-lane-extract b 0) (%s64.2-lane-extract b 1))))
+
+(define-fake-vop s64.2-horizontal+ (a)
+ (sb-simd::%two-arg-s64+ (%s64.2-lane-extract a 0) (%s64.2-lane-extract a 1)))
diff --git a/contrib/sb-simd/code/arm64-modify-macros.lisp b/contrib/sb-simd/code/arm64-modify-macros.lisp
new file mode 100644
index 000000000..e3f6197ef
--- /dev/null
+++ b/contrib/sb-simd/code/arm64-modify-macros.lisp
@@ -0,0 +1,31 @@
+(in-package #:sb-simd-neon)
+
+(define-modify-macro f32.4-incf (&optional (num 1f0)) two-arg-f32.4+)
+(define-modify-macro f32.4-decf (&optional (num 1f0)) two-arg-f32.4-)
+
+(define-modify-macro f64.2-incf (&optional (num 1d0)) two-arg-f64.2+)
+(define-modify-macro f64.2-decf (&optional (num 1d0)) two-arg-f64.2-)
+
+(define-modify-macro u8.16-incf (&optional (num 1)) two-arg-u8.16+)
+(define-modify-macro u8.16-decf (&optional (num 1)) two-arg-u8.16-)
+
+(define-modify-macro u16.8-incf (&optional (num 1)) two-arg-u16.8+)
+(define-modify-macro u16.8-decf (&optional (num 1)) two-arg-u16.8-)
+
+(define-modify-macro u32.4-incf (&optional (num 1)) two-arg-u32.4+)
+(define-modify-macro u32.4-decf (&optional (num 1)) two-arg-u32.4-)
+
+(define-modify-macro u64.2-incf (&optional (num 1)) two-arg-u64.2+)
+(define-modify-macro u64.2-decf (&optional (num 1)) two-arg-u64.2-)
+
+(define-modify-macro s8.16-incf (&optional (num 1)) two-arg-s8.16+)
+(define-modify-macro s8.16-decf (&optional (num 1)) two-arg-s8.16-)
+
+(define-modify-macro s16.8-incf (&optional (num 1)) two-arg-s16.8+)
+(define-modify-macro s16.8-decf (&optional (num 1)) two-arg-s16.8-)
+
+(define-modify-macro s32.4-incf (&optional (num 1)) two-arg-s32.4+)
+(define-modify-macro s32.4-decf (&optional (num 1)) two-arg-s32.4-)
+
+(define-modify-macro s64.2-incf (&optional (num 1)) two-arg-s64.2+)
+(define-modify-macro s64.2-decf (&optional (num 1)) two-arg-s64.2-)
diff --git a/contrib/sb-simd/code/define-custom-vops.lisp b/contrib/sb-simd/code/define-custom-vops.lisp
index d1f8c3963..af0456cc4 100644
--- a/contrib/sb-simd/code/define-custom-vops.lisp
+++ b/contrib/sb-simd/code/define-custom-vops.lisp
@@ -34,6 +34,8 @@
for result-record in result-records
collect `(,@result :scs ,(sb-simd-internals:value-record-scs result-record))))
(:generator ,cost ,@(find-clause :generator))))))))
+#+x86-64
+(progn
;; SSE
(macrolet ((def (name cmp)
`(define-custom-vop ,name
@@ -53,13 +55,13 @@
(def sb-simd-sse::two-arg-f32> :nle)
(def sb-simd-sse::two-arg-f32>= :nlt))
(define-custom-vop sb-simd-sse::f32-from-s64
- (:args (src))
+ (:args (src))
(:results (dst))
(:generator
(inst xorps dst dst)
(inst cvtsi2ss dst src)))
(define-custom-vop sb-simd-sse::f32!-from-p128
- (:args (src :target dst))
+ (:args (src :target dst))
(:temporary (:sc single-sse-reg :from (:argument 0)) tmp)
(:results (dst))
(:generator
@@ -69,7 +71,7 @@
;; SSE2
(macrolet ((def (name cmp)
`(define-custom-vop ,name
- (:args (a :target tmp) (b))
+ (:args (a :target tmp) (b))
(:temporary (:sc single-reg :from (:argument 0)) tmp)
(:results (dst))
(:generator
@@ -85,13 +87,13 @@
(def sb-simd-sse2::two-arg-f64> :nle)
(def sb-simd-sse2::two-arg-f64>= :nlt))
(define-custom-vop sb-simd-sse2::f64-from-s64
- (:args (src))
+ (:args (src))
(:results (dst))
(:generator
(inst xorpd dst dst)
(inst cvtsi2sd dst src)))
(define-custom-vop sb-simd-sse2::f64!-from-p128
- (:args (src :target tmp))
+ (:args (src :target tmp))
(:temporary (:sc double-sse-reg :from (:argument 0)) tmp)
(:results (dst))
(:generator
@@ -101,7 +103,7 @@
;; AVX
(macrolet ((def (name cmp)
`(define-custom-vop ,name
- (:args (a :target tmp) (b))
+ (:args (a :target tmp) (b))
(:temporary (:sc single-reg :from (:argument 0)) tmp)
(:results (dst))
(:generator
@@ -117,7 +119,7 @@
(def sb-simd-avx::two-arg-f32>= :nlt))
(macrolet ((def (name cmp)
`(define-custom-vop ,name
- (:args (a :target tmp) (b))
+ (:args (a :target tmp) (b))
(:temporary (:sc single-reg :from (:argument 0)) tmp)
(:results (dst))
(:generator
@@ -132,246 +134,247 @@
(def sb-simd-avx::two-arg-f64> :nle)
(def sb-simd-avx::two-arg-f64>= :nlt))
(define-custom-vop sb-simd-avx::f32-from-s64
- (:args (src :to :save))
+ (:args (src :to :save))
(:results (dst))
(:generator
(inst vxorpd dst dst dst)
(inst vcvtsi2ss dst dst src)))
(define-custom-vop sb-simd-avx::f64-from-s64
- (:args (src :to :save))
+ (:args (src :to :save))
(:results (dst))
(:generator
(inst vxorpd dst dst dst)
(inst vcvtsi2sd dst dst src)))
(define-custom-vop sb-simd-avx::f32!-from-p128
- (:args (src :to :save))
+ (:args (src :to :save))
(:results (dst))
(:generator
(inst vxorps dst dst dst)
(inst movss dst src)))
(define-custom-vop sb-simd-avx::f32!-from-p256
- (:args (src :to :save))
+ (:args (src :to :save))
(:results (dst))
(:generator
(inst vxorps dst dst dst)
(inst movss dst src)))
(define-custom-vop sb-simd-avx::f64!-from-p128
- (:args (src :to :save))
+ (:args (src :to :save))
(:results (dst))
(:generator
(inst vxorpd dst dst dst)
(inst movsd dst src)))
(define-custom-vop sb-simd-avx::f64!-from-p256
- (:args (src :to :save))
+ (:args (src :to :save))
(:results (dst))
(:generator
(inst vxorpd dst dst dst)
(inst movsd dst src)))
-
+ )
;; Neon
+#+arm64
+(progn
+ (define-custom-vop sb-simd-neon::f32!-from-p128
+ (:args (src :scs (single-neon-reg) :to :save))
+ (:results (dst :scs (single-reg)))
+ (:generator
+ (inst movi dst 0 :4s)
+ (inst dup dst src nil 0)))
-(define-custom-vop sb-simd-neon::f32!-from-p128
- (:args (src :scs (single-neon-reg) :to :save))
- (:results (dst :scs (single-reg)))
- (:generator
- (inst movi dst 0 :4s)
- (inst dup dst src nil 0)))
+ (define-custom-vop sb-simd-neon::f32.4!-from-f32
+ (:args (src :scs (single-reg) :target dst))
+ (:results (dst :scs (single-neon-reg)))
+ (:generator
+ (unless (location= src dst)
+ (inst ins dst 0 src 0 :s))))
-(define-custom-vop sb-simd-neon::f32.4!-from-f32
- (:args (src :scs (single-reg) :target dst))
- (:results (dst :scs (single-neon-reg)))
- (:generator
- (unless (location= src dst)
- (inst ins dst 0 src 0 :s))))
+ (define-custom-vop sb-simd-neon:f32.4-dup
+ (:args (src :scs (single-neon-reg)))
+ (:info lane)
+ (:results (dst :scs (single-neon-reg)))
+ (:generator
+ (inst dup dst src :4s lane)))
-(define-custom-vop sb-simd-neon:f32.4-dup
- (:args (src :scs (single-neon-reg)))
- (:info lane)
- (:results (dst :scs (single-neon-reg)))
- (:generator
- (inst dup dst src :4s lane)))
+ (define-custom-vop sb-simd-neon:f32.4-lane-extract
+ (:args (src :scs (single-neon-reg)))
+ (:info lane)
+ (:results (dst :scs (single-reg)))
+ (:generator
+ (unless (and (location= dst src)
+ (eql lane 0))
+ (inst dup dst src nil lane))))
-(define-custom-vop sb-simd-neon:f32.4-lane-extract
- (:args (src :scs (single-neon-reg)))
- (:info lane)
- (:results (dst :scs (single-reg)))
- (:generator
- (unless (and (location= dst src)
- (eql lane 0))
- (inst dup dst src nil lane))))
+ (define-custom-vop sb-simd-neon:f32.4-lane-insert
+ (:args (src1 :scs (single-neon-reg) :target dst)
+ (src2 :scs (single-reg) :to :save))
+ (:info lane)
+ (:results (dst :scs (single-neon-reg)))
+ (:generator
+ (unless (location= dst src1)
+ (inst mov dst src1 :16b))
+ (inst ins dst lane
+ (make-random-tn (sc-or-lose 'single-neon-reg) (tn-offset src2)) 0
+ :s)))
-(define-custom-vop sb-simd-neon:f32.4-lane-insert
- (:args (src1 :scs (single-neon-reg) :target dst)
- (src2 :scs (single-reg) :to :save))
- (:info lane)
- (:results (dst :scs (single-neon-reg)))
- (:generator
- (unless (location= dst src1)
- (inst mov dst src1 :16b))
- (inst ins dst lane
- (make-random-tn (sc-or-lose 'single-neon-reg) (tn-offset src2)) 0
- :s)))
+ (define-custom-vop sb-simd-neon:f32.4-ins
+ (:args (src1 :scs (single-neon-reg) :target dst)
+ (src2 :scs (single-neon-reg) :to :save))
+ (:info idx1 idx2)
+ (:results (dst :scs (single-neon-reg)))
+ (:generator
+ (unless (location= dst src1)
+ (inst mov dst src1 :16b))
+ (inst ins dst idx1 src2 idx2 :s)))
-(define-custom-vop sb-simd-neon:f32.4-ins
- (:args (src1 :scs (single-neon-reg) :target dst)
- (src2 :scs (single-neon-reg) :to :save))
- (:info idx1 idx2)
- (:results (dst :scs (single-neon-reg)))
- (:generator
- (unless (location= dst src1)
- (inst mov dst src1 :16b))
- (inst ins dst idx1 src2 idx2 :s)))
+ (define-custom-vop sb-simd-neon::f64!-from-p128
+ (:args (src :scs (double-neon-reg) :to :save))
+ (:results (dst :scs (double-reg)))
+ (:generator
+ (inst movi dst 0 :2d)
+ (inst dup dst src nil 0)))
-(define-custom-vop sb-simd-neon::f64!-from-p128
- (:args (src :scs (double-neon-reg) :to :save))
- (:results (dst :scs (double-reg)))
- (:generator
- (inst movi dst 0 :2d)
- (inst dup dst src nil 0)))
+ (define-custom-vop sb-simd-neon::f64.2!-from-f64
+ (:args (src :scs (double-reg) :target dst))
+ (:results (dst :scs (double-neon-reg)))
+ (:generator
+ (unless (location= src dst)
+ (inst ins dst 0 src 0 :d))))
-(define-custom-vop sb-simd-neon::f64.2!-from-f64
- (:args (src :scs (double-reg) :target dst))
- (:results (dst :scs (double-neon-reg)))
- (:generator
- (unless (location= src dst)
- (inst ins dst 0 src 0 :d))))
+ (define-custom-vop sb-simd-neon:f64.2-dup
+ (:args (src :scs (double-neon-reg)))
+ (:info lane)
+ (:results (dst :scs (double-neon-reg)))
+ (:generator
+ (inst dup dst src :2d lane)))
-(define-custom-vop sb-simd-neon:f64.2-dup
- (:args (src :scs (double-neon-reg)))
- (:info lane)
- (:results (dst :scs (double-neon-reg)))
- (:generator
- (inst dup dst src :2d lane)))
+ (define-custom-vop sb-simd-neon:f64.2-lane-extract
+ (:args (src :scs (double-neon-reg)))
+ (:info lane)
+ (:results (dst :scs (double-reg)))
+ (:generator
+ (inst dup dst src nil lane)))
-(define-custom-vop sb-simd-neon:f64.2-lane-extract
- (:args (src :scs (double-neon-reg)))
- (:info lane)
- (:results (dst :scs (double-reg)))
- (:generator
- (inst dup dst src nil lane)))
+ (define-custom-vop sb-simd-neon:f64.2-lane-insert
+ (:args (src1 :scs (double-neon-reg) :target dst)
+ (src2 :scs (double-reg) :to :save))
+ (:info lane)
+ (:results (dst :scs (double-neon-reg)))
+ (:generator
+ (unless (location= dst src1)
+ (inst mov dst src1 :16b))
+ (inst ins dst lane
+ (make-random-tn (sc-or-lose 'single-neon-reg) (tn-offset src2)) 0
+ :d)))
-(define-custom-vop sb-simd-neon:f64.2-lane-insert
- (:args (src1 :scs (double-neon-reg) :target dst)
- (src2 :scs (double-reg) :to :save))
- (:info lane)
- (:results (dst :scs (double-neon-reg)))
- (:generator
- (unless (location= dst src1)
- (inst mov dst src1 :16b))
- (inst ins dst lane
- (make-random-tn (sc-or-lose 'single-neon-reg) (tn-offset src2)) 0
- :d)))
+ (define-custom-vop sb-simd-neon:f64.2-ins
+ (:args (src1 :scs (double-neon-reg) :target dst)
+ (src2 :scs (double-neon-reg) :to :save))
+ (:info idx1 idx2)
+ (:results (dst :scs (double-neon-reg)))
+ (:generator
+ (unless (location= dst src1)
+ (inst mov dst src1 :16b))
+ (inst ins dst idx1 src2 idx2 :d)))
-(define-custom-vop sb-simd-neon:f64.2-ins
- (:args (src1 :scs (double-neon-reg) :target dst)
- (src2 :scs (double-neon-reg) :to :save))
- (:info idx1 idx2)
- (:results (dst :scs (double-neon-reg)))
- (:generator
- (unless (location= dst src1)
- (inst mov dst src1 :16b))
- (inst ins dst idx1 src2 idx2 :d)))
+ (define-custom-vop sb-simd-neon:u8.16-shuffle
+ (:args (src1 :scs (single-neon-reg))
+ (control :scs (single-neon-reg)))
+ (:results (dst :scs (single-neon-reg)))
+ (:generator
+ (inst tbl dst (list src1) control :16b)))
-(define-custom-vop sb-simd-neon:u8.16-shuffle
- (:args (src1 :scs (single-neon-reg))
- (control :scs (single-neon-reg)))
- (:results (dst :scs (single-neon-reg)))
- (:generator
- (inst tbl dst (list src1) control :16b)))
-
-(macrolet
- ((def (sign width count)
- (multiple-value-bind (arrangement partial-arrangement smaller-arrangement smaller-partial-arrangement larger-arrangement element)
- (ecase width
- (8 (values :16b :8b nil nil :8h :b))
- (16 (values :8h :4h :16b :8b :4s :h))
- (32 (values :4s :2s :8h :4h :2d :s))
- (64 (values :2d nil :4s :2s nil :d)))
- (let ((smaller-width (/ width 2))
- (smaller-count (* count 2))
- (scalar-reg (if (eql sign :s) 'signed-reg 'unsigned-reg)))
- (flet ((name (format-control &rest format-arguments)
- (intern (apply #'format nil format-control format-arguments)
- (find-package :sb-simd-neon))))
- `(progn
- (define-custom-vop ,(name "~a~d.~d!-FROM-~a~a" sign width count sign width)
- (:args (src :scs (,scalar-reg) :target dst))
- (:results (dst :scs (int-neon-reg)))
- (:generator
- (inst fmov (make-random-tn (sc-or-lose ',(if (eql width 64) 'double-reg 'single-reg)) (tn-offset dst)) src)))
- (define-custom-vop ,(name "~a~d.~d-DUP" sign width count)
- (:args (src :scs (int-neon-reg)))
- (:info lane)
- (:results (dst :scs (int-neon-reg)))
- (:generator
- (inst dup dst src ,arrangement lane)))
- (define-custom-vop ,(name "~a~d.~d-LANE-EXTRACT" sign width count)
- (:args (src :scs (int-neon-reg)))
- (:info lane)
- (:results (dst :scs (,scalar-reg)))
- (:generator
- (inst umov dst src lane ,element)))
- (define-custom-vop ,(name "~a~d.~d-LANE-INSERT" sign width count)
- (:args (src1 :scs (int-neon-reg) :target dst)
- (src2 :scs (,scalar-reg) :to :save))
- (:info lane)
- (:results (dst :scs (int-neon-reg)))
- (:generator
- (unless (location= dst src1)
- (inst mov dst src1 :16b))
- (inst ins dst lane src2 nil ,element)))
- (define-custom-vop ,(name "~a~d.~d-INS" sign width count)
- (:args (src1 :scs (int-neon-reg) :target dst)
- (src2 :scs (int-neon-reg) :to :save))
- (:info idx1 idx2)
- (:results (dst :scs (int-neon-reg)))
- (:generator
- (unless (location= dst src1)
- (inst mov dst src1 :16b))
- (inst ins dst idx1 src2 idx2 ,element)))
- ;; Conversion from the smaller type.
- ,@(when smaller-arrangement
- `((define-custom-vop ,(name "~a~d.~d-FROM-~a~d.~d" sign width count sign smaller-width smaller-count)
- (:args (src :scs (int-neon-reg)))
- (:results (dst :scs (int-neon-reg)))
- (:generator
- (inst ,(if (eql sign :s) 'sshll 'ushll) dst ,arrangement src ,smaller-partial-arrangement)))
- (define-custom-vop ,(name "~a~d.~d-FROM-~a~d.~d-HI" sign width count sign smaller-width smaller-count)
- (:args (src :scs (int-neon-reg)))
- (:results (dst :scs (int-neon-reg)))
- (:generator
- (inst ,(if (eql sign :s) 'sshll2 'ushll2) dst ,arrangement src ,smaller-arrangement)))))
- (define-custom-vop ,(name "~a~d.~d-SHIFTR" sign width count)
- (:args (src :scs (int-neon-reg)))
- (:info shift)
- (:results (dst :scs (int-neon-reg)))
- (:generator
- (inst ,(if (eql sign :s) 'sshr 'ushr) dst src shift ,arrangement)))
- (define-custom-vop ,(name "~a~d.~d-SHIFTL" sign width count)
- (:args (src :scs (int-neon-reg)))
- (:info shift)
- (:results (dst :scs (int-neon-reg)))
- (:generator
- (inst shl dst src shift ,arrangement)))
- ,@(when larger-arrangement
- `((define-custom-vop ,(name "~a~d.~d-SHIFTL-LONG" sign width count)
- (:args (src :scs (int-neon-reg)))
- (:info shift)
- (:results (dst :scs (int-neon-reg)))
- (:generator
- (inst ,(if (eql sign :s) 'sshll 'ushll) dst ,larger-arrangement src ,partial-arrangement shift)))
- (define-custom-vop ,(name "~a~d.~d-SHIFTL-LONG-HI" sign width count)
- (:args (src :scs (int-neon-reg)))
- (:info shift)
- (:results (dst :scs (int-neon-reg)))
- (:generator
- (inst ,(if (eql sign :s) 'sshll2 'ushll2) dst ,larger-arrangement src ,arrangement shift)))))))))))
- (def :u 8 16)
- (def :u 16 8)
- (def :u 32 4)
- (def :u 64 2)
- (def :s 8 16)
- (def :s 16 8)
- (def :s 32 4)
- (def :s 64 2))
+ (macrolet
+ ((def (sign width count)
+ (multiple-value-bind (arrangement partial-arrangement smaller-arrangement smaller-partial-arrangement larger-arrangement element)
+ (ecase width
+ (8 (values :16b :8b nil nil :8h :b))
+ (16 (values :8h :4h :16b :8b :4s :h))
+ (32 (values :4s :2s :8h :4h :2d :s))
+ (64 (values :2d nil :4s :2s nil :d)))
+ (let ((smaller-width (/ width 2))
+ (smaller-count (* count 2))
+ (scalar-reg (if (eql sign :s) 'signed-reg 'unsigned-reg)))
+ (flet ((name (format-control &rest format-arguments)
+ (intern (apply #'format nil format-control format-arguments)
+ (find-package :sb-simd-neon))))
+ `(progn
+ (define-custom-vop ,(name "~a~d.~d!-FROM-~a~a" sign width count sign width)
+ (:args (src :scs (,scalar-reg) :target dst))
+ (:results (dst :scs (int-neon-reg)))
+ (:generator
+ (inst fmov (make-random-tn (sc-or-lose ',(if (eql width 64) 'double-reg 'single-reg)) (tn-offset dst)) src)))
+ (define-custom-vop ,(name "~a~d.~d-DUP" sign width count)
+ (:args (src :scs (int-neon-reg)))
+ (:info lane)
+ (:results (dst :scs (int-neon-reg)))
+ (:generator
+ (inst dup dst src ,arrangement lane)))
+ (define-custom-vop ,(name "~a~d.~d-LANE-EXTRACT" sign width count)
+ (:args (src :scs (int-neon-reg)))
+ (:info lane)
+ (:results (dst :scs (,scalar-reg)))
+ (:generator
+ (inst umov dst src lane ,element)))
+ (define-custom-vop ,(name "~a~d.~d-LANE-INSERT" sign width count)
+ (:args (src1 :scs (int-neon-reg) :target dst)
+ (src2 :scs (,scalar-reg) :to :save))
+ (:info lane)
+ (:results (dst :scs (int-neon-reg)))
+ (:generator
+ (unless (location= dst src1)
+ (inst mov dst src1 :16b))
+ (inst ins dst lane src2 nil ,element)))
+ (define-custom-vop ,(name "~a~d.~d-INS" sign width count)
+ (:args (src1 :scs (int-neon-reg) :target dst)
+ (src2 :scs (int-neon-reg) :to :save))
+ (:info idx1 idx2)
+ (:results (dst :scs (int-neon-reg)))
+ (:generator
+ (unless (location= dst src1)
+ (inst mov dst src1 :16b))
+ (inst ins dst idx1 src2 idx2 ,element)))
+ ;; Conversion from the smaller type.
+ ,@(when smaller-arrangement
+ `((define-custom-vop ,(name "~a~d.~d-FROM-~a~d.~d" sign width count sign smaller-width smaller-count)
+ (:args (src :scs (int-neon-reg)))
+ (:results (dst :scs (int-neon-reg)))
+ (:generator
+ (inst ,(if (eql sign :s) 'sshll 'ushll) dst ,arrangement src ,smaller-partial-arrangement)))
+ (define-custom-vop ,(name "~a~d.~d-FROM-~a~d.~d-HI" sign width count sign smaller-width smaller-count)
+ (:args (src :scs (int-neon-reg)))
+ (:results (dst :scs (int-neon-reg)))
+ (:generator
+ (inst ,(if (eql sign :s) 'sshll2 'ushll2) dst ,arrangement src ,smaller-arrangement)))))
+ (define-custom-vop ,(name "~a~d.~d-SHIFTR" sign width count)
+ (:args (src :scs (int-neon-reg)))
+ (:info shift)
+ (:results (dst :scs (int-neon-reg)))
+ (:generator
+ (inst ,(if (eql sign :s) 'sshr 'ushr) dst src shift ,arrangement)))
+ (define-custom-vop ,(name "~a~d.~d-SHIFTL" sign width count)
+ (:args (src :scs (int-neon-reg)))
+ (:info shift)
+ (:results (dst :scs (int-neon-reg)))
+ (:generator
+ (inst shl dst src shift ,arrangement)))
+ ,@(when larger-arrangement
+ `((define-custom-vop ,(name "~a~d.~d-SHIFTL-LONG" sign width count)
+ (:args (src :scs (int-neon-reg)))
+ (:info shift)
+ (:results (dst :scs (int-neon-reg)))
+ (:generator
+ (inst ,(if (eql sign :s) 'sshll 'ushll) dst ,larger-arrangement src ,partial-arrangement shift)))
+ (define-custom-vop ,(name "~a~d.~d-SHIFTL-LONG-HI" sign width count)
+ (:args (src :scs (int-neon-reg)))
+ (:info shift)
+ (:results (dst :scs (int-neon-reg)))
+ (:generator
+ (inst ,(if (eql sign :s) 'sshll2 'ushll2) dst ,larger-arrangement src ,arrangement shift)))))))))))
+ (def :u 8 16)
+ (def :u 16 8)
+ (def :u 32 4)
+ (def :u 64 2)
+ (def :s 8 16)
+ (def :s 16 8)
+ (def :s 32 4)
+ (def :s 64 2)))
)
diff --git a/contrib/sb-simd/code/define-fake-vops.lisp b/contrib/sb-simd/code/define-fake-vops.lisp
index 3121b753e..b09b320cc 100644
--- a/contrib/sb-simd/code/define-fake-vops.lisp
+++ b/contrib/sb-simd/code/define-fake-vops.lisp
@@ -372,1502 +372,3 @@
(def two-arg-s64>= >= :result-key u64-from-boolean)
(def s64-andc1 logandc1)
(def s64-not lognot :result-key s64-wrap))
-
-(in-package #:sb-simd-sse)
-
-(define-fake-vop f32-not (a)
- (%f32-andc1 a +f32-true+))
-
-(define-fake-vop make-f32.4 (a b c d)
- (%f32.4-unpacklo
- (%f32.4-unpacklo
- (%f32.4!-from-f32 a)
- (%f32.4!-from-f32 c))
- (%f32.4-unpacklo
- (%f32.4!-from-f32 b)
- (%f32.4!-from-f32 d))))
-
-(define-fake-vop f32.4-values (x)
- (let* ((zero (sb-ext:%make-simd-pack-single 0f0 0f0 0f0 0f0))
- (a0b0 (%f32.4-unpacklo x zero))
- (c0d0 (%f32.4-unpackhi x zero)))
- (values
- (%f32!-from-p128 (%f32.4-unpacklo a0b0 zero))
- (%f32!-from-p128 (%f32.4-unpackhi a0b0 zero))
- (%f32!-from-p128 (%f32.4-unpacklo c0d0 zero))
- (%f32!-from-p128 (%f32.4-unpackhi c0d0 zero)))))
-
-(define-fake-vop f32.4-broadcast (x)
- (let ((v (%f32.4!-from-f32 x)))
- (%f32.4-shuffle v v 0)))
-
-(define-fake-vop f32.4-not (a)
- (%f32.4-andc1
- a
- (%make-f32.4 +f32-true+ +f32-true+ +f32-true+ +f32-true+)))
-
-(macrolet ((def (name op)
- `(define-fake-vop ,name (x)
- (let ((y (,op x (%f32.4-shuffle x x #4r2301))))
- (%f32!-from-p128 (,op y (%f32.4-shuffle y y #4r1032)))))))
- (def f32.4-horizontal-and %two-arg-f32.4-and)
- (def f32.4-horizontal-or %two-arg-f32.4-or)
- (def f32.4-horizontal-xor %two-arg-f32.4-xor)
- (def f32.4-horizontal-max %two-arg-f32.4-max)
- (def f32.4-horizontal-min %two-arg-f32.4-min)
- (def f32.4-horizontal+ %two-arg-f32.4+)
- (def f32.4-horizontal* %two-arg-f32.4*))
-
-(in-package #:sb-simd-sse2)
-
-(define-fake-vop u8!-from-p128 (x)
- (logand #xff (%u64!-from-p128 x)))
-
-(define-fake-vop u16!-from-p128 (x)
- (logand #xffff (%u64!-from-p128 x)))
-
-(define-fake-vop u32!-from-p128 (x)
- (logand #xffffffff (%u64!-from-p128 x)))
-
-(define-fake-vop f64-not (a)
- (%f64-andc1 a +f64-true+))
-
-(define-fake-vop make-f64.2 (a b)
- (%f64.2-unpacklo
- (%f64.2!-from-f64 a)
- (%f64.2!-from-f64 b)))
-
-(define-fake-vop f64.2-values (x)
- (values
- (%f64!-from-p128 x)
- (%f64!-from-p128 (%f64.2-shuffle x x 1))))
-
-(define-fake-vop f64.2-broadcast (x)
- (let ((v (%f64.2!-from-f64 x)))
- (%f64.2-unpacklo v v)))
-
-(define-fake-vop f64.2-not (a)
- (%f64.2-andc1
- a
- (%make-f64.2 +f64-true+ +f64-true+)))
-
-(macrolet ((def (name op)
- `(define-fake-vop ,name (x)
- (multiple-value-bind (a b) (%f64.2-values x)
- (,op a b)))))
- (def f64.2-horizontal-and %two-arg-f64-and)
- (def f64.2-horizontal-or %two-arg-f64-or)
- (def f64.2-horizontal-xor %two-arg-f64-xor)
- (def f64.2-horizontal-max %two-arg-f64-max)
- (def f64.2-horizontal-min %two-arg-f64-min)
- (def f64.2-horizontal+ %two-arg-f64+)
- (def f64.2-horizontal* %two-arg-f64*))
-
-(define-fake-vop make-u8.16 (a b c d e f g h i j k l m n o p)
- (%u8.16-unpacklo
- (%u8.16!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-u8s a c e g i k m o)))
- (%u8.16!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-u8s b d f h j l n p)))))
-
-(define-fake-vop u8.16-values (x)
- (multiple-value-call #'values
- (sb-simd::%u8s-from-u64 (%u64!-from-p128 x))
- (sb-simd::%u8s-from-u64 (%u64!-from-p128 (%u32.4-shuffle (%u32.4!-from-p128 x) #b00001110)))))
-
-(define-fake-vop u8.16-broadcast (x)
- (let ((v (%u64.2!-from-u64 (sb-simd::%u64-from-u8s x x x x x x x x))))
- (%u8.16!-from-p128 (%u64.2-unpacklo v v))))
-
-(define-fake-vop u8.16-not (a)
- (let* ((x +u8-true+)
- (v (%make-u8.16 x x x x x x x x x x x x x x x x)))
- (%u8.16-andc1 a v)))
-
-(define-fake-vop two-arg-u8.16/= (a b)
- (%u8.16-not
- (%two-arg-u8.16= a b)))
-
-(define-fake-vop two-arg-u8.16> (a b)
- (let* ((x (expt 2 7))
- (v (%make-u8.16 x x x x x x x x x x x x x x x x)))
- (%two-arg-u8.16>~ (%two-arg-u8.16- a v)
- (%two-arg-u8.16- b v))))
-
-(define-fake-vop two-arg-u8.16< (a b)
- (%two-arg-u8.16> b a))
-
-(define-fake-vop two-arg-u8.16>= (a b)
- (%u8.16-not
- (%two-arg-u8.16< a b)))
-
-(define-fake-vop two-arg-u8.16<= (a b)
- (%u8.16-not
- (%two-arg-u8.16> a b)))
-
-(define-fake-vop make-u16.8 (a b c d e f g h)
- (%u16.8-unpacklo
- (%u16.8!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-u16s a c e g)))
- (%u16.8!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-u16s b d f h)))))
-
-(define-fake-vop u16.8-values (x)
- (multiple-value-call #'values
- (sb-simd::%u16s-from-u64 (%u64!-from-p128 x))
- (sb-simd::%u16s-from-u64 (%u64!-from-p128 (%u32.4-shuffle (%u32.4!-from-p128 x) #b00001110)))))
-
-(define-fake-vop u16.8-broadcast (x)
- (let ((v (%u64.2!-from-u64 (sb-simd::%u64-from-u16s x x x x))))
- (%u16.8!-from-p128 (%u64.2-unpacklo v v))))
-
-(define-fake-vop u16.8-not (a)
- (%u16.8-andc1
- a
- (%make-u16.8 +u16-true+ +u16-true+ +u16-true+ +u16-true+
- +u16-true+ +u16-true+ +u16-true+ +u16-true+)))
-
-(define-fake-vop two-arg-u16.8/= (a b)
- (%u16.8-not
- (%two-arg-u16.8= a b)))
-
-(define-fake-vop two-arg-u16.8> (a b)
- (let* ((x (expt 2 15))
- (v (%make-u16.8 x x x x x x x x)))
- (%two-arg-u16.8>~ (%two-arg-u16.8- a v)
- (%two-arg-u16.8- b v))))
-
-(define-fake-vop two-arg-u16.8< (a b)
- (%two-arg-u16.8> b a))
-
-(define-fake-vop two-arg-u16.8>= (a b)
- (%u16.8-not
- (%two-arg-u16.8< a b)))
-
-(define-fake-vop two-arg-u16.8<= (a b)
- (%u16.8-not
- (%two-arg-u16.8> a b)))
-
-(define-fake-vop u16.8-movemask (a)
- (u16-odd-bits
- (%u8.16-movemask
- (%u8.16!-from-p128 a))))
-
-(define-fake-vop make-u32.4 (a b c d)
- (%u32.4-unpacklo
- (%u32.4!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-u32s a c)))
- (%u32.4!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-u32s b d)))))
-
-(define-fake-vop u32.4-values (x)
- (multiple-value-call #'values
- (sb-simd::%u32s-from-u64 (%u64!-from-p128 x))
- (sb-simd::%u32s-from-u64 (%u64!-from-p128 (%u32.4-shuffle (%u32.4!-from-p128 x) #b00001110)))))
-
-(define-fake-vop u32.4-broadcast (x)
- (let ((v (%u64.2!-from-u64 (sb-simd::%u64-from-u32s x x))))
- (%u32.4!-from-p128 (%u64.2-unpacklo v v))))
-
-(define-fake-vop u32.4-not (a)
- (%u32.4-andc1
- a
- (%make-u32.4 +u32-true+ +u32-true+ +u32-true+ +u32-true+)))
-
-(define-fake-vop two-arg-u32.4/= (a b)
- (%u32.4-not
- (%two-arg-u32.4= a b)))
-
-(define-fake-vop two-arg-u32.4> (a b)
- (let* ((x (expt 2 31))
- (v (%make-u32.4 x x x x)))
- (%two-arg-u32.4>~ (%two-arg-u32.4- a v)
- (%two-arg-u32.4- b v))))
-
-(define-fake-vop two-arg-u32.4< (a b)
- (%two-arg-u32.4> b a))
-
-(define-fake-vop two-arg-u32.4>= (a b)
- (%u32.4-not
- (%two-arg-u32.4< a b)))
-
-(define-fake-vop two-arg-u32.4<= (a b)
- (%u32.4-not
- (%two-arg-u32.4> a b)))
-
-(define-fake-vop make-u64.2 (a b)
- (%u64.2-unpacklo
- (%u64.2!-from-u64 a)
- (%u64.2!-from-u64 b)))
-
-(define-fake-vop u64.2-values (x)
- (values
- (%u64!-from-p128 x)
- (%u64!-from-p128 (%u32.4-shuffle (%u32.4!-from-p128 x) #b00001110))))
-
-(define-fake-vop u64.2-broadcast (x)
- (let ((v (%u64.2!-from-u64 x)))
- (%u64.2-unpacklo v v)))
-
-(define-fake-vop u64.2-not (a)
- (%u64.2-andc1
- a
- (%make-u64.2 +u64-true+ +u64-true+)))
-
-(define-fake-vop s8.16!-from-s8 (x)
- (%s8.16!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-s8s x 0 0 0 0 0 0 0))))
-
-(define-fake-vop make-s8.16 (a b c d e f g h i j k l m n o p)
- (%s8.16-unpacklo
- (%s8.16!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-s8s a c e g i k m o)))
- (%s8.16!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-s8s b d f h j l n p)))))
-
-(define-fake-vop s8.16-values (x)
- (multiple-value-call #'values
- (sb-simd::%s8s-from-u64 (%u64!-from-p128 x))
- (sb-simd::%s8s-from-u64 (%u64!-from-p128 (%u32.4-shuffle (%u32.4!-from-p128 x) #b00001110)))))
-
-(define-fake-vop s8.16-broadcast (x)
- (let ((v (%u64.2!-from-u64 (sb-simd::%u64-from-s8s x x x x x x x x))))
- (%s8.16!-from-p128 (%u64.2-unpacklo v v))))
-
-(define-fake-vop s8.16-not (a)
- (%s8.16-andc1
- a
- (%make-s8.16 +s8-true+ +s8-true+ +s8-true+ +s8-true+
- +s8-true+ +s8-true+ +s8-true+ +s8-true+
- +s8-true+ +s8-true+ +s8-true+ +s8-true+
- +s8-true+ +s8-true+ +s8-true+ +s8-true+)))
-
-(define-fake-vop two-arg-s8.16/= (a b)
- (%u8.16-not
- (%two-arg-s8.16= a b)))
-
-(define-fake-vop two-arg-s8.16< (a b)
- (%two-arg-s8.16> b a))
-
-(define-fake-vop two-arg-s8.16>= (a b)
- (%u8.16-not
- (%two-arg-s8.16< a b)))
-
-(define-fake-vop two-arg-s8.16<= (a b)
- (%u8.16-not
- (%two-arg-s8.16> a b)))
-
-(define-fake-vop s16.8!-from-s16 (x)
- (%s16.8!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-s16s x 0 0 0))))
-
-(define-fake-vop make-s16.8 (a b c d e f g h)
- (%s16.8-unpacklo
- (%s16.8!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-s16s a c e g)))
- (%s16.8!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-s16s b d f h)))))
-
-(define-fake-vop s16.8-values (x)
- (multiple-value-call #'values
- (sb-simd::%s16s-from-u64 (%u64!-from-p128 x))
- (sb-simd::%s16s-from-u64 (%u64!-from-p128 (%u32.4-shuffle (%u32.4!-from-p128 x) #b00001110)))))
-
-(define-fake-vop s16.8-broadcast (x)
- (let ((v (%u64.2!-from-u64 (sb-simd::%u64-from-s16s x x x x))))
- (%s16.8!-from-p128 (%u64.2-unpacklo v v))))
-
-(define-fake-vop s16.8-not (a)
- (%s16.8-andc1
- a
- (%make-s16.8 +s16-true+ +s16-true+ +s16-true+ +s16-true+
- +s16-true+ +s16-true+ +s16-true+ +s16-true+)))
-
-(define-fake-vop two-arg-s16.8/= (a b)
- (%u16.8-not
- (%two-arg-s16.8= a b)))
-
-(define-fake-vop two-arg-s16.8< (a b)
- (%two-arg-s16.8> b a))
-
-(define-fake-vop two-arg-s16.8>= (a b)
- (%u16.8-not
- (%two-arg-s16.8< a b)))
-
-(define-fake-vop two-arg-s16.8<= (a b)
- (%u16.8-not
- (%two-arg-s16.8> a b)))
-
-(define-fake-vop s16.8-movemask (a)
- (u16-odd-bits
- (%u8.16-movemask
- (%u8.16!-from-p128 a))))
-
-(define-fake-vop s32.4!-from-s32 (x)
- (%s32.4!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-s32s x 0))))
-
-(define-fake-vop make-s32.4 (a b c d)
- (%s32.4-unpacklo
- (%s32.4!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-s32s a c)))
- (%s32.4!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-s32s b d)))))
-
-(define-fake-vop s32.4-values (x)
- (multiple-value-call #'values
- (sb-simd::%s32s-from-u64 (%u64!-from-p128 x))
- (sb-simd::%s32s-from-u64 (%u64!-from-p128 (%u32.4-shuffle (%u32.4!-from-p128 x) #b00001110)))))
-
-(define-fake-vop s32.4-broadcast (x)
- (let ((v (%u64.2!-from-u64 (sb-simd::%u64-from-s32s x x))))
- (%s32.4!-from-p128 (%u64.2-unpacklo v v))))
-
-(define-fake-vop s32.4-not (a)
- (%s32.4-andc1
- a
- (%make-s32.4 +s32-true+ +s32-true+ +s32-true+ +s32-true+)))
-
-(define-fake-vop two-arg-s32.4/= (a b)
- (%u32.4-not
- (%two-arg-s32.4= a b)))
-
-(define-fake-vop two-arg-s32.4< (a b)
- (%two-arg-s32.4> b a))
-
-(define-fake-vop two-arg-s32.4>= (a b)
- (%u32.4-not
- (%two-arg-s32.4< a b)))
-
-(define-fake-vop two-arg-s32.4<= (a b)
- (%u32.4-not
- (%two-arg-s32.4> a b)))
-
-(define-fake-vop s64.2!-from-s64 (x)
- (%s64.2!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-s64 x))))
-
-(define-fake-vop make-s64.2 (a b)
- (%s64.2-unpacklo
- (%s64.2!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-s64 a)))
- (%s64.2!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-s64 b)))))
-
-(define-fake-vop s64.2-values (x)
- (values
- (sb-simd::%s64-from-u64 (%u64!-from-p128 x))
- (sb-simd::%s64-from-u64 (%u64!-from-p128 (%u32.4-shuffle (%u32.4!-from-p128 x) #b00001110)))))
-
-(define-fake-vop s64.2-broadcast (x)
- (let ((v (%u64.2!-from-u64 (sb-simd::%u64-from-s64 x))))
- (%s64.2!-from-p128 (%u64.2-unpacklo v v))))
-
-(define-fake-vop s64.2-not (a)
- (%s64.2-andc1
- a
- (%make-s64.2 +s64-true+ +s64-true+)))
-
-(in-package #:sb-simd-sse4.1)
-
-(define-fake-vop two-arg-u64.2/= (a b)
- (sb-simd-sse2::%u64.2-not
- (%two-arg-u64.2= a b)))
-
-(define-fake-vop two-arg-s64.2/= (a b)
- (sb-simd-sse2::%u64.2-not
- (%two-arg-s64.2= a b)))
-
-(in-package #:sb-simd-sse4.2)
-
-(define-fake-vop two-arg-u64.2> (a b)
- (let* ((x (expt 2 63))
- (v (sb-simd-sse2::%make-u64.2 x x)))
- (%two-arg-u64.2>~ (sb-simd-sse2::%two-arg-u64.2- a v)
- (sb-simd-sse2::%two-arg-u64.2- b v))))
-
-(define-fake-vop two-arg-u64.2< (a b)
- (%two-arg-u64.2> b a))
-
-(define-fake-vop two-arg-u64.2>= (a b)
- (sb-simd-sse2::%u64.2-not
- (%two-arg-u64.2< a b)))
-
-(define-fake-vop two-arg-u64.2<= (a b)
- (sb-simd-sse2::%u64.2-not
- (%two-arg-u64.2> a b)))
-
-(define-fake-vop two-arg-s64.2< (a b)
- (%two-arg-s64.2> b a))
-
-(define-fake-vop two-arg-s64.2>= (a b)
- (sb-simd-sse2::%u64.2-not
- (%two-arg-s64.2< a b)))
-
-(define-fake-vop two-arg-s64.2<= (a b)
- (sb-simd-sse2::%u64.2-not
- (%two-arg-s64.2> a b)))
-
-(in-package #:sb-simd-avx)
-
-(define-fake-vop u8!-from-p128 (x)
- (logand #xff (%u64!-from-p128 x)))
-
-(define-fake-vop u8!-from-p256 (x)
- (logand #xff (%u64!-from-p256 x)))
-
-(define-fake-vop u16!-from-p128 (x)
- (logand #xffff (%u64!-from-p128 x)))
-
-(define-fake-vop u16!-from-p256 (x)
- (logand #xffff (%u64!-from-p256 x)))
-
-(define-fake-vop u32!-from-p128 (x)
- (logand #xffffffff (%u64!-from-p128 x)))
-
-(define-fake-vop u32!-from-p256 (x)
- (logand #xffffffff (%u64!-from-p256 x)))
-
-(define-fake-vop f32-not (a)
- (%f32-andc1 a +f32-true+))
-
-(define-fake-vop f64-not (a)
- (%f64-andc1 a +f64-true+))
-
-(define-fake-vop make-f32.4 (a b c d)
- (%f32.4-unpacklo
- (%f32.4-unpacklo
- (%f32.4!-from-f32 a)
- (%f32.4!-from-f32 c))
- (%f32.4-unpacklo
- (%f32.4!-from-f32 b)
- (%f32.4!-from-f32 d))))
-
-(define-fake-vop f32.4-values (x)
- (values
- (%f32!-from-p128 x)
- (%f32!-from-p128 (%f32.4-permute x 1))
- (%f32!-from-p128 (%f32.4-permute x 2))
- (%f32!-from-p128 (%f32.4-permute x 3))))
-
-(define-fake-vop f32.4-not (a)
- (%f32.4-andc1
- a
- (%make-f32.4 +f32-true+ +f32-true+ +f32-true+ +f32-true+)))
-
-(macrolet ((def (name op)
- `(define-fake-vop ,name (x)
- (let ((y (,op x (%f32.4-shuffle x x #4r2301))))
- (%f32!-from-p128 (,op y (%f32.4-shuffle y y #4r1032)))))))
- (def f32.4-horizontal-and %two-arg-f32.4-and)
- (def f32.4-horizontal-or %two-arg-f32.4-or)
- (def f32.4-horizontal-xor %two-arg-f32.4-xor)
- (def f32.4-horizontal-max %two-arg-f32.4-max)
- (def f32.4-horizontal-min %two-arg-f32.4-min)
- (def f32.4-horizontal+ %two-arg-f32.4+)
- (def f32.4-horizontal* %two-arg-f32.4*))
-
-(define-fake-vop make-f64.2 (a b)
- (%f64.2-unpacklo
- (%f64.2!-from-f64 a)
- (%f64.2!-from-f64 b)))
-
-(define-fake-vop f64.2-values (x)
- (values
- (%f64!-from-p128 x)
- (%f64!-from-p128 (%f64.2-permute x 1))))
-
-(define-fake-vop f64.2-not (a)
- (%f64.2-andc1
- a
- (%make-f64.2 +f64-true+ +f64-true+)))
-
-(macrolet ((def (name op)
- `(define-fake-vop ,name (x)
- (multiple-value-bind (a b) (%f64.2-values x)
- (,op a b)))))
- (def f64.2-horizontal-and %two-arg-f64-and)
- (def f64.2-horizontal-or %two-arg-f64-or)
- (def f64.2-horizontal-xor %two-arg-f64-xor)
- (def f64.2-horizontal-max %two-arg-f64-max)
- (def f64.2-horizontal-min %two-arg-f64-min)
- (def f64.2-horizontal+ %two-arg-f64+)
- (def f64.2-horizontal* %two-arg-f64*))
-
-(define-fake-vop make-f32.8 (a b c d e f g h)
- (let ((lo (%make-f32.4 a b c d))
- (hi (%make-f32.4 e f g h)))
- (%f32.8-insert-f32.4 (%f32.8!-from-p128 lo) hi 1)))
-
-(define-fake-vop f32.8-values (x)
- (multiple-value-call #'values
- (%f32.4-values (%f32.4!-from-p256 x))
- (%f32.4-values (%f32.4-from-f32.8 x 1))))
-
-(define-fake-vop f32.8-not (a)
- (%f32.8-andc1
- a
- (%make-f32.8 +f32-true+ +f32-true+ +f32-true+ +f32-true+
- +f32-true+ +f32-true+ +f32-true+ +f32-true+)))
-
-(macrolet ((def (name op)
- `(define-fake-vop ,name (x)
- (let* ((x (,op x (%f32.8-dupodd x)))
- (x (,op x (%f32.8-permute x #4r0202)))
- (x (,op x (%f32.8-permute128 x x #4r01))))
- (%f32!-from-p256 x)))))
- (def f32.8-horizontal-and %two-arg-f32.8-and)
- (def f32.8-horizontal-or %two-arg-f32.8-or)
- (def f32.8-horizontal-xor %two-arg-f32.8-xor)
- (def f32.8-horizontal-max %two-arg-f32.8-max)
- (def f32.8-horizontal-min %two-arg-f32.8-min)
- (def f32.8-horizontal+ %two-arg-f32.8+)
- (def f32.8-horizontal* %two-arg-f32.8*))
-
-(define-fake-vop make-f64.4 (a b c d)
- (let ((lo (%make-f64.2 a b))
- (hi (%make-f64.2 c d)))
- (%f64.4-insert-f64.2 (%f64.4!-from-p128 lo) hi 1)))
-
-(define-fake-vop f64.4-values (x)
- (multiple-value-call #'values
- (%f64.2-values (%f64.2!-from-p256 x))
- (%f64.2-values (%f64.2-from-f64.4 x 1))))
-
-(define-fake-vop f64.4-not (a)
- (%f64.4-andc1
- a
- (%make-f64.4 +f64-true+ +f64-true+ +f64-true+ +f64-true+)))
-
-(macrolet ((def (name op )
- `(define-fake-vop ,name (x)
- (let* ((y (,op x (%f64.4-permute x #b0101)))
- (z (,op y (%f64.4-permute128 y y #4r01))))
- (%f64!-from-p256 z)))))
- (def f64.4-horizontal-and %two-arg-f64.4-and)
- (def f64.4-horizontal-or %two-arg-f64.4-or)
- (def f64.4-horizontal-xor %two-arg-f64.4-xor)
- (def f64.4-horizontal-max %two-arg-f64.4-max)
- (def f64.4-horizontal-min %two-arg-f64.4-min)
- (def f64.4-horizontal+ %two-arg-f64.4+)
- (def f64.4-horizontal* %two-arg-f64.4*))
-
-(define-fake-vop make-u8.16 (a b c d e f g h i j k l m n o p)
- (%u8.16-unpacklo
- (%u8.16!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-u8s a c e g i k m o)))
- (%u8.16!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-u8s b d f h j l n p)))))
-
-(define-fake-vop u8.16-values (x)
- (multiple-value-call #'values
- (sb-simd::%u8s-from-u64 (%u64!-from-p128 x))
- (sb-simd::%u8s-from-u64 (%u64!-from-p128 (%u64.2-permute (%u64.2!-from-p128 x) 1)))))
-
-(define-fake-vop u8.16-broadcast (x)
- (let ((v (%u64.2!-from-u64 (sb-simd::%u64-from-u8s x x x x x x x x))))
- (%u8.16!-from-p128 (%u64.2-unpacklo v v))))
-
-(define-fake-vop u8.16-not (a)
- (%u8.16-andc1
- a
- (%make-u8.16 +u8-true+ +u8-true+ +u8-true+ +u8-true+
- +u8-true+ +u8-true+ +u8-true+ +u8-true+
- +u8-true+ +u8-true+ +u8-true+ +u8-true+
- +u8-true+ +u8-true+ +u8-true+ +u8-true+)))
-
-(define-fake-vop two-arg-u8.16/= (a b)
- (%u8.16-not
- (%two-arg-u8.16= a b)))
-
-(define-fake-vop two-arg-u8.16> (a b)
- (let* ((x (expt 2 7))
- (v (%make-u8.16 x x x x x x x x x x x x x x x x)))
- (%two-arg-u8.16>~ (%two-arg-u8.16- a v)
- (%two-arg-u8.16- b v))))
-
-(define-fake-vop two-arg-u8.16< (a b)
- (%two-arg-u8.16> b a))
-
-(define-fake-vop two-arg-u8.16>= (a b)
- (%u8.16-not
- (%two-arg-u8.16< a b)))
-
-(define-fake-vop two-arg-u8.16<= (a b)
- (%u8.16-not
- (%two-arg-u8.16> a b)))
-
-(define-fake-vop make-u16.8 (a b c d e f g h)
- (%u16.8-unpacklo
- (%u16.8!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-u16s a c e g)))
- (%u16.8!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-u16s b d f h)))))
-
-(define-fake-vop u16.8-values (x)
- (multiple-value-call #'values
- (sb-simd::%u16s-from-u64 (%u64!-from-p128 x))
- (sb-simd::%u16s-from-u64 (%u64!-from-p128 (%u64.2-permute (%u64.2!-from-p128 x) 1)))))
-
-(define-fake-vop u16.8-broadcast (x)
- (let ((v (%u64.2!-from-u64 (sb-simd::%u64-from-u16s x x x x))))
- (%u16.8!-from-p128 (%u64.2-unpacklo v v))))
-
-(define-fake-vop u16.8-not (a)
- (%u16.8-andc1
- a
- (%make-u16.8 +u16-true+ +u16-true+ +u16-true+ +u16-true+
- +u16-true+ +u16-true+ +u16-true+ +u16-true+)))
-
-(define-fake-vop two-arg-u16.8/= (a b)
- (%u16.8-not
- (%two-arg-u16.8= a b)))
-
-(define-fake-vop two-arg-u16.8> (a b)
- (let* ((x (expt 2 15))
- (v (%make-u16.8 x x x x x x x x)))
- (%two-arg-u16.8>~ (%two-arg-u16.8- a v)
- (%two-arg-u16.8- b v))))
-
-(define-fake-vop two-arg-u16.8< (a b)
- (%two-arg-u16.8> b a))
-
-(define-fake-vop two-arg-u16.8>= (a b)
- (%u16.8-not
- (%two-arg-u16.8< a b)))
-
-(define-fake-vop two-arg-u16.8<= (a b)
- (%u16.8-not
- (%two-arg-u16.8> a b)))
-
-(define-fake-vop u16.8-movemask (a)
- (u16-odd-bits
- (%u8.16-movemask
- (%u8.16!-from-p128 a))))
-
-(define-fake-vop make-u32.4 (a b c d)
- (%u32.4-unpacklo
- (%u32.4!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-u32s a c)))
- (%u32.4!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-u32s b d)))))
-
-(define-fake-vop u32.4-values (x)
- (multiple-value-call #'values
- (sb-simd::%u32s-from-u64 (%u64!-from-p128 x))
- (sb-simd::%u32s-from-u64 (%u64!-from-p128 (%u64.2-permute (%u64.2!-from-p128 x) 1)))))
-
-(define-fake-vop u32.4-broadcast (x)
- (let ((v (%u64.2!-from-u64 (sb-simd::%u64-from-u32s x x))))
- (%u32.4!-from-p128 (%u64.2-unpacklo v v))))
-
-(define-fake-vop u32.4-not (a)
- (%u32.4-andc1
- a
- (%make-u32.4 +u32-true+ +u32-true+ +u32-true+ +u32-true+)))
-
-(define-fake-vop two-arg-u32.4/= (a b)
- (%u32.4-not
- (%two-arg-u32.4= a b)))
-
-(define-fake-vop two-arg-u32.4> (a b)
- (let* ((x (expt 2 31))
- (v (%make-u32.4 x x x x)))
- (%two-arg-u32.4>~ (%two-arg-u32.4- a v)
- (%two-arg-u32.4- b v))))
-
-(define-fake-vop two-arg-u32.4< (a b)
- (%two-arg-u32.4> b a))
-
-(define-fake-vop two-arg-u32.4>= (a b)
- (%u32.4-not
- (%two-arg-u32.4< a b)))
-
-(define-fake-vop two-arg-u32.4<= (a b)
- (%u32.4-not
- (%two-arg-u32.4> a b)))
-
-(define-fake-vop make-u64.2 (a b)
- (%u64.2-unpacklo
- (%u64.2!-from-u64 a)
- (%u64.2!-from-u64 b)))
-
-(define-fake-vop u64.2-values (x)
- (multiple-value-call #'values
- (%u64!-from-p128 x)
- (%u64!-from-p128 (%u64.2-permute (%u64.2!-from-p128 x) 1))))
-
-(define-fake-vop u64.2-broadcast (x)
- (let ((v (%u64.2!-from-u64 x)))
- (%u64.2-unpacklo v v)))
-
-(define-fake-vop u64.2-not (a)
- (%u64.2-andc1
- a
- (%make-u64.2 +u64-true+ +u64-true+)))
-
-(define-fake-vop two-arg-u64.2/= (a b)
- (%u64.2-not
- (%two-arg-u64.2= a b)))
-
-(define-fake-vop two-arg-u64.2> (a b)
- (let* ((x (expt 2 63))
- (v (%make-u64.2 x x)))
- (%two-arg-u64.2>~ (%two-arg-u64.2- a v)
- (%two-arg-u64.2- b v))))
-
-(define-fake-vop two-arg-u64.2< (a b)
- (%two-arg-u64.2> b a))
-
-(define-fake-vop two-arg-u64.2>= (a b)
- (sb-simd-avx::%u64.2-not
- (%two-arg-u64.2< a b)))
-
-(define-fake-vop two-arg-u64.2<= (a b)
- (sb-simd-avx::%u64.2-not
- (%two-arg-u64.2> a b)))
-
-(define-fake-vop make-u8.32
- (u01 u02 u03 u04 u05 u06 u07 u08 u09 u10 u11 u12 u13 u14 u15 u16 u17 u18 u19 u20 u21 u22 u23 u24 u25 u26 u27 u28 u29 u30 u31 u32)
- (let ((lo (%make-u8.16 u01 u02 u03 u04 u05 u06 u07 u08 u09 u10 u11 u12 u13 u14 u15 u16))
- (hi (%make-u8.16 u17 u18 u19 u20 u21 u22 u23 u24 u25 u26 u27 u28 u29 u30 u31 u32)))
- (%u8.32-insert-u8.16 (%u8.32!-from-p128 lo) hi 1)))
-
-(define-fake-vop u8.32-values (x)
- (multiple-value-call #'values
- (%u8.16-values (%u8.16!-from-p256 x))
- (%u8.16-values (%u8.16-from-u8.32 x 1))))
-
-(define-fake-vop u8.32-broadcast (x)
- (let ((v (%u8.16-broadcast x)))
- (%u8.32-insert-u8.16 (%u8.32!-from-p128 v) v 1)))
-
-(define-fake-vop make-u16.16 (a b c d e f g h i j k l m n o p)
- (let ((lo (%make-u16.8 a b c d e f g h))
- (hi (%make-u16.8 i j k l m n o p)))
- (%u16.16-insert-u16.8 (%u16.16!-from-p128 lo) hi 1)))
-
-(define-fake-vop u16.16-values (x)
- (multiple-value-call #'values
- (%u16.8-values (%u16.8!-from-p256 x))
- (%u16.8-values (%u16.8-from-u16.16 x 1))))
-
-(define-fake-vop u16.16-broadcast (x)
- (let ((v (%u16.8-broadcast x)))
- (%u16.16-insert-u16.8 (%u16.16!-from-p128 v) v 1)))
-
-(define-fake-vop make-u32.8 (a b c d e f g h)
- (let ((lo (%make-u32.4 a b c d))
- (hi (%make-u32.4 e f g h)))
- (%u32.8-insert-u32.4 (%u32.8!-from-p128 lo) hi 1)))
-
-(define-fake-vop u32.8-values (x)
- (multiple-value-call #'values
- (%u32.4-values (%u32.4!-from-p256 x))
- (%u32.4-values (%u32.4-from-u32.8 x 1))))
-
-(define-fake-vop u32.8-broadcast (x)
- (let ((v (%u32.4-broadcast x)))
- (%u32.8-insert-u32.4 (%u32.8!-from-p128 v) v 1)))
-
-(define-fake-vop make-u64.4 (a b c d)
- (let ((lo (%make-u64.2 a b))
- (hi (%make-u64.2 c d)))
- (%u64.4-insert-u64.2 (%u64.4!-from-p128 lo) hi 1)))
-
-(define-fake-vop u64.4-values (x)
- (multiple-value-call #'values
- (%u64.2-values (%u64.2!-from-p256 x))
- (%u64.2-values (%u64.2-from-u64.4 x 1))))
-
-(define-fake-vop u64.4-broadcast (x)
- (let ((v (%u64.2-broadcast x)))
- (%u64.4-insert-u64.2 (%u64.4!-from-p128 v) v 1)))
-
-(define-fake-vop s8.16!-from-s8 (x)
- (%s8.16!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-s8s x 0 0 0 0 0 0 0))))
-
-(define-fake-vop make-s8.16 (a b c d e f g h i j k l m n o p)
- (%s8.16-unpacklo
- (%s8.16!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-s8s a c e g i k m o)))
- (%s8.16!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-s8s b d f h j l n p)))))
-
-(define-fake-vop s8.16-values (x)
- (multiple-value-call #'values
- (sb-simd::%s8s-from-u64 (%u64!-from-p128 x))
- (sb-simd::%s8s-from-u64 (%u64!-from-p128 (%u64.2-permute (%u64.2!-from-p128 x) 1)))))
-
-(define-fake-vop s8.16-broadcast (x)
- (let ((v (%u64.2!-from-u64 (sb-simd::%u64-from-s8s x x x x x x x x))))
- (%s8.16!-from-p128 (%u64.2-unpacklo v v))))
-
-(define-fake-vop s8.16-not (a)
- (%s8.16-andc1
- a
- (%make-s8.16 +s8-true+ +s8-true+ +s8-true+ +s8-true+
- +s8-true+ +s8-true+ +s8-true+ +s8-true+
- +s8-true+ +s8-true+ +s8-true+ +s8-true+
- +s8-true+ +s8-true+ +s8-true+ +s8-true+)))
-
-(define-fake-vop two-arg-s8.16/= (a b)
- (%u8.16-not
- (%two-arg-s8.16= a b)))
-
-(define-fake-vop two-arg-s8.16< (a b)
- (%two-arg-s8.16> b a))
-
-(define-fake-vop two-arg-s8.16>= (a b)
- (%u8.16-not
- (%two-arg-s8.16< a b)))
-
-(define-fake-vop two-arg-s8.16<= (a b)
- (%u8.16-not
- (%two-arg-s8.16> a b)))
-
-(define-fake-vop s16.8!-from-s16 (x)
- (%s16.8!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-s16s x 0 0 0))))
-
-(define-fake-vop make-s16.8 (a b c d e f g h)
- (%s16.8-unpacklo
- (%s16.8!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-s16s a c e g)))
- (%s16.8!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-s16s b d f h)))))
-
-(define-fake-vop s16.8-values (x)
- (multiple-value-call #'values
- (sb-simd::%s16s-from-u64 (%u64!-from-p128 x))
- (sb-simd::%s16s-from-u64 (%u64!-from-p128 (%u64.2-permute (%u64.2!-from-p128 x) 1)))))
-
-(define-fake-vop s16.8-broadcast (x)
- (let ((v (%u64.2!-from-u64 (sb-simd::%u64-from-s16s x x x x))))
- (%s16.8!-from-p128 (%u64.2-unpacklo v v))))
-
-(define-fake-vop s16.8-not (a)
- (%s16.8-andc1
- a
- (%make-s16.8 +s16-true+ +s16-true+ +s16-true+ +s16-true+
- +s16-true+ +s16-true+ +s16-true+ +s16-true+)))
-
-(define-fake-vop two-arg-s16.8/= (a b)
- (%u16.8-not
- (%two-arg-s16.8= a b)))
-
-(define-fake-vop two-arg-s16.8< (a b)
- (%two-arg-s16.8> b a))
-
-(define-fake-vop two-arg-s16.8>= (a b)
- (%u16.8-not
- (%two-arg-s16.8< a b)))
-
-(define-fake-vop two-arg-s16.8<= (a b)
- (%u16.8-not
- (%two-arg-s16.8> a b)))
-
-(define-fake-vop s16.8-movemask (a)
- (u16-odd-bits
- (%u8.16-movemask
- (%u8.16!-from-p128 a))))
-
-(define-fake-vop s32.4!-from-s32 (x)
- (%s32.4!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-s32s x 0))))
-
-(define-fake-vop make-s32.4 (a b c d)
- (%s32.4-unpacklo
- (%s32.4!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-s32s a c)))
- (%s32.4!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-s32s b d)))))
-
-(define-fake-vop s32.4-values (x)
- (multiple-value-call #'values
- (sb-simd::%s32s-from-u64 (%u64!-from-p128 x))
- (sb-simd::%s32s-from-u64 (%u64!-from-p128 (%u64.2-permute (%u64.2!-from-p128 x) 1)))))
-
-(define-fake-vop s32.4-broadcast (x)
- (let ((v (%u64.2!-from-u64 (sb-simd::%u64-from-s32s x x))))
- (%s32.4!-from-p128 (%u64.2-unpacklo v v))))
-
-(define-fake-vop s32.4-not (a)
- (%s32.4-andc1
- a
- (%make-s32.4 +s32-true+ +s32-true+ +s32-true+ +s32-true+)))
-
-(define-fake-vop two-arg-s32.4/= (a b)
- (%u32.4-not
- (%two-arg-s32.4= a b)))
-
-(define-fake-vop two-arg-s32.4< (a b)
- (%two-arg-s32.4> b a))
-
-(define-fake-vop two-arg-s32.4>= (a b)
- (%u32.4-not
- (%two-arg-s32.4< a b)))
-
-(define-fake-vop two-arg-s32.4<= (a b)
- (%u32.4-not
- (%two-arg-s32.4> a b)))
-
-(define-fake-vop s64.2!-from-s64 (x)
- (%s64.2!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-s64 x))))
-
-(define-fake-vop make-s64.2 (a b)
- (%s64.2-unpacklo
- (%s64.2!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-s64 a)))
- (%s64.2!-from-p128 (%u64.2!-from-u64 (sb-simd::%u64-from-s64 b)))))
-
-(define-fake-vop s64.2-values (x)
- (multiple-value-call #'values
- (sb-simd::%s64-from-u64 (%u64!-from-p128 x))
- (sb-simd::%s64-from-u64 (%u64!-from-p128 (%u64.2-permute (%u64.2!-from-p128 x) 1)))))
-
-(define-fake-vop s64.2-broadcast (x)
- (let ((v (%u64.2!-from-u64 (sb-simd::%u64-from-s64 x))))
- (%s64.2!-from-p128 (%u64.2-unpacklo v v))))
-
-(define-fake-vop s64.2-not (a)
- (%s64.2-andc1
- a
- (%make-s64.2 +s64-true+ +s64-true+)))
-
-(define-fake-vop two-arg-s64.2/= (a b)
- (%u64.2-not
- (%two-arg-s64.2= a b)))
-
-(define-fake-vop two-arg-s64.2< (a b)
- (%two-arg-s64.2> b a))
-
-(define-fake-vop two-arg-s64.2>= (a b)
- (sb-simd-avx::%u64.2-not
- (%two-arg-s64.2< a b)))
-
-(define-fake-vop two-arg-s64.2<= (a b)
- (sb-simd-avx::%u64.2-not
- (%two-arg-s64.2> a b)))
-
-(define-fake-vop s8.32!-from-s8 (x)
- (%s8.32!-from-p256 (%u64.4!-from-u64 (sb-simd::%u64-from-s8s x 0 0 0 0 0 0 0))))
-
-(define-fake-vop make-s8.32
- (s01 s02 s03 s04 s05 s06 s07 s08 s09 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 s32)
- (let ((lo (%make-s8.16 s01 s02 s03 s04 s05 s06 s07 s08 s09 s10 s11 s12 s13 s14 s15 s16))
- (hi (%make-s8.16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 s32)))
- (%s8.32-insert-s8.16 (%s8.32!-from-p128 lo) hi 1)))
-
-(define-fake-vop s8.32-values (x)
- (multiple-value-call #'values
- (%s8.16-values (%s8.16!-from-p256 x))
- (%s8.16-values (%s8.16-from-s8.32 x 1))))
-
-(define-fake-vop s8.32-broadcast (x)
- (let ((v (%s8.16-broadcast x)))
- (%s8.32-insert-s8.16 (%s8.32!-from-p128 v) v 1)))
-
-(define-fake-vop s16.16!-from-s16 (x)
- (%s16.16!-from-p256 (%u64.4!-from-u64 (sb-simd::%u64-from-s16s x 0 0 0))))
-
-(define-fake-vop make-s16.16 (a b c d e f g h i j k l m n o p)
- (let ((lo (%make-s16.8 a b c d e f g h))
- (hi (%make-s16.8 i j k l m n o p)))
- (%s16.16-insert-s16.8 (%s16.16!-from-p128 lo) hi 1)))
-
-(define-fake-vop s16.16-values (x)
- (multiple-value-call #'values
- (%s16.8-values (%s16.8!-from-p256 x))
- (%s16.8-values (%s16.8-from-s16.16 x 1))))
-
-(define-fake-vop s16.16-broadcast (x)
- (let ((v (%s16.8-broadcast x)))
- (%s16.16-insert-s16.8 (%s16.16!-from-p128 v) v 1)))
-
-(define-fake-vop s32.8!-from-s32 (x)
- (%s32.8!-from-p256 (%u64.4!-from-u64 (sb-simd::%u64-from-s32s x 0))))
-
-(define-fake-vop make-s32.8 (a b c d e f g h)
- (let ((lo (%make-s32.4 a b c d))
- (hi (%make-s32.4 e f g h)))
- (%s32.8-insert-s32.4 (%s32.8!-from-p128 lo) hi 1)))
-
-(define-fake-vop s32.8-values (x)
- (multiple-value-call #'values
- (%s32.4-values (%s32.4!-from-p256 x))
- (%s32.4-values (%s32.4-from-s32.8 x 1))))
-
-(define-fake-vop s32.8-broadcast (x)
- (let ((v (%s32.4-broadcast x)))
- (%s32.8-insert-s32.4 (%s32.8!-from-p128 v) v 1)))
-
-(define-fake-vop s64.4!-from-s64 (x)
- (%s64.4!-from-p256 (%u64.4!-from-u64 (sb-simd::%u64-from-s64 x))))
-
-(define-fake-vop make-s64.4 (a b c d)
- (let ((lo (%make-s64.2 a b))
- (hi (%make-s64.2 c d)))
- (%s64.4-insert-s64.2 (%s64.4!-from-p128 lo) hi 1)))
-
-(define-fake-vop s64.4-values (x)
- (multiple-value-call #'values
- (%s64.2-values (%s64.2!-from-p256 x))
- (%s64.2-values (%s64.2-from-s64.4 x 1))))
-
-(define-fake-vop s64.4-broadcast (x)
- (let ((v (%s64.2-broadcast x)))
- (%s64.4-insert-s64.2 (%s64.4!-from-p128 v) v 1)))
-
-(define-fake-vop f64.4-reverse (x)
- (%f64.4-permute (%f64.4-permute128 x x #4r01) #4r11))
-
-(in-package #:sb-simd-avx2)
-
-(define-fake-vop u8.16-broadcast (x)
- (%u8.16-broadcastvec (sb-simd-avx::%u8.16!-from-u8 x)))
-
-(define-fake-vop u16.8-broadcast (x)
- (%u16.8-broadcastvec (sb-simd-avx::%u16.8!-from-u16 x)))
-
-(define-fake-vop u32.4-broadcast (x)
- (%u32.4-broadcastvec (sb-simd-avx::%u32.4!-from-u32 x)))
-
-(define-fake-vop u64.2-broadcast (x)
- (%u64.2-broadcastvec (sb-simd-avx::%u64.2!-from-u64 x)))
-
-(define-fake-vop s8.16-broadcast (x)
- (%s8.16-broadcastvec (sb-simd-avx::%s8.16!-from-s8 x)))
-
-(define-fake-vop s16.8-broadcast (x)
- (%s16.8-broadcastvec (sb-simd-avx::%s16.8!-from-s16 x)))
-
-(define-fake-vop s32.4-broadcast (x)
- (%s32.4-broadcastvec (sb-simd-avx::%s32.4!-from-s32 x)))
-
-(define-fake-vop s64.2-broadcast (x)
- (%s64.2-broadcastvec (sb-simd-avx::%s64.2!-from-s64 x)))
-
-(define-fake-vop make-u8.32
- (u01 u02 u03 u04 u05 u06 u07 u08 u09 u10 u11 u12 u13 u14 u15 u16 u17 u18 u19 u20 u21 u22 u23 u24 u25 u26 u27 u28 u29 u30 u31 u32)
- (let ((lo (sb-simd-avx::%make-u8.16 u01 u02 u03 u04 u05 u06 u07 u08 u09 u10 u11 u12 u13 u14 u15 u16))
- (hi (sb-simd-avx::%make-u8.16 u17 u18 u19 u20 u21 u22 u23 u24 u25 u26 u27 u28 u29 u30 u31 u32)))
- (%u8.32-insert-u8.16 (sb-simd-avx::%u8.32!-from-p128 lo) hi 1)))
-
-(define-fake-vop u8.32-values (x)
- (multiple-value-call #'values
- (sb-simd-avx::%u8.16-values (sb-simd-avx::%u8.16!-from-p256 x))
- (sb-simd-avx::%u8.16-values (%u8.16-from-u8.32 x 1))))
-
-(define-fake-vop u8.32-broadcast (x)
- (%u8.32-broadcastvec (sb-simd-avx::%u8.32!-from-u8 x)))
-
-(define-fake-vop u8.32-not (a)
- (%u8.32-andc1
- a
- (%make-u8.32 +u8-true+ +u8-true+ +u8-true+ +u8-true+
- +u8-true+ +u8-true+ +u8-true+ +u8-true+
- +u8-true+ +u8-true+ +u8-true+ +u8-true+
- +u8-true+ +u8-true+ +u8-true+ +u8-true+
- +u8-true+ +u8-true+ +u8-true+ +u8-true+
- +u8-true+ +u8-true+ +u8-true+ +u8-true+
- +u8-true+ +u8-true+ +u8-true+ +u8-true+
- +u8-true+ +u8-true+ +u8-true+ +u8-true+)))
-
-(define-fake-vop two-arg-u8.32/= (a b)
- (%u8.32-not
- (%two-arg-u8.32= a b)))
-
-(define-fake-vop two-arg-u8.32> (a b)
- (let* ((x (expt 2 7))
- (v (%make-u8.32 x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x)))
- (%two-arg-u8.32>~ (%two-arg-u8.32- a v)
- (%two-arg-u8.32- b v))))
-
-(define-fake-vop two-arg-u8.32< (a b)
- (%two-arg-u8.32> b a))
-
-(define-fake-vop two-arg-u8.32>= (a b)
- (%u8.32-not
- (%two-arg-u8.32< a b)))
-
-(define-fake-vop two-arg-u8.32<= (a b)
- (%u8.32-not
- (%two-arg-u8.32> a b)))
-
-(define-fake-vop make-u16.16 (a b c d e f g h i j k l m n o p)
- (let ((lo (sb-simd-avx::%make-u16.8 a b c d e f g h))
- (hi (sb-simd-avx::%make-u16.8 i j k l m n o p)))
- (%u16.16-insert-u16.8 (sb-simd-avx::%u16.16!-from-p128 lo) hi 1)))
-
-(define-fake-vop u16.16-values (x)
- (multiple-value-call #'values
- (sb-simd-avx::%u16.8-values (sb-simd-avx::%u16.8!-from-p256 x))
- (sb-simd-avx::%u16.8-values (%u16.8-from-u16.16 x 1))))
-
-(define-fake-vop u16.16-broadcast (x)
- (%u16.16-broadcastvec (sb-simd-avx::%u16.16!-from-u16 x)))
-
-(define-fake-vop u16.16-not (a)
- (%u16.16-andc1
- a
- (%make-u16.16 +u16-true+ +u16-true+ +u16-true+ +u16-true+
- +u16-true+ +u16-true+ +u16-true+ +u16-true+
- +u16-true+ +u16-true+ +u16-true+ +u16-true+
- +u16-true+ +u16-true+ +u16-true+ +u16-true+)))
-
-(define-fake-vop two-arg-u16.16/= (a b)
- (%u16.16-not
- (%two-arg-u16.16= a b)))
-
-(define-fake-vop two-arg-u16.16> (a b)
- (let* ((x (expt 2 15))
- (v (%make-u16.16 x x x x x x x x x x x x x x x x)))
- (%two-arg-u16.16>~ (%two-arg-u16.16- a v)
- (%two-arg-u16.16- b v))))
-
-(define-fake-vop two-arg-u16.16< (a b)
- (%two-arg-u16.16> b a))
-
-(define-fake-vop two-arg-u16.16>= (a b)
- (%u16.16-not
- (%two-arg-u16.16< a b)))
-
-(define-fake-vop two-arg-u16.16<= (a b)
- (%u16.16-not
- (%two-arg-u16.16> a b)))
-
-(define-fake-vop u16.16-movemask (a)
- (u32-odd-bits
- (%u8.32-movemask
- (sb-simd-avx::%u8.32!-from-p256 a))))
-
-(define-fake-vop make-u32.8 (a b c d e f g h)
- (let ((lo (sb-simd-avx::%make-u32.4 a b c d))
- (hi (sb-simd-avx::%make-u32.4 e f g h)))
- (%u32.8-insert-u32.4 (sb-simd-avx::%u32.8!-from-p128 lo) hi 1)))
-
-(define-fake-vop u32.8-values (x)
- (multiple-value-call #'values
- (sb-simd-avx::%u32.4-values (sb-simd-avx::%u32.4!-from-p256 x))
- (sb-simd-avx::%u32.4-values (%u32.4-from-u32.8 x 1))))
-
-(define-fake-vop u32.8-broadcast (x)
- (%u32.8-broadcastvec (sb-simd-avx::%u32.8!-from-u32 x)))
-
-(define-fake-vop u32.8-not (a)
- (%u32.8-andc1
- a
- (%make-u32.8 +u32-true+ +u32-true+ +u32-true+ +u32-true+
- +u32-true+ +u32-true+ +u32-true+ +u32-true+)))
-
-(define-fake-vop two-arg-u32.8/= (a b)
- (%u32.8-not
- (%two-arg-u32.8= a b)))
-
-(define-fake-vop two-arg-u32.8> (a b)
- (let* ((x (expt 2 31))
- (v (%make-u32.8 x x x x x x x x)))
- (%two-arg-u32.8>~ (%two-arg-u32.8- a v)
- (%two-arg-u32.8- b v))))
-
-(define-fake-vop two-arg-u32.8< (a b)
- (%two-arg-u32.8> b a))
-
-(define-fake-vop two-arg-u32.8>= (a b)
- (%u32.8-not
- (%two-arg-u32.8< a b)))
-
-(define-fake-vop two-arg-u32.8<= (a b)
- (%u32.8-not
- (%two-arg-u32.8> a b)))
-
-(define-fake-vop make-u64.4 (a b c d)
- (let ((lo (sb-simd-avx::%make-u64.2 a b))
- (hi (sb-simd-avx::%make-u64.2 c d)))
- (%u64.4-insert-u64.2 (sb-simd-avx::%u64.4!-from-p128 lo) hi 1)))
-
-(define-fake-vop u64.4-values (x)
- (multiple-value-call #'values
- (sb-simd-avx::%u64.2-values (sb-simd-avx::%u64.2!-from-p256 x))
- (sb-simd-avx::%u64.2-values (%u64.2-from-u64.4 x 1))))
-
-(define-fake-vop u64.4-broadcast (x)
- (%u64.4-broadcastvec (sb-simd-avx::%u64.4!-from-u64 x)))
-
-(define-fake-vop u64.4-not (a)
- (%u64.4-andc1
- a
- (%make-u64.4 +u64-true+ +u64-true+ +u64-true+ +u64-true+)))
-
-(define-fake-vop two-arg-u64.4/= (a b)
- (%u64.4-not
- (%two-arg-u64.4= a b)))
-
-(define-fake-vop two-arg-u64.4> (a b)
- (let* ((x (expt 2 63))
- (v (%make-u64.4 x x x x)))
- (%two-arg-u64.4>~ (%two-arg-u64.4- a v)
- (%two-arg-u64.4- b v))))
-
-(define-fake-vop two-arg-u64.4< (a b)
- (%two-arg-u64.4> b a))
-
-(define-fake-vop two-arg-u64.4>= (a b)
- (%u64.4-not
- (%two-arg-u64.4< a b)))
-
-(define-fake-vop two-arg-u64.4<= (a b)
- (%u64.4-not
- (%two-arg-u64.4> a b)))
-
-(define-fake-vop make-s8.32
- (s01 s02 s03 s04 s05 s06 s07 s08 s09 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 s32)
- (let ((lo (sb-simd-avx::%make-s8.16 s01 s02 s03 s04 s05 s06 s07 s08 s09 s10 s11 s12 s13 s14 s15 s16))
- (hi (sb-simd-avx::%make-s8.16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 s32)))
- (%s8.32-insert-s8.16 (sb-simd-avx::%s8.32!-from-p128 lo) hi 1)))
-
-(define-fake-vop s8.32-values (x)
- (multiple-value-call #'values
- (sb-simd-avx::%s8.16-values (sb-simd-avx::%s8.16!-from-p256 x))
- (sb-simd-avx::%s8.16-values (%s8.16-from-s8.32 x 1))))
-
-(define-fake-vop s8.32-broadcast (x)
- (%s8.32-broadcastvec (sb-simd-avx::%s8.32!-from-s8 x)))
-
-(define-fake-vop s8.32-not (a)
- (%s8.32-andc1
- a
- (%make-s8.32 +s8-true+ +s8-true+ +s8-true+ +s8-true+
- +s8-true+ +s8-true+ +s8-true+ +s8-true+
- +s8-true+ +s8-true+ +s8-true+ +s8-true+
- +s8-true+ +s8-true+ +s8-true+ +s8-true+
- +s8-true+ +s8-true+ +s8-true+ +s8-true+
- +s8-true+ +s8-true+ +s8-true+ +s8-true+
- +s8-true+ +s8-true+ +s8-true+ +s8-true+
- +s8-true+ +s8-true+ +s8-true+ +s8-true+)))
-
-(define-fake-vop two-arg-s8.32/= (a b)
- (%u8.32-not
- (%two-arg-s8.32= a b)))
-
-(define-fake-vop two-arg-s8.32< (a b)
- (%two-arg-s8.32> b a))
-
-(define-fake-vop two-arg-s8.32>= (a b)
- (%u8.32-not
- (%two-arg-s8.32< a b)))
-
-(define-fake-vop two-arg-s8.32<= (a b)
- (%u8.32-not
- (%two-arg-s8.32> a b)))
-
-(define-fake-vop make-s16.16 (a b c d e f g h i j k l m n o p)
- (let ((lo (sb-simd-avx::%make-s16.8 a b c d e f g h))
- (hi (sb-simd-avx::%make-s16.8 i j k l m n o p)))
- (%s16.16-insert-s16.8 (sb-simd-avx::%s16.16!-from-p128 lo) hi 1)))
-
-(define-fake-vop s16.16-values (x)
- (multiple-value-call #'values
- (sb-simd-avx::%s16.8-values (sb-simd-avx::%s16.8!-from-p256 x))
- (sb-simd-avx::%s16.8-values (sb-simd-avx::%s16.8-from-s16.16 x 1))))
-
-(define-fake-vop s16.16-broadcast (x)
- (%s16.16-broadcastvec (sb-simd-avx::%s16.16!-from-s16 x)))
-
-(define-fake-vop s16.16-not (a)
- (%s16.16-andc1
- a
- (%make-s16.16 +s16-true+ +s16-true+ +s16-true+ +s16-true+
- +s16-true+ +s16-true+ +s16-true+ +s16-true+
- +s16-true+ +s16-true+ +s16-true+ +s16-true+
- +s16-true+ +s16-true+ +s16-true+ +s16-true+)))
-
-(define-fake-vop two-arg-s16.16/= (a b)
- (%u16.16-not
- (%two-arg-s16.16= a b)))
-
-(define-fake-vop two-arg-s16.16< (a b)
- (%two-arg-s16.16> b a))
-
-(define-fake-vop two-arg-s16.16>= (a b)
- (%u16.16-not
- (%two-arg-s16.16< a b)))
-
-(define-fake-vop two-arg-s16.16<= (a b)
- (%u16.16-not
- (%two-arg-s16.16> a b)))
-
-(define-fake-vop s16.16-movemask (a)
- (u32-odd-bits
- (%u8.32-movemask
- (sb-simd-avx::%u8.32!-from-p256 a))))
-
-(define-fake-vop make-s32.8 (a b c d e f g h)
- (let ((lo (sb-simd-avx::%make-s32.4 a b c d))
- (hi (sb-simd-avx::%make-s32.4 e f g h)))
- (%s32.8-insert-s32.4 (sb-simd-avx::%s32.8!-from-p128 lo) hi 1)))
-
-(define-fake-vop s32.8-values (x)
- (multiple-value-call #'values
- (sb-simd-avx::%s32.4-values (sb-simd-avx::%s32.4!-from-p256 x))
- (sb-simd-avx::%s32.4-values (sb-simd-avx::%s32.4-from-s32.8 x 1))))
-
-(define-fake-vop s32.8-broadcast (x)
- (%s32.8-broadcastvec (sb-simd-avx::%s32.8!-from-s32 x)))
-
-(define-fake-vop s32.8-not (a)
- (%s32.8-andc1
- a
- (%make-s32.8 +s32-true+ +s32-true+ +s32-true+ +s32-true+
- +s32-true+ +s32-true+ +s32-true+ +s32-true+)))
-
-(define-fake-vop two-arg-s32.8/= (a b)
- (%u32.8-not
- (%two-arg-s32.8= a b)))
-
-(define-fake-vop two-arg-s32.8< (a b)
- (%two-arg-s32.8> b a))
-
-(define-fake-vop two-arg-s32.8>= (a b)
- (%u32.8-not
- (%two-arg-s32.8< a b)))
-
-(define-fake-vop two-arg-s32.8<= (a b)
- (%u32.8-not
- (%two-arg-s32.8> a b)))
-
-(define-fake-vop make-s64.4 (a b c d)
- (let ((lo (sb-simd-avx::%make-s64.2 a b))
- (hi (sb-simd-avx::%make-s64.2 c d)))
- (%s64.4-insert-s64.2 (sb-simd-avx::%s64.4!-from-p128 lo) hi 1)))
-
-(define-fake-vop s64.4-values (x)
- (multiple-value-call #'values
- (sb-simd-avx::%s64.2-values (sb-simd-avx::%s64.2!-from-p256 x))
- (sb-simd-avx::%s64.2-values (%s64.2-from-s64.4 x 1))))
-
-(define-fake-vop s64.4-broadcast (x)
- (%s64.4-broadcastvec (sb-simd-avx::%s64.4!-from-s64 x)))
-
-(define-fake-vop s64.4-not (a)
- (%s64.4-andc1
- a
- (%make-s64.4 +s64-true+ +s64-true+ +s64-true+ +s64-true+)))
-
-(define-fake-vop two-arg-s64.4/= (a b)
- (%u64.4-not
- (%two-arg-s64.4= a b)))
-
-(define-fake-vop two-arg-s64.4< (a b)
- (%two-arg-s64.4> b a))
-
-(define-fake-vop two-arg-s64.4>= (a b)
- (%u64.4-not
- (%two-arg-s64.4< a b)))
-
-(define-fake-vop two-arg-s64.4<= (a b)
- (%u64.4-not
- (%two-arg-s64.4> a b)))
-
-(define-fake-vop f64.4-reverse (a)
- (%f64.4-permute4x64 a #b00011011))
-
-(in-package #:sb-simd-neon)
-
-(define-fake-vop f32.4-values (x)
- (values (%f32.4-lane-extract x 0)
- (%f32.4-lane-extract x 1)
- (%f32.4-lane-extract x 2)
- (%f32.4-lane-extract x 3)))
-
-(define-fake-vop make-f32.4 (x y z w)
- (let* ((t1 (%f32.4!-from-f32 x))
- (t2 (%f32.4-lane-insert t1 y 1))
- (t3 (%f32.4-lane-insert t2 z 2)))
- (%f32.4-lane-insert t3 w 3)))
-
-(define-fake-vop two-arg-f32.4/= (a b)
- (%u32.4-not
- (%two-arg-f32.4= a b)))
-
-(define-fake-vop two-arg-f32.4< (a b)
- (%two-arg-f32.4> b a))
-
-(define-fake-vop two-arg-f32.4<= (a b)
- (%two-arg-f32.4>= b a))
-
-(define-fake-vop f32.4-horizontal+ (x)
- (let ((tmp (%f32.4-pair+ x x)))
- ;; TODO: This could use the scalar faddp instead, avoiding the extraction.
- (%f32.4-lane-extract (%f32.4-pair+ tmp tmp) 0)))
-
-(define-fake-vop f32.4-andc1 (a b)
- (%f32.4-andc2 b a))
-
-(define-fake-vop f64.2-values (x)
- (values (%f64.2-lane-extract x 0)
- (%f64.2-lane-extract x 1)))
-
-(define-fake-vop make-f64.2 (x y)
- (%f64.2-lane-insert (%f64.2!-from-f64 x) y 1))
-
-(define-fake-vop two-arg-f64.2/= (a b)
- (%u64.2-not
- (%two-arg-f64.2= a b)))
-
-(define-fake-vop two-arg-f64.2< (a b)
- (%two-arg-f64.2> b a))
-
-(define-fake-vop two-arg-f64.2<= (a b)
- (%two-arg-f64.2>= b a))
-
-(define-fake-vop f64.2-andc1 (a b)
- (%f64.2-andc2 b a))
-
-(macrolet
- ((def (sign width count)
- (flet ((name (format-control &rest format-arguments)
- (intern (apply #'format nil format-control format-arguments)
- (find-package :sb-simd-neon))))
- (let ((make-args (loop for i from 0 below count
- collect (make-symbol (format nil "V~a" i))))
- (from (name "%~a~d.~d!-FROM-~a~d" sign width count sign width))
- (insert (name "%~a~d.~d-LANE-INSERT" sign width count))
- (extract (name "%~a~d.~d-LANE-EXTRACT" sign width count)))
- `(progn
- (define-fake-vop ,(name "MAKE-~a~d.~d" sign width count) ,make-args
- ,(loop with result = (list from (first make-args))
- for arg in (rest make-args)
- for i from 1
- do (setf result (list insert result arg i))
- finally (return result)))
- (define-fake-vop ,(name "~a~d.~d-VALUES" sign width count) (x)
- (values ,@(loop for i from 0 below count
- collect `(,extract x ,i))))
- (define-fake-vop ,(name "~a~d.~d-ANDC1" sign width count) (a b)
- (,(name "%~a~d.~d-ANDC2" sign width count) b a))
- (define-fake-vop ,(name "TWO-ARG-~a~d.~d/=" sign width count) (a b)
- (,(name "%U~d.~d-NOT" width count)
- (,(name "%TWO-ARG-~a~d.~d=" sign width count) a b)))
- (define-fake-vop ,(name "TWO-ARG-~a~d.~d<" sign width count) (a b)
- (,(name "%TWO-ARG-~a~d.~d>" sign width count) b a))
- (define-fake-vop ,(name "TWO-ARG-~a~d.~d<=" sign width count) (a b)
- (,(name "%TWO-ARG-~a~d.~d>=" sign width count) b a)))))))
- (def :u 8 16)
- (def :u 16 8)
- (def :u 32 4)
- (def :u 64 2)
- (def :s 8 16)
- (def :s 16 8)
- (def :s 32 4)
- (def :s 64 2))
-
-(define-fake-vop u64.2-pair-min (a b)
- (%make-u64.2 (sb-simd::%two-arg-u64-min (%u64.2-lane-extract a 0) (%u64.2-lane-extract a 1))
- (sb-simd::%two-arg-u64-min (%u64.2-lane-extract b 0) (%u64.2-lane-extract b 1))))
-
-(define-fake-vop u64.2-horizontal-min (a)
- (sb-simd::%two-arg-u64-min (%u64.2-lane-extract a 0) (%u64.2-lane-extract a 1)))
-
-(define-fake-vop u64.2-pair-max (a b)
- (%make-u64.2 (sb-simd::%two-arg-u64-max (%u64.2-lane-extract a 0) (%u64.2-lane-extract a 1))
- (sb-simd::%two-arg-u64-max (%u64.2-lane-extract b 0) (%u64.2-lane-extract b 1))))
-
-(define-fake-vop u64.2-horizontal-max (a)
- (sb-simd::%two-arg-u64-max (%u64.2-lane-extract a 0) (%u64.2-lane-extract a 1)))
-
-(define-fake-vop u64.2-pair+ (a b)
- (%make-u64.2 (sb-simd::%two-arg-u64+ (%u64.2-lane-extract a 0) (%u64.2-lane-extract a 1))
- (sb-simd::%two-arg-u64+ (%u64.2-lane-extract b 0) (%u64.2-lane-extract b 1))))
-
-(define-fake-vop u64.2-horizontal+ (a)
- (sb-simd::%two-arg-u64+ (%u64.2-lane-extract a 0) (%u64.2-lane-extract a 1)))
-
-(define-fake-vop s64.2-pair-min (a b)
- (%make-s64.2 (sb-simd::%two-arg-s64-min (%s64.2-lane-extract a 0) (%s64.2-lane-extract a 1))
- (sb-simd::%two-arg-s64-min (%s64.2-lane-extract b 0) (%s64.2-lane-extract b 1))))
-
-(define-fake-vop s64.2-horizontal-min (a)
- (sb-simd::%two-arg-s64-min (%s64.2-lane-extract a 0) (%s64.2-lane-extract a 1)))
-
-(define-fake-vop s64.2-pair-max (a b)
- (%make-s64.2 (sb-simd::%two-arg-s64-max (%s64.2-lane-extract a 0) (%s64.2-lane-extract a 1))
- (sb-simd::%two-arg-s64-max (%s64.2-lane-extract b 0) (%s64.2-lane-extract b 1))))
-
-(define-fake-vop s64.2-horizontal-max (a)
- (sb-simd::%two-arg-s64-max (%s64.2-lane-extract a 0) (%s64.2-lane-extract a 1)))
-
-(define-fake-vop s64.2-pair+ (a b)
- (%make-s64.2 (sb-simd::%two-arg-s64+ (%s64.2-lane-extract a 0) (%s64.2-lane-extract a 1))
- (sb-simd::%two-arg-s64+ (%s64.2-lane-extract b 0) (%s64.2-lane-extract b 1))))
-
-(define-fake-vop s64.2-horizontal+ (a)
- (sb-simd::%two-arg-s64+ (%s64.2-lane-extract a 0) (%s64.2-lane-extract a 1)))
diff --git a/contrib/sb-simd/code/define-modify-macros.lisp b/contrib/sb-simd/code/define-modify-macros.lisp
index b3e229151..2547274de 100644
--- a/contrib/sb-simd/code/define-modify-macros.lisp
+++ b/contrib/sb-simd/code/define-modify-macros.lisp
@@ -29,145 +29,3 @@
(define-modify-macro s64-incf (&optional (num 1)) two-arg-s64+)
(define-modify-macro s64-decf (&optional (num 1)) two-arg-s64-)
-
-(in-package #:sb-simd-sse)
-
-(define-modify-macro f32-incf (&optional (num 1f0)) two-arg-f32+)
-(define-modify-macro f32-decf (&optional (num 1f0)) two-arg-f32-)
-
-(define-modify-macro f32.4-incf (&optional (num 1f0)) two-arg-f32.4+)
-(define-modify-macro f32.4-decf (&optional (num 1f0)) two-arg-f32.4-)
-
-(in-package #:sb-simd-sse2)
-
-(define-modify-macro f64-incf (&optional (num 1d0)) two-arg-f64+)
-(define-modify-macro f64-decf (&optional (num 1d0)) two-arg-f64-)
-
-(define-modify-macro f64.2-incf (&optional (num 1d0)) two-arg-f64.2+)
-(define-modify-macro f64.2-decf (&optional (num 1d0)) two-arg-f64.2-)
-
-(define-modify-macro u8.16-incf (&optional (num 1)) two-arg-u8.16+)
-(define-modify-macro u8.16-decf (&optional (num 1)) two-arg-u8.16-)
-
-(define-modify-macro u16.8-incf (&optional (num 1)) two-arg-u16.8+)
-(define-modify-macro u16.8-decf (&optional (num 1)) two-arg-u16.8-)
-
-(define-modify-macro u32.4-incf (&optional (num 1)) two-arg-u32.4+)
-(define-modify-macro u32.4-decf (&optional (num 1)) two-arg-u32.4-)
-
-(define-modify-macro u64.2-incf (&optional (num 1)) two-arg-u64.2+)
-(define-modify-macro u64.2-decf (&optional (num 1)) two-arg-u64.2-)
-
-(define-modify-macro s8.16-incf (&optional (num 1)) two-arg-s8.16+)
-(define-modify-macro s8.16-decf (&optional (num 1)) two-arg-s8.16-)
-
-(define-modify-macro s16.8-incf (&optional (num 1)) two-arg-s16.8+)
-(define-modify-macro s16.8-decf (&optional (num 1)) two-arg-s16.8-)
-
-(define-modify-macro s32.4-incf (&optional (num 1)) two-arg-s32.4+)
-(define-modify-macro s32.4-decf (&optional (num 1)) two-arg-s32.4-)
-
-(define-modify-macro s64.2-incf (&optional (num 1)) two-arg-s64.2+)
-(define-modify-macro s64.2-decf (&optional (num 1)) two-arg-s64.2-)
-
-(in-package #:sb-simd-avx)
-
-(define-modify-macro f32-incf (&optional (num 1f0)) two-arg-f32+)
-(define-modify-macro f32-decf (&optional (num 1f0)) two-arg-f32-)
-
-(define-modify-macro f64-incf (&optional (num 1d0)) two-arg-f64+)
-(define-modify-macro f64-decf (&optional (num 1d0)) two-arg-f64-)
-
-(define-modify-macro f32.4-incf (&optional (num 1f0)) two-arg-f32.4+)
-(define-modify-macro f32.4-decf (&optional (num 1f0)) two-arg-f32.4-)
-
-(define-modify-macro f32.8-incf (&optional (num 1f0)) two-arg-f32.8+)
-(define-modify-macro f32.8-decf (&optional (num 1f0)) two-arg-f32.8-)
-
-(define-modify-macro f64.2-incf (&optional (num 1d0)) two-arg-f64.2+)
-(define-modify-macro f64.2-decf (&optional (num 1d0)) two-arg-f64.2-)
-
-(define-modify-macro f64.4-incf (&optional (num 1d0)) two-arg-f64.4+)
-(define-modify-macro f64.4-decf (&optional (num 1d0)) two-arg-f64.4-)
-
-(define-modify-macro u8.16-incf (&optional (num 1)) two-arg-u8.16+)
-(define-modify-macro u8.16-decf (&optional (num 1)) two-arg-u8.16-)
-
-(define-modify-macro u16.8-incf (&optional (num 1)) two-arg-u16.8+)
-(define-modify-macro u16.8-decf (&optional (num 1)) two-arg-u16.8-)
-
-(define-modify-macro u32.4-incf (&optional (num 1)) two-arg-u32.4+)
-(define-modify-macro u32.4-decf (&optional (num 1)) two-arg-u32.4-)
-
-(define-modify-macro u64.2-incf (&optional (num 1)) two-arg-u64.2+)
-(define-modify-macro u64.2-decf (&optional (num 1)) two-arg-u64.2-)
-
-(define-modify-macro s8.16-incf (&optional (num 1)) two-arg-s8.16+)
-(define-modify-macro s8.16-decf (&optional (num 1)) two-arg-s8.16-)
-
-(define-modify-macro s16.8-incf (&optional (num 1)) two-arg-s16.8+)
-(define-modify-macro s16.8-decf (&optional (num 1)) two-arg-s16.8-)
-
-(define-modify-macro s32.4-incf (&optional (num 1)) two-arg-s32.4+)
-(define-modify-macro s32.4-decf (&optional (num 1)) two-arg-s32.4-)
-
-(define-modify-macro s64.2-incf (&optional (num 1)) two-arg-s64.2+)
-(define-modify-macro s64.2-decf (&optional (num 1)) two-arg-s64.2-)
-
-(in-package #:sb-simd-avx2)
-
-(define-modify-macro u8.32-incf (&optional (num 1)) two-arg-u8.32+)
-(define-modify-macro u8.32-decf (&optional (num 1)) two-arg-u8.32-)
-
-(define-modify-macro u16.16-incf (&optional (num 1)) two-arg-u16.16+)
-(define-modify-macro u16.16-decf (&optional (num 1)) two-arg-u16.16-)
-
-(define-modify-macro u32.8-incf (&optional (num 1)) two-arg-u32.8+)
-(define-modify-macro u32.8-decf (&optional (num 1)) two-arg-u32.8-)
-
-(define-modify-macro u64.4-incf (&optional (num 1)) two-arg-u64.4+)
-(define-modify-macro u64.4-decf (&optional (num 1)) two-arg-u64.4-)
-
-(define-modify-macro s8.32-incf (&optional (num 1)) two-arg-s8.32+)
-(define-modify-macro s8.32-decf (&optional (num 1)) two-arg-s8.32-)
-
-(define-modify-macro s16.16-incf (&optional (num 1)) two-arg-s16.16+)
-(define-modify-macro s16.16-decf (&optional (num 1)) two-arg-s16.16-)
-
-(define-modify-macro s32.8-incf (&optional (num 1)) two-arg-s32.8+)
-(define-modify-macro s32.8-decf (&optional (num 1)) two-arg-s32.8-)
-
-(define-modify-macro s64.4-incf (&optional (num 1)) two-arg-s64.4+)
-(define-modify-macro s64.4-decf (&optional (num 1)) two-arg-s64.4-)
-
-(in-package #:sb-simd-neon)
-
-(define-modify-macro f32.4-incf (&optional (num 1f0)) two-arg-f32.4+)
-(define-modify-macro f32.4-decf (&optional (num 1f0)) two-arg-f32.4-)
-
-(define-modify-macro f64.2-incf (&optional (num 1d0)) two-arg-f64.2+)
-(define-modify-macro f64.2-decf (&optional (num 1d0)) two-arg-f64.2-)
-
-(define-modify-macro u8.16-incf (&optional (num 1)) two-arg-u8.16+)
-(define-modify-macro u8.16-decf (&optional (num 1)) two-arg-u8.16-)
-
-(define-modify-macro u16.8-incf (&optional (num 1)) two-arg-u16.8+)
-(define-modify-macro u16.8-decf (&optional (num 1)) two-arg-u16.8-)
-
-(define-modify-macro u32.4-incf (&optional (num 1)) two-arg-u32.4+)
-(define-modify-macro u32.4-decf (&optional (num 1)) two-arg-u32.4-)
-
-(define-modify-macro u64.2-incf (&optional (num 1)) two-arg-u64.2+)
-(define-modify-macro u64.2-decf (&optional (num 1)) two-arg-u64.2-)
-
-(define-modify-macro s8.16-incf (&optional (num 1)) two-arg-s8.16+)
-(define-modify-macro s8.16-decf (&optional (num 1)) two-arg-s8.16-)
-
-(define-modify-macro s16.8-incf (&optional (num 1)) two-arg-s16.8+)
-(define-modify-macro s16.8-decf (&optional (num 1)) two-arg-s16.8-)
-
-(define-modify-macro s32.4-incf (&optional (num 1)) two-arg-s32.4+)
-(define-modify-macro s32.4-decf (&optional (num 1)) two-arg-s32.4-)
-
-(define-modify-macro s64.2-incf (&optional (num 1)) two-arg-s64.2+)
-(define-modify-macro s64.2-decf (&optional (num 1)) two-arg-s64.2-)
diff --git a/contrib/sb-simd/code/define-scalar-casts.lisp b/contrib/sb-simd/code/define-scalar-casts.lisp
index 2f970d100..b813a96a6 100644
--- a/contrib/sb-simd/code/define-scalar-casts.lisp
+++ b/contrib/sb-simd/code/define-scalar-casts.lisp
@@ -37,21 +37,25 @@
(sb-simd:f64
`((sb-c:deftransform ,name ((x) (single-float) *)
'(coerce x 'double-float))))
+ #+x86-64
(sb-simd-sse:f32
`((sb-c:deftransform ,name ((x) (double-float) *)
'(sb-kernel:%single-float x))
(sb-c:deftransform ,name ((x) ((signed-byte 64)) *)
'(sb-simd-sse::f32-from-s64 x))))
+ #+x86-64
(sb-simd-sse2:f64
`((sb-c:deftransform ,name ((x) (single-float) *)
'(sb-simd-sse2::f64-from-f32 x))
(sb-c:deftransform ,name ((x) ((signed-byte 64)) *)
'(sb-simd-sse2::f64-from-s64 x))))
+ #+x86-64
(sb-simd-avx:f32
`((sb-c:deftransform ,name ((x) (double-float) *)
'(sb-simd-avx::f32-from-f64 x))
(sb-c:deftransform ,name ((x) ((signed-byte 64)) *)
'(sb-simd-avx::f32-from-s64 x))))
+ #+x86-64
(sb-simd-avx:f64
`((sb-c:deftransform ,name ((x) (single-float) *)
'(sb-simd-avx::f64-from-f32 x))
@@ -65,20 +69,25 @@
`((double-float (coerce x 'single-float))
(real (coerce x ',name))))
(sb-simd:f64
- `((sb-simd-sse2:f32 (coerce x 'double-float))
+ `(#+x86-64
+ (sb-simd-sse2:f32 (coerce x 'double-float))
(real (coerce x ',name))))
+ #+x86-64
(sb-simd-sse:f32
`((double-float (sb-kernel:%single-float x))
(sb-simd-sse:s64 (call-vop sb-simd-sse::f32-from-s64 x))
(real (coerce x ',name))))
+ #+x86-64
(sb-simd-sse2:f64
`((sb-simd-sse2:f32 (call-vop sb-simd-sse2::f64-from-f32 x))
(sb-simd-sse2:s64 (call-vop sb-simd-sse2::f64-from-s64 x))
(real (coerce x ',name))))
+ #+x86-64
(sb-simd-avx:f32
`((sb-simd-avx:f64 (call-vop sb-simd-avx::f32-from-f64 x))
(sb-simd-avx:s64 (call-vop sb-simd-avx::f32-from-s64 x))
(real (coerce x ',name))))
+ #+x86-64
(sb-simd-avx:f64
`((sb-simd-avx:f32 (call-vop sb-simd-avx::f64-from-f32 x))
(sb-simd-avx:s64 (call-vop sb-simd-avx::f64-from-s64 x))
diff --git a/contrib/sb-simd/code/define-simd-casts.lisp b/contrib/sb-simd/code/define-simd-casts.lisp
index e4f01a34e..9ff4080bb 100644
--- a/contrib/sb-simd/code/define-simd-casts.lisp
+++ b/contrib/sb-simd/code/define-simd-casts.lisp
@@ -13,9 +13,12 @@
;;; The pXXX SIMD types are special - we define their 'cast' function
;;; manually.
-(define-inline sb-simd-sse:p128 (x) (the sb-simd-sse:p128 x))
-(define-inline sb-simd-avx:p128 (x) (the sb-simd-avx:p128 x))
-(define-inline sb-simd-avx:p256 (x) (the sb-simd-avx:p256 x))
+#+x86-64
+(progn
+ (define-inline sb-simd-sse:p128 (x) (the sb-simd-sse:p128 x))
+ (define-inline sb-simd-avx:p128 (x) (the sb-simd-avx:p128 x))
+ (define-inline sb-simd-avx:p256 (x) (the sb-simd-avx:p256 x)))
+#+arm64
(define-inline sb-simd-neon:p128 (x) (the sb-simd-neon:p128 x))
(macrolet
diff --git a/contrib/sb-simd/code/packages.lisp b/contrib/sb-simd/code/packages.lisp
index 34e9d02f6..d28bdcc86 100644
--- a/contrib/sb-simd/code/packages.lisp
+++ b/contrib/sb-simd/code/packages.lisp
@@ -603,12 +603,14 @@
#:u16-odd-bits
#:u32-odd-bits))
+ #+x86-64
(defpackage #:sb-simd-x86-64
(:use #:common-lisp #:sb-simd-internals #:sb-simd)
#0#
#1=
(:export #:imm1 #:imm2 #:imm3 #:imm4 #:imm5 #:imm6 #:imm7 #:imm8))
+ #+x86-64
(defpackage #:sb-simd-sse
(:use #:common-lisp #:sb-simd-internals #:sb-simd-x86-64)
(:shadow
@@ -681,6 +683,7 @@
#:f32.4-aref #:f32.4-row-major-aref #:f32.4-sap-ref
#:f32.4-non-temporal-aref #:f32.4-non-temporal-row-major-aref #:f32.4-non-temporal-sap-ref))
+ #+x86-64
(defpackage #:sb-simd-sse2
(:use #:common-lisp #:sb-simd-internals #:sb-simd-sse)
(:shadow
@@ -987,6 +990,7 @@
#:s64.2-aref #:s64.2-row-major-aref #:s64.2-sap-ref
#:s64.2-non-temporal-aref #:s64.2-non-temporal-row-major-aref #:s64.2-non-temporal-sap-ref))
+ #+x86-64
(defpackage #:sb-simd-sse3
(:use #:common-lisp #:sb-simd-internals #:sb-simd-sse2)
#0#
@@ -1000,6 +1004,7 @@
#:f32.4-ldup
#:f64.2-hadd))
+ #+x86-64
(defpackage #:sb-simd-ssse3
(:use #:common-lisp #:sb-simd-internals #:sb-simd-sse3)
#0#
@@ -1027,6 +1032,7 @@
#:s32.4-hadd
#:s32.4-hsub))
+ #+x86-64
(defpackage #:sb-simd-sse4.1
(:use #:common-lisp #:sb-simd-internals #:sb-simd-ssse3)
(:shadow
@@ -1107,6 +1113,7 @@
#:s64.2/=
#:s64.2-elt))
+ #+x86-64
(defpackage #:sb-simd-sse4.2
(:use #:common-lisp #:sb-simd-internals #:sb-simd-sse4.1)
#0#
@@ -1129,6 +1136,7 @@
#:s64.2<
#:s64.2<=))
+ #+x86-64
(defpackage #:sb-simd-avx
(:use #:common-lisp #:sb-simd-internals #:sb-simd-x86-64)
#0#
@@ -1734,6 +1742,7 @@
#:s64.4-aref #:s64.4-row-major-aref #:s64.4-sap-ref
#:s64.4-non-temporal-aref #:s64.4-non-temporal-row-major-aref #:s64.4-non-temporal-sap-ref))
+ #+x86-64
(defpackage #:sb-simd-avx2
(:use #:common-lisp #:sb-simd-internals #:sb-simd-avx)
(:shadow
@@ -2065,6 +2074,7 @@
#:s64.4-incf
#:s64.4-decf))
+ #+x86-64
(defpackage #:sb-simd-fma
(:use #:common-lisp #:sb-simd-internals #:sb-simd-avx2)
#0#
@@ -2110,12 +2120,14 @@
#:f64.4-fmaddsub
#:f64.4-fmsubadd))
+ #+arm64
(defpackage #:sb-simd-arm64
(:use #:common-lisp #:sb-simd-internals #:sb-simd)
#0#
#11=
(:export #:imm1 #:imm2 #:imm3 #:imm4 #:imm5 #:imm6 #:imm7 #:imm8))
+ #+arm64
(defpackage #:sb-simd-neon
(:use #:common-lisp #:sb-simd-internals #:sb-simd-arm64)
#0#
@@ -2660,4 +2672,5 @@
"SB-SIMD-INTERNALS" "SB-SIMD-SSE" "SB-SIMD-SSE2"
"SB-SIMD-SSE3" "SB-SIMD-SSE4.1" "SB-SIMD-SSE4.2"
"SB-SIMD-SSSE3" "SB-SIMD-X86-64"))
- (setf (sb-int:system-package-p (find-package p)) t))
+ (when (find-package p)
+ (setf (sb-int:system-package-p (find-package p)) t)))
diff --git a/contrib/sb-simd/code/define-fake-vops.lisp b/contrib/sb-simd/code/x86-64-fake-vops.lisp
similarity index 67%
copy from contrib/sb-simd/code/define-fake-vops.lisp
copy to contrib/sb-simd/code/x86-64-fake-vops.lisp
index 3121b753e..8f657ce95 100644
--- a/contrib/sb-simd/code/define-fake-vops.lisp
+++ b/contrib/sb-simd/code/x86-64-fake-vops.lisp
@@ -1,378 +1,3 @@
-(in-package #:sb-simd-internals)
-
-;;; Primitives with a :NONE encoding do not define a VOP. Instead, we
-;;; define a fake VOP - a regular function that has the name of the VOP
-;;; that would have been generated if the encoding wasn't :NONE. Fake VOPs
-;;; are useful for defining instructions that we would like to have in the
-;;; instruction set, and that can be expressed easily in terms of the other
-;;; VOPs.
-
-(defmacro define-fake-vop (name lambda-list &body body)
- (with-accessors ((vop instruction-record-vop)
- (result-records instruction-record-result-records)
- (argument-records instruction-record-argument-records)
- (instruction-set instruction-record-instruction-set))
- (find-function-record name)
- (assert (= (length lambda-list)
- (length argument-records)))
- (assert (null (intersection lambda-list lambda-list-keywords)))
- (when (instruction-set-available-p instruction-set)
- `(define-inline ,vop ,lambda-list
- (declare (optimize (safety 0) (debug 0)))
- (declare
- ,@(loop for argument-record in argument-records
- for argument in lambda-list
- collect `(type ,(value-record-name argument-record) ,argument)))
- (the (values ,@(mapcar #'value-record-name result-records) &optional)
- (progn ,@body))))))
-
-(defmacro define-trivial-fake-vop (name operator &key key result-key)
- (let* ((record (find-function-record name))
- (arity (length (instruction-record-argument-records record)))
- (args (prefixed-symbols "ARG" arity)))
- (assert (= 1 (length (instruction-record-result-records record))))
- (flet ((wrap (key expr)
- (if (null key) expr `(,key ,expr))))
- `(define-fake-vop ,name ,args
- ,(wrap result-key `(,operator ,@(loop for arg in args collect (wrap key arg))))))))
-
-(in-package #:sb-simd)
-
-(macrolet ((define-u64-packer (name scalar-record-name)
- (with-accessors ((type value-record-name)
- (bits value-record-bits))
- (find-value-record scalar-record-name)
- (let ((args (prefixed-symbols "ARG" (the integer (/ 64 bits)))))
- `(define-fake-vop ,name ,args
- (logior
- ,@(loop for arg in args
- for position from 0 by bits
- collect `(dpb ,arg (byte ,bits ,position) 0))))))))
- (define-u64-packer u64-from-u8s u8)
- (define-u64-packer u64-from-u16s u16)
- (define-u64-packer u64-from-u32s u32)
- (define-u64-packer u64-from-s8s s8)
- (define-u64-packer u64-from-s16s s16)
- (define-u64-packer u64-from-s32s s32)
- (define-u64-packer u64-from-s64 s64))
-
-(define-fake-vop s32-from-f32 (x)
- (multiple-value-bind (significant exponent sign)
- (integer-decode-float x)
- (let* ((abs (* significant (expt (float-radix x) exponent))))
- (if (minusp sign)
- (- (min abs (expt 2 31)))
- (min abs (1- (expt 2 31)))))))
-
-(define-fake-vop s32-from-f64 (x)
- (multiple-value-bind (significant exponent sign)
- (integer-decode-float x)
- (let* ((abs (* significant (expt (float-radix x) exponent))))
- (if (minusp sign)
- (- (min abs (expt 2 31)))
- (min abs (1- (expt 2 31)))))))
-
-(macrolet ((define-u64-unpacker (name scalar-record-name)
- (with-accessors ((type value-record-name)
- (bits value-record-bits))
- (find-value-record scalar-record-name)
- `(define-fake-vop ,name (x)
- (values
- ,@ (loop repeat (/ 64 bits)
- for position from 0 by bits
- collect
- (if (subtypep type 'unsigned-byte)
- `(ldb (byte ,bits ,position) x)
- `(- (mod (+ (ldb (byte ,bits ,position) x)
- ,(expt 2 (1- bits)))
- ,(expt 2 bits))
- ,(expt 2 (1- bits))))))))))
-
- (define-u64-unpacker u8s-from-u64 u8)
- (define-u64-unpacker u16s-from-u64 u16)
- (define-u64-unpacker u32s-from-u64 u32)
- (define-u64-unpacker s8s-from-u64 s8)
- (define-u64-unpacker s16s-from-u64 s16)
- (define-u64-unpacker s32s-from-u64 s32)
- (define-u64-unpacker s64-from-u64 s64))
-
-(macrolet ((define-deboolifier (name true false)
- `(define-inline ,name (expr) (if expr ,true ,false))))
- (define-deboolifier u8-from-boolean +u8-true+ +u8-false+)
- (define-deboolifier u16-from-boolean +u16-true+ +u16-false+)
- (define-deboolifier u32-from-boolean +u32-true+ +u32-false+)
- (define-deboolifier u64-from-boolean +u64-true+ +u64-false+))
-
-(defun u16-odd-bits (x)
- (declare (type (unsigned-byte 16) x))
- (setf x (logand (ash x -1) #x5555))
- (setf x (logand (logior (ash x -1) x) #x3333))
- (setf x (logand (logior (ash x -2) x) #x0F0F))
- (setf x (logand (logior (ash x -4) x) #x00FF))
- x)
-
-(defun u32-odd-bits (x)
- (declare (type (unsigned-byte 32) x))
- (setf x (logand (ash x -1) #x55555555))
- (setf x (logand (logior (ash x -1) x) #x33333333))
- (setf x (logand (logior (ash x -2) x) #x0F0F0F0F))
- (setf x (logand (logior (ash x -4) x) #x00FF00FF))
- (setf x (logand (logior (ash x -8) x) #x0000FFFF))
- x)
-
-;;; f32
-
-(define-fake-vop f32-reciprocal (x)
- (/ x))
-
-(define-fake-vop f32-rsqrt (x)
- (/ (sqrt x)))
-
-(define-fake-vop f32-if (mask a b)
- (if (logbitp 31 mask) a b))
-
-(macrolet ((def (name op &rest keywords) `(define-trivial-fake-vop ,name ,op ,@keywords)))
- (def two-arg-f32-and logand :key sb-kernel:single-float-bits :result-key sb-kernel:make-single-float)
- (def two-arg-f32-or logior :key sb-kernel:single-float-bits :result-key sb-kernel:make-single-float)
- (def two-arg-f32-xor logxor :key sb-kernel:single-float-bits :result-key sb-kernel:make-single-float)
- (def f32-andc1 logandc1 :key sb-kernel:single-float-bits :result-key sb-kernel:make-single-float)
- (def f32-not lognot :key sb-kernel:single-float-bits :result-key sb-kernel:make-single-float)
- (def two-arg-f32-min min)
- (def two-arg-f32-max max)
- (def two-arg-f32+ +)
- (def two-arg-f32- -)
- (def two-arg-f32* *)
- (def two-arg-f32/ /)
- (def f32-sqrt sqrt)
- (def two-arg-f32= = :result-key u32-from-boolean)
- (def two-arg-f32/= /= :result-key u32-from-boolean)
- (def two-arg-f32< < :result-key u32-from-boolean)
- (def two-arg-f32<= <= :result-key u32-from-boolean)
- (def two-arg-f32> > :result-key u32-from-boolean)
- (def two-arg-f32>= >= :result-key u32-from-boolean))
-
-;;; f64
-
-(define-fake-vop f64-reciprocal (x)
- (/ x))
-
-(define-fake-vop f64-rsqrt (x)
- (/ (sqrt x)))
-
-(define-fake-vop f64-if (mask a b)
- (if (logbitp 63 mask) a b))
-
-(macrolet ((def (name logical-operation)
- (let* ((record (find-function-record name))
- (arity (length (instruction-record-argument-records record)))
- (args (prefixed-symbols "ARG" arity)))
- `(define-fake-vop ,name ,args
- (let ((bits
- (,logical-operation
- ,@(loop for arg in args
- collect `(sb-kernel:double-float-bits ,arg)))))
- (sb-kernel:make-double-float
- (ash bits -32)
- (ldb (byte 32 0) bits)))))))
- (def two-arg-f64-and logand)
- (def two-arg-f64-or logior)
- (def two-arg-f64-xor logxor)
- (def f64-andc1 logandc1)
- (def f64-not lognot))
-
-(macrolet ((def (name op &rest keywords) `(define-trivial-fake-vop ,name ,op ,@keywords)))
- (def two-arg-f64-min min)
- (def two-arg-f64-max max)
- (def two-arg-f64+ +)
- (def two-arg-f64- -)
- (def two-arg-f64* *)
- (def two-arg-f64/ /)
- (def f64-sqrt sqrt)
- (def two-arg-f64= = :result-key u64-from-boolean)
- (def two-arg-f64/= /= :result-key u64-from-boolean)
- (def two-arg-f64< < :result-key u64-from-boolean)
- (def two-arg-f64<= <= :result-key u64-from-boolean)
- (def two-arg-f64> > :result-key u64-from-boolean)
- (def two-arg-f64>= >= :result-key u64-from-boolean))
-
-;;; integer operations
-
-;;; In contrast to the floating-point conditional selection operations,
-;;; those for integers always operate with byte granularity.
-(macrolet ((def (name maskbits)
- `(define-fake-vop ,name (mask a b)
- (logior
- ,@(loop for offset from 0 by 8 below maskbits
- collect
- `(if (logbitp ,(+ offset 7) mask)
- (mask-field (byte 8 ,offset) a)
- (mask-field (byte 8 ,offset) b)))))))
- (def u8-if 8)
- (def u16-if 16)
- (def u32-if 32)
- (def u64-if 64))
-
-(macrolet ((def (name bits u-if)
- `(define-fake-vop ,name (mask a b)
- (let ((u (,u-if mask (dpb a (byte ,bits 0) 0) (dpb b (byte ,bits 0) 0))))
- (- (mod (+ (ldb (byte ,bits 0) u) ,(expt 2 (1- bits)))
- ,(expt 2 bits))
- ,(expt 2 (1- bits)))))))
- (def s8-if 8 %u8-if)
- (def s16-if 16 %u16-if)
- (def s32-if 32 %u32-if)
- (def s64-if 64 %u64-if))
-
-(macrolet ((def (name bits)
- `(define-inline ,name (integer)
- (declare (integer integer))
- (mod integer ,(expt 2 bits)))))
- (def u8-wrap 8)
- (def u16-wrap 16)
- (def u32-wrap 32)
- (def u64-wrap 64))
-
-(macrolet ((def (name bits)
- (let ((offset (expt 2 (1- bits))))
- `(define-inline ,name (integer)
- (declare (integer integer))
- (- (mod (+ integer ,offset) ,(expt 2 bits))
- ,offset)))))
- (def s8-wrap 8)
- (def s16-wrap 16)
- (def s32-wrap 32)
- (def s64-wrap 64))
-
-(macrolet ((def (name op &rest keywords) `(define-trivial-fake-vop ,name ,op ,@keywords)))
- ;; u8
- (def two-arg-u8-and logand)
- (def two-arg-u8-or logior)
- (def two-arg-u8-xor logxor)
- (def two-arg-u8-max max)
- (def two-arg-u8-min min)
- (def two-arg-u8+ + :result-key u8-wrap)
- (def two-arg-u8- - :result-key u8-wrap)
- (def two-arg-u8= = :result-key u8-from-boolean)
- (def two-arg-u8/= /= :result-key u8-from-boolean)
- (def two-arg-u8< < :result-key u8-from-boolean)
- (def two-arg-u8<= <= :result-key u8-from-boolean)
- (def two-arg-u8> > :result-key u8-from-boolean)
- (def two-arg-u8>= >= :result-key u8-from-boolean)
- (def u8-andc1 logandc1)
- (def u8-not lognot :result-key u8-wrap)
- ;; u16
- (def two-arg-u16-and logand)
- (def two-arg-u16-or logior)
- (def two-arg-u16-xor logxor)
- (def two-arg-u16-max max)
- (def two-arg-u16-min min)
- (def two-arg-u16+ + :result-key u16-wrap)
- (def two-arg-u16- - :result-key u16-wrap)
- (def two-arg-u16= = :result-key u16-from-boolean)
- (def two-arg-u16/= /= :result-key u16-from-boolean)
- (def two-arg-u16< < :result-key u16-from-boolean)
- (def two-arg-u16<= <= :result-key u16-from-boolean)
- (def two-arg-u16> > :result-key u16-from-boolean)
- (def two-arg-u16>= >= :result-key u16-from-boolean)
- (def u16-andc1 logandc1)
- (def u16-not lognot :result-key u16-wrap)
- ;; u32
- (def two-arg-u32-and logand)
- (def two-arg-u32-or logior)
- (def two-arg-u32-xor logxor)
- (def two-arg-u32-max max)
- (def two-arg-u32-min min)
- (def two-arg-u32+ + :result-key u32-wrap)
- (def two-arg-u32- - :result-key u32-wrap)
- (def two-arg-u32= = :result-key u32-from-boolean)
- (def two-arg-u32/= /= :result-key u32-from-boolean)
- (def two-arg-u32< < :result-key u32-from-boolean)
- (def two-arg-u32<= <= :result-key u32-from-boolean)
- (def two-arg-u32> > :result-key u32-from-boolean)
- (def two-arg-u32>= >= :result-key u32-from-boolean)
- (def u32-andc1 logandc1)
- (def u32-not lognot :result-key u32-wrap)
- ;; u64
- (def two-arg-u64-and logand)
- (def two-arg-u64-or logior)
- (def two-arg-u64-xor logxor)
- (def two-arg-u64-max max)
- (def two-arg-u64-min min)
- (def two-arg-u64+ + :result-key u64-wrap)
- (def two-arg-u64- - :result-key u64-wrap)
- (def two-arg-u64= = :result-key u64-from-boolean)
- (def two-arg-u64/= /= :result-key u64-from-boolean)
- (def two-arg-u64< < :result-key u64-from-boolean)
- (def two-arg-u64<= <= :result-key u64-from-boolean)
- (def two-arg-u64> > :result-key u64-from-boolean)
- (def two-arg-u64>= >= :result-key u64-from-boolean)
- (def u64-andc1 logandc1)
- (def u64-not lognot :result-key u64-wrap)
- ;; s8
- (def two-arg-s8-and logand)
- (def two-arg-s8-or logior)
- (def two-arg-s8-xor logxor)
- (def two-arg-s8-max max)
- (def two-arg-s8-min min)
- (def two-arg-s8+ + :result-key s8-wrap)
- (def two-arg-s8- - :result-key s8-wrap)
- (def two-arg-s8= = :result-key u8-from-boolean)
- (def two-arg-s8/= /= :result-key u8-from-boolean)
- (def two-arg-s8< < :result-key u8-from-boolean)
- (def two-arg-s8<= <= :result-key u8-from-boolean)
- (def two-arg-s8> > :result-key u8-from-boolean)
- (def two-arg-s8>= >= :result-key u8-from-boolean)
- (def s8-andc1 logandc1)
- (def s8-not lognot :result-key s8-wrap)
- ;; s16
- (def two-arg-s16-and logand)
- (def two-arg-s16-or logior)
- (def two-arg-s16-xor logxor)
- (def two-arg-s16-max max)
- (def two-arg-s16-min min)
- (def two-arg-s16+ + :result-key s16-wrap)
- (def two-arg-s16- - :result-key s16-wrap)
- (def two-arg-s16= = :result-key u16-from-boolean)
- (def two-arg-s16/= /= :result-key u16-from-boolean)
- (def two-arg-s16< < :result-key u16-from-boolean)
- (def two-arg-s16<= <= :result-key u16-from-boolean)
- (def two-arg-s16> > :result-key u16-from-boolean)
- (def two-arg-s16>= >= :result-key u16-from-boolean)
- (def s16-andc1 logandc1)
- (def s16-not lognot :result-key s16-wrap)
- ;; s32
- (def two-arg-s32-and logand)
- (def two-arg-s32-or logior)
- (def two-arg-s32-xor logxor)
- (def two-arg-s32-max max)
- (def two-arg-s32-min min)
- (def two-arg-s32+ + :result-key s32-wrap)
- (def two-arg-s32- - :result-key s32-wrap)
- (def two-arg-s32= = :result-key u32-from-boolean)
- (def two-arg-s32/= /= :result-key u32-from-boolean)
- (def two-arg-s32< < :result-key u32-from-boolean)
- (def two-arg-s32<= <= :result-key u32-from-boolean)
- (def two-arg-s32> > :result-key u32-from-boolean)
- (def two-arg-s32>= >= :result-key u32-from-boolean)
- (def s32-andc1 logandc1)
- (def s32-not lognot :result-key s32-wrap)
- ;; s64
- (def two-arg-s64-and logand)
- (def two-arg-s64-or logior)
- (def two-arg-s64-xor logxor)
- (def two-arg-s64-max max)
- (def two-arg-s64-min min)
- (def two-arg-s64+ + :result-key s64-wrap)
- (def two-arg-s64- - :result-key s64-wrap)
- (def two-arg-s64= = :result-key u64-from-boolean)
- (def two-arg-s64/= /= :result-key u64-from-boolean)
- (def two-arg-s64< < :result-key u64-from-boolean)
- (def two-arg-s64<= <= :result-key u64-from-boolean)
- (def two-arg-s64> > :result-key u64-from-boolean)
- (def two-arg-s64>= >= :result-key u64-from-boolean)
- (def s64-andc1 logandc1)
- (def s64-not lognot :result-key s64-wrap))
-
(in-package #:sb-simd-sse)
(define-fake-vop f32-not (a)
@@ -1739,135 +1364,3 @@
(define-fake-vop f64.4-reverse (a)
(%f64.4-permute4x64 a #b00011011))
-
-(in-package #:sb-simd-neon)
-
-(define-fake-vop f32.4-values (x)
- (values (%f32.4-lane-extract x 0)
- (%f32.4-lane-extract x 1)
- (%f32.4-lane-extract x 2)
- (%f32.4-lane-extract x 3)))
-
-(define-fake-vop make-f32.4 (x y z w)
- (let* ((t1 (%f32.4!-from-f32 x))
- (t2 (%f32.4-lane-insert t1 y 1))
- (t3 (%f32.4-lane-insert t2 z 2)))
- (%f32.4-lane-insert t3 w 3)))
-
-(define-fake-vop two-arg-f32.4/= (a b)
- (%u32.4-not
- (%two-arg-f32.4= a b)))
-
-(define-fake-vop two-arg-f32.4< (a b)
- (%two-arg-f32.4> b a))
-
-(define-fake-vop two-arg-f32.4<= (a b)
- (%two-arg-f32.4>= b a))
-
-(define-fake-vop f32.4-horizontal+ (x)
- (let ((tmp (%f32.4-pair+ x x)))
- ;; TODO: This could use the scalar faddp instead, avoiding the extraction.
- (%f32.4-lane-extract (%f32.4-pair+ tmp tmp) 0)))
-
-(define-fake-vop f32.4-andc1 (a b)
- (%f32.4-andc2 b a))
-
-(define-fake-vop f64.2-values (x)
- (values (%f64.2-lane-extract x 0)
- (%f64.2-lane-extract x 1)))
-
-(define-fake-vop make-f64.2 (x y)
- (%f64.2-lane-insert (%f64.2!-from-f64 x) y 1))
-
-(define-fake-vop two-arg-f64.2/= (a b)
- (%u64.2-not
- (%two-arg-f64.2= a b)))
-
-(define-fake-vop two-arg-f64.2< (a b)
- (%two-arg-f64.2> b a))
-
-(define-fake-vop two-arg-f64.2<= (a b)
- (%two-arg-f64.2>= b a))
-
-(define-fake-vop f64.2-andc1 (a b)
- (%f64.2-andc2 b a))
-
-(macrolet
- ((def (sign width count)
- (flet ((name (format-control &rest format-arguments)
- (intern (apply #'format nil format-control format-arguments)
- (find-package :sb-simd-neon))))
- (let ((make-args (loop for i from 0 below count
- collect (make-symbol (format nil "V~a" i))))
- (from (name "%~a~d.~d!-FROM-~a~d" sign width count sign width))
- (insert (name "%~a~d.~d-LANE-INSERT" sign width count))
- (extract (name "%~a~d.~d-LANE-EXTRACT" sign width count)))
- `(progn
- (define-fake-vop ,(name "MAKE-~a~d.~d" sign width count) ,make-args
- ,(loop with result = (list from (first make-args))
- for arg in (rest make-args)
- for i from 1
- do (setf result (list insert result arg i))
- finally (return result)))
- (define-fake-vop ,(name "~a~d.~d-VALUES" sign width count) (x)
- (values ,@(loop for i from 0 below count
- collect `(,extract x ,i))))
- (define-fake-vop ,(name "~a~d.~d-ANDC1" sign width count) (a b)
- (,(name "%~a~d.~d-ANDC2" sign width count) b a))
- (define-fake-vop ,(name "TWO-ARG-~a~d.~d/=" sign width count) (a b)
- (,(name "%U~d.~d-NOT" width count)
- (,(name "%TWO-ARG-~a~d.~d=" sign width count) a b)))
- (define-fake-vop ,(name "TWO-ARG-~a~d.~d<" sign width count) (a b)
- (,(name "%TWO-ARG-~a~d.~d>" sign width count) b a))
- (define-fake-vop ,(name "TWO-ARG-~a~d.~d<=" sign width count) (a b)
- (,(name "%TWO-ARG-~a~d.~d>=" sign width count) b a)))))))
- (def :u 8 16)
- (def :u 16 8)
- (def :u 32 4)
- (def :u 64 2)
- (def :s 8 16)
- (def :s 16 8)
- (def :s 32 4)
- (def :s 64 2))
-
-(define-fake-vop u64.2-pair-min (a b)
- (%make-u64.2 (sb-simd::%two-arg-u64-min (%u64.2-lane-extract a 0) (%u64.2-lane-extract a 1))
- (sb-simd::%two-arg-u64-min (%u64.2-lane-extract b 0) (%u64.2-lane-extract b 1))))
-
-(define-fake-vop u64.2-horizontal-min (a)
- (sb-simd::%two-arg-u64-min (%u64.2-lane-extract a 0) (%u64.2-lane-extract a 1)))
-
-(define-fake-vop u64.2-pair-max (a b)
- (%make-u64.2 (sb-simd::%two-arg-u64-max (%u64.2-lane-extract a 0) (%u64.2-lane-extract a 1))
- (sb-simd::%two-arg-u64-max (%u64.2-lane-extract b 0) (%u64.2-lane-extract b 1))))
-
-(define-fake-vop u64.2-horizontal-max (a)
- (sb-simd::%two-arg-u64-max (%u64.2-lane-extract a 0) (%u64.2-lane-extract a 1)))
-
-(define-fake-vop u64.2-pair+ (a b)
- (%make-u64.2 (sb-simd::%two-arg-u64+ (%u64.2-lane-extract a 0) (%u64.2-lane-extract a 1))
- (sb-simd::%two-arg-u64+ (%u64.2-lane-extract b 0) (%u64.2-lane-extract b 1))))
-
-(define-fake-vop u64.2-horizontal+ (a)
- (sb-simd::%two-arg-u64+ (%u64.2-lane-extract a 0) (%u64.2-lane-extract a 1)))
-
-(define-fake-vop s64.2-pair-min (a b)
- (%make-s64.2 (sb-simd::%two-arg-s64-min (%s64.2-lane-extract a 0) (%s64.2-lane-extract a 1))
- (sb-simd::%two-arg-s64-min (%s64.2-lane-extract b 0) (%s64.2-lane-extract b 1))))
-
-(define-fake-vop s64.2-horizontal-min (a)
- (sb-simd::%two-arg-s64-min (%s64.2-lane-extract a 0) (%s64.2-lane-extract a 1)))
-
-(define-fake-vop s64.2-pair-max (a b)
- (%make-s64.2 (sb-simd::%two-arg-s64-max (%s64.2-lane-extract a 0) (%s64.2-lane-extract a 1))
- (sb-simd::%two-arg-s64-max (%s64.2-lane-extract b 0) (%s64.2-lane-extract b 1))))
-
-(define-fake-vop s64.2-horizontal-max (a)
- (sb-simd::%two-arg-s64-max (%s64.2-lane-extract a 0) (%s64.2-lane-extract a 1)))
-
-(define-fake-vop s64.2-pair+ (a b)
- (%make-s64.2 (sb-simd::%two-arg-s64+ (%s64.2-lane-extract a 0) (%s64.2-lane-extract a 1))
- (sb-simd::%two-arg-s64+ (%s64.2-lane-extract b 0) (%s64.2-lane-extract b 1))))
-
-(define-fake-vop s64.2-horizontal+ (a)
- (sb-simd::%two-arg-s64+ (%s64.2-lane-extract a 0) (%s64.2-lane-extract a 1)))
diff --git a/contrib/sb-simd/code/define-modify-macros.lisp b/contrib/sb-simd/code/x86-64-modify-macros.lisp
similarity index 63%
copy from contrib/sb-simd/code/define-modify-macros.lisp
copy to contrib/sb-simd/code/x86-64-modify-macros.lisp
index b3e229151..22b961f4e 100644
--- a/contrib/sb-simd/code/define-modify-macros.lisp
+++ b/contrib/sb-simd/code/x86-64-modify-macros.lisp
@@ -1,35 +1,3 @@
-(in-package #:sb-simd)
-
-(define-modify-macro f32-incf (&optional (num 1f0)) two-arg-f32+)
-(define-modify-macro f32-decf (&optional (num 1f0)) two-arg-f32-)
-
-(define-modify-macro f64-incf (&optional (num 1d0)) two-arg-f64+)
-(define-modify-macro f64-decf (&optional (num 1d0)) two-arg-f64-)
-
-(define-modify-macro u8-incf (&optional (num 1)) two-arg-u8+)
-(define-modify-macro u8-decf (&optional (num 1)) two-arg-u8-)
-
-(define-modify-macro u16-incf (&optional (num 1)) two-arg-u16+)
-(define-modify-macro u16-decf (&optional (num 1)) two-arg-u16-)
-
-(define-modify-macro u32-incf (&optional (num 1)) two-arg-u32+)
-(define-modify-macro u32-decf (&optional (num 1)) two-arg-u32-)
-
-(define-modify-macro u64-incf (&optional (num 1)) two-arg-u64+)
-(define-modify-macro u64-decf (&optional (num 1)) two-arg-u64-)
-
-(define-modify-macro s8-incf (&optional (num 1)) two-arg-s8+)
-(define-modify-macro s8-decf (&optional (num 1)) two-arg-s8-)
-
-(define-modify-macro s16-incf (&optional (num 1)) two-arg-s16+)
-(define-modify-macro s16-decf (&optional (num 1)) two-arg-s16-)
-
-(define-modify-macro s32-incf (&optional (num 1)) two-arg-s32+)
-(define-modify-macro s32-decf (&optional (num 1)) two-arg-s32-)
-
-(define-modify-macro s64-incf (&optional (num 1)) two-arg-s64+)
-(define-modify-macro s64-decf (&optional (num 1)) two-arg-s64-)
-
(in-package #:sb-simd-sse)
(define-modify-macro f32-incf (&optional (num 1f0)) two-arg-f32+)
@@ -139,35 +107,3 @@
(define-modify-macro s64.4-incf (&optional (num 1)) two-arg-s64.4+)
(define-modify-macro s64.4-decf (&optional (num 1)) two-arg-s64.4-)
-
-(in-package #:sb-simd-neon)
-
-(define-modify-macro f32.4-incf (&optional (num 1f0)) two-arg-f32.4+)
-(define-modify-macro f32.4-decf (&optional (num 1f0)) two-arg-f32.4-)
-
-(define-modify-macro f64.2-incf (&optional (num 1d0)) two-arg-f64.2+)
-(define-modify-macro f64.2-decf (&optional (num 1d0)) two-arg-f64.2-)
-
-(define-modify-macro u8.16-incf (&optional (num 1)) two-arg-u8.16+)
-(define-modify-macro u8.16-decf (&optional (num 1)) two-arg-u8.16-)
-
-(define-modify-macro u16.8-incf (&optional (num 1)) two-arg-u16.8+)
-(define-modify-macro u16.8-decf (&optional (num 1)) two-arg-u16.8-)
-
-(define-modify-macro u32.4-incf (&optional (num 1)) two-arg-u32.4+)
-(define-modify-macro u32.4-decf (&optional (num 1)) two-arg-u32.4-)
-
-(define-modify-macro u64.2-incf (&optional (num 1)) two-arg-u64.2+)
-(define-modify-macro u64.2-decf (&optional (num 1)) two-arg-u64.2-)
-
-(define-modify-macro s8.16-incf (&optional (num 1)) two-arg-s8.16+)
-(define-modify-macro s8.16-decf (&optional (num 1)) two-arg-s8.16-)
-
-(define-modify-macro s16.8-incf (&optional (num 1)) two-arg-s16.8+)
-(define-modify-macro s16.8-decf (&optional (num 1)) two-arg-s16.8-)
-
-(define-modify-macro s32.4-incf (&optional (num 1)) two-arg-s32.4+)
-(define-modify-macro s32.4-decf (&optional (num 1)) two-arg-s32.4-)
-
-(define-modify-macro s64.2-incf (&optional (num 1)) two-arg-s64.2+)
-(define-modify-macro s64.2-decf (&optional (num 1)) two-arg-s64.2-)
diff --git a/contrib/sb-simd/code/define-rounders.lisp b/contrib/sb-simd/code/x86-64-rounders.lisp
similarity index 100%
rename from contrib/sb-simd/code/define-rounders.lisp
rename to contrib/sb-simd/code/x86-64-rounders.lisp
diff --git a/contrib/sb-simd/sb-simd.asd b/contrib/sb-simd/sb-simd.asd
index f167ec608..6df079a8f 100644
--- a/contrib/sb-simd/sb-simd.asd
+++ b/contrib/sb-simd/sb-simd.asd
@@ -21,18 +21,18 @@
(:module "instruction-sets"
:components
((:file "sb-simd")
- (:file "x86-64")
- (:file "sse")
- (:file "sse2")
- (:file "sse3")
- (:file "ssse3")
- (:file "sse4-1")
- (:file "sse4-2")
- (:file "avx")
- (:file "avx2")
- (:file "fma")
- (:file "arm64")
- (:file "neon")))
+ (:file "x86-64" :if-feature :x86-64)
+ (:file "sse" :if-feature :x86-64)
+ (:file "sse2" :if-feature :x86-64)
+ (:file "sse3" :if-feature :x86-64)
+ (:file "ssse3" :if-feature :x86-64)
+ (:file "sse4-1" :if-feature :x86-64)
+ (:file "sse4-2" :if-feature :x86-64)
+ (:file "avx" :if-feature :x86-64)
+ (:file "avx2" :if-feature :x86-64)
+ (:file "fma" :if-feature :x86-64)
+ (:file "arm64" :if-feature :arm64)
+ (:file "neon" :if-feature :arm64)))
(:file "define-types")
(:file "define-instruction-vops")
(:file "define-vref-vops")
@@ -40,6 +40,8 @@
(:file "define-vop-functions")
(:file "define-scalar-casts")
(:file "define-fake-vops")
+ (:file "x86-64-fake-vops" :if-feature :x86-64)
+ (:file "arm64-fake-vops" :if-feature :arm64)
(:file "define-simd-casts")
(:file "define-instructions")
(:file "define-vrefs")
@@ -50,5 +52,7 @@
(:file "define-reducers")
(:file "define-comparisons")
(:file "define-unequals")
- (:file "define-rounders")
- (:file "define-modify-macros")))))
+ (:file "x86-64-rounders" :if-feature :x86-64)
+ (:file "define-modify-macros")
+ (:file "x86-64-modify-macros" :if-feature :x86-64)
+ (:file "arm64-modify-macros" :if-feature :arm64)))))
diff --git a/contrib/sb-simd/test-suite/test-arefs-arm64.lisp b/contrib/sb-simd/test-suite/test-arefs-arm64.lisp
new file mode 100644
index 000000000..db18d686b
--- /dev/null
+++ b/contrib/sb-simd/test-suite/test-arefs-arm64.lisp
@@ -0,0 +1,13 @@
+
+(in-package #:sb-simd-neon)
+
+(sb-simd-test-suite:define-aref-test f32.4-aref single-float 4 f32.4-values)
+(sb-simd-test-suite:define-aref-test f64.2-aref double-float 2 f64.2-values)
+(sb-simd-test-suite:define-aref-test u8.16-aref (unsigned-byte 8) 16 u8.16-values)
+(sb-simd-test-suite:define-aref-test u16.8-aref (unsigned-byte 16) 8 u16.8-values)
+(sb-simd-test-suite:define-aref-test u32.4-aref (unsigned-byte 32) 4 u32.4-values)
+(sb-simd-test-suite:define-aref-test u64.2-aref (unsigned-byte 64) 2 u64.2-values)
+(sb-simd-test-suite:define-aref-test s8.16-aref (signed-byte 8) 16 s8.16-values)
+(sb-simd-test-suite:define-aref-test s16.8-aref (signed-byte 16) 8 s16.8-values)
+(sb-simd-test-suite:define-aref-test s32.4-aref (signed-byte 32) 4 s32.4-values)
+(sb-simd-test-suite:define-aref-test s64.2-aref (signed-byte 64) 2 s64.2-values)
diff --git a/contrib/sb-simd/test-suite/test-arefs.lisp b/contrib/sb-simd/test-suite/test-arefs-x86-64.lisp
similarity index 51%
copy from contrib/sb-simd/test-suite/test-arefs.lisp
copy to contrib/sb-simd/test-suite/test-arefs-x86-64.lisp
index c0b7530c4..7de41ebb2 100644
--- a/contrib/sb-simd/test-suite/test-arefs.lisp
+++ b/contrib/sb-simd/test-suite/test-arefs-x86-64.lisp
@@ -1,44 +1,3 @@
-(in-package #:sb-simd-test-suite)
-
-(defmacro define-aref-test (aref element-type simd-width &optional (unpacker 'identity))
- (let ((value-symbols (prefixed-symbols "V" simd-width))
- (zero (coerce 0 element-type))
- (one (coerce 1 element-type)))
- `(define-test ,aref
- ;; Create an array of zeros and successively replace zeros with
- ;; ones. After each replacement, check whether a load still
- ;; produces the expected result.
- (let ((array (make-array '(,simd-width)
- :element-type ',element-type
- :initial-element ,zero)))
- (multiple-value-bind ,value-symbols (,unpacker (,aref array 0))
- ,@(loop for value-symbol in value-symbols
- collect `(is (= ,value-symbol ,zero))))
- (loop for index below ,simd-width do
- (setf (aref array index) ,one)
- (loop for number in (multiple-value-list (,unpacker (,aref array 0)))
- for position from 0
- do (if (<= position index)
- (is (= number ,one))
- (is (= number ,zero))))))
- ;; Create an array with twice as many elements as the width of the
- ;; SIMD data type, and whose lower half consists of all zeros and
- ;; whose upper half consists of all ones. Check that all valid
- ;; loads from this array have the expected state.
- (let ((array (make-array '(,(* 2 simd-width))
- :element-type ',element-type
- :initial-contents
- (append (make-list ,simd-width :initial-element ,zero)
- (make-list ,simd-width :initial-element ,one)))))
- (loop for index below ,simd-width do
- (multiple-value-bind ,value-symbols
- (,unpacker (,aref array index))
- ,@(loop for value-symbol in value-symbols
- for position from 0
- collect `(if (< (+ ,position index) ,simd-width)
- (is (= ,value-symbol ,zero))
- (is (= ,value-symbol ,one))))))))))
-
(in-package #:sb-simd)
(sb-simd-test-suite:define-aref-test u8-aref (unsigned-byte 8) 1)
@@ -90,16 +49,3 @@
(sb-simd-test-suite:define-aref-test s16.16-aref (signed-byte 16) 16 s16.16-values)
(sb-simd-test-suite:define-aref-test s32.8-aref (signed-byte 32) 8 s32.8-values)
(sb-simd-test-suite:define-aref-test s64.4-aref (signed-byte 64) 4 s64.4-values)
-
-(in-package #:sb-simd-neon)
-
-(sb-simd-test-suite:define-aref-test f32.4-aref single-float 4 f32.4-values)
-(sb-simd-test-suite:define-aref-test f64.2-aref double-float 2 f64.2-values)
-(sb-simd-test-suite:define-aref-test u8.16-aref (unsigned-byte 8) 16 u8.16-values)
-(sb-simd-test-suite:define-aref-test u16.8-aref (unsigned-byte 16) 8 u16.8-values)
-(sb-simd-test-suite:define-aref-test u32.4-aref (unsigned-byte 32) 4 u32.4-values)
-(sb-simd-test-suite:define-aref-test u64.2-aref (unsigned-byte 64) 2 u64.2-values)
-(sb-simd-test-suite:define-aref-test s8.16-aref (signed-byte 8) 16 s8.16-values)
-(sb-simd-test-suite:define-aref-test s16.8-aref (signed-byte 16) 8 s16.8-values)
-(sb-simd-test-suite:define-aref-test s32.4-aref (signed-byte 32) 4 s32.4-values)
-(sb-simd-test-suite:define-aref-test s64.2-aref (signed-byte 64) 2 s64.2-values)
diff --git a/contrib/sb-simd/test-suite/test-arefs.lisp b/contrib/sb-simd/test-suite/test-arefs.lisp
index c0b7530c4..5632fd03b 100644
--- a/contrib/sb-simd/test-suite/test-arefs.lisp
+++ b/contrib/sb-simd/test-suite/test-arefs.lisp
@@ -38,68 +38,3 @@
collect `(if (< (+ ,position index) ,simd-width)
(is (= ,value-symbol ,zero))
(is (= ,value-symbol ,one))))))))))
-
-(in-package #:sb-simd)
-
-(sb-simd-test-suite:define-aref-test u8-aref (unsigned-byte 8) 1)
-(sb-simd-test-suite:define-aref-test u16-aref (unsigned-byte 16) 1)
-(sb-simd-test-suite:define-aref-test u32-aref (unsigned-byte 32) 1)
-(sb-simd-test-suite:define-aref-test u64-aref (unsigned-byte 64) 1)
-(sb-simd-test-suite:define-aref-test s8-aref (signed-byte 8) 1)
-(sb-simd-test-suite:define-aref-test s16-aref (signed-byte 16) 1)
-(sb-simd-test-suite:define-aref-test s32-aref (signed-byte 32) 1)
-(sb-simd-test-suite:define-aref-test s64-aref (signed-byte 64) 1)
-(sb-simd-test-suite:define-aref-test f32-aref single-float 1)
-(sb-simd-test-suite:define-aref-test f64-aref double-float 1)
-
-(in-package #:sb-simd-sse)
-
-(sb-simd-test-suite:define-aref-test f32.4-aref single-float 4 f32.4-values)
-
-(in-package #:sb-simd-sse2)
-
-(sb-simd-test-suite:define-aref-test f64.2-aref double-float 2 f64.2-values)
-(sb-simd-test-suite:define-aref-test u8.16-aref (unsigned-byte 8) 16 u8.16-values)
-(sb-simd-test-suite:define-aref-test u16.8-aref (unsigned-byte 16) 8 u16.8-values)
-(sb-simd-test-suite:define-aref-test u32.4-aref (unsigned-byte 32) 4 u32.4-values)
-(sb-simd-test-suite:define-aref-test u64.2-aref (unsigned-byte 64) 2 u64.2-values)
-(sb-simd-test-suite:define-aref-test s8.16-aref (signed-byte 8) 16 s8.16-values)
-(sb-simd-test-suite:define-aref-test s16.8-aref (signed-byte 16) 8 s16.8-values)
-(sb-simd-test-suite:define-aref-test s32.4-aref (signed-byte 32) 4 s32.4-values)
-(sb-simd-test-suite:define-aref-test s64.2-aref (signed-byte 64) 2 s64.2-values)
-
-(in-package #:sb-simd-avx)
-
-(sb-simd-test-suite:define-aref-test f32.4-aref single-float 4 f32.4-values)
-(sb-simd-test-suite:define-aref-test f32.8-aref single-float 8 f32.8-values)
-(sb-simd-test-suite:define-aref-test f64.2-aref double-float 2 f64.2-values)
-(sb-simd-test-suite:define-aref-test f64.4-aref double-float 4 f64.4-values)
-(sb-simd-test-suite:define-aref-test u8.16-aref (unsigned-byte 8) 16 u8.16-values)
-(sb-simd-test-suite:define-aref-test u16.8-aref (unsigned-byte 16) 8 u16.8-values)
-(sb-simd-test-suite:define-aref-test u32.4-aref (unsigned-byte 32) 4 u32.4-values)
-(sb-simd-test-suite:define-aref-test u64.2-aref (unsigned-byte 64) 2 u64.2-values)
-(sb-simd-test-suite:define-aref-test s8.16-aref (signed-byte 8) 16 s8.16-values)
-(sb-simd-test-suite:define-aref-test s16.8-aref (signed-byte 16) 8 s16.8-values)
-(sb-simd-test-suite:define-aref-test s32.4-aref (signed-byte 32) 4 s32.4-values)
-(sb-simd-test-suite:define-aref-test s64.2-aref (signed-byte 64) 2 s64.2-values)
-(sb-simd-test-suite:define-aref-test u8.32-aref (unsigned-byte 8) 32 u8.32-values)
-(sb-simd-test-suite:define-aref-test u16.16-aref (unsigned-byte 16) 16 u16.16-values)
-(sb-simd-test-suite:define-aref-test u32.8-aref (unsigned-byte 32) 8 u32.8-values)
-(sb-simd-test-suite:define-aref-test u64.4-aref (unsigned-byte 64) 4 u64.4-values)
-(sb-simd-test-suite:define-aref-test s8.32-aref (signed-byte 8) 32 s8.32-values)
-(sb-simd-test-suite:define-aref-test s16.16-aref (signed-byte 16) 16 s16.16-values)
-(sb-simd-test-suite:define-aref-test s32.8-aref (signed-byte 32) 8 s32.8-values)
-(sb-simd-test-suite:define-aref-test s64.4-aref (signed-byte 64) 4 s64.4-values)
-
-(in-package #:sb-simd-neon)
-
-(sb-simd-test-suite:define-aref-test f32.4-aref single-float 4 f32.4-values)
-(sb-simd-test-suite:define-aref-test f64.2-aref double-float 2 f64.2-values)
-(sb-simd-test-suite:define-aref-test u8.16-aref (unsigned-byte 8) 16 u8.16-values)
-(sb-simd-test-suite:define-aref-test u16.8-aref (unsigned-byte 16) 8 u16.8-values)
-(sb-simd-test-suite:define-aref-test u32.4-aref (unsigned-byte 32) 4 u32.4-values)
-(sb-simd-test-suite:define-aref-test u64.2-aref (unsigned-byte 64) 2 u64.2-values)
-(sb-simd-test-suite:define-aref-test s8.16-aref (signed-byte 8) 16 s8.16-values)
-(sb-simd-test-suite:define-aref-test s16.8-aref (signed-byte 16) 8 s16.8-values)
-(sb-simd-test-suite:define-aref-test s32.4-aref (signed-byte 32) 4 s32.4-values)
-(sb-simd-test-suite:define-aref-test s64.2-aref (signed-byte 64) 2 s64.2-values)
diff --git a/contrib/sb-simd/test-suite/test-hairy-simd-functions.lisp b/contrib/sb-simd/test-suite/test-hairy-simd-functions.lisp
index e2d9704dc..b2a1cc352 100644
--- a/contrib/sb-simd/test-suite/test-hairy-simd-functions.lisp
+++ b/contrib/sb-simd/test-suite/test-hairy-simd-functions.lisp
@@ -1,11 +1 @@
(in-package #:sb-simd-test-suite)
-
-(in-package #:sb-simd-sse)
-
-(in-package #:sb-simd-sse2)
-
-(in-package #:sb-simd-avx)
-
-(in-package #:sb-simd-avx2)
-
-(in-package #:sb-simd-neon)
diff --git a/contrib/sb-simd/test-suite/test-horizontal-functions-arm64.lisp b/contrib/sb-simd/test-suite/test-horizontal-functions-arm64.lisp
new file mode 100644
index 000000000..bb05500aa
--- /dev/null
+++ b/contrib/sb-simd/test-suite/test-horizontal-functions-arm64.lisp
@@ -0,0 +1,41 @@
+(in-package #:sb-simd-neon)
+
+(sb-simd-test-suite:define-horizontal-test f32.4-horizontal-max f32-max)
+(sb-simd-test-suite:define-horizontal-test f32.4-horizontal-min f32-min)
+(sb-simd-test-suite:define-horizontal-test f32.4-horizontal+ f32+)
+
+(sb-simd-test-suite:define-horizontal-test f64.2-horizontal-max f64-max)
+(sb-simd-test-suite:define-horizontal-test f64.2-horizontal-min f64-min)
+(sb-simd-test-suite:define-horizontal-test f64.2-horizontal+ f64+)
+
+(sb-simd-test-suite:define-horizontal-test u8.16-horizontal-max u8-max)
+(sb-simd-test-suite:define-horizontal-test u8.16-horizontal-min u8-min)
+(sb-simd-test-suite:define-horizontal-test u8.16-horizontal+ u8+)
+
+(sb-simd-test-suite:define-horizontal-test u16.8-horizontal-max u16-max)
+(sb-simd-test-suite:define-horizontal-test u16.8-horizontal-min u16-min)
+(sb-simd-test-suite:define-horizontal-test u16.8-horizontal+ u16+)
+
+(sb-simd-test-suite:define-horizontal-test u32.4-horizontal-max u32-max)
+(sb-simd-test-suite:define-horizontal-test u32.4-horizontal-min u32-min)
+(sb-simd-test-suite:define-horizontal-test u32.4-horizontal+ u32+)
+
+(sb-simd-test-suite:define-horizontal-test u64.2-horizontal-max u64-max)
+(sb-simd-test-suite:define-horizontal-test u64.2-horizontal-min u64-min)
+(sb-simd-test-suite:define-horizontal-test u64.2-horizontal+ u64+)
+
+(sb-simd-test-suite:define-horizontal-test s8.16-horizontal-max s8-max)
+(sb-simd-test-suite:define-horizontal-test s8.16-horizontal-min s8-min)
+(sb-simd-test-suite:define-horizontal-test s8.16-horizontal+ s8+)
+
+(sb-simd-test-suite:define-horizontal-test s16.8-horizontal-max s16-max)
+(sb-simd-test-suite:define-horizontal-test s16.8-horizontal-min s16-min)
+(sb-simd-test-suite:define-horizontal-test s16.8-horizontal+ s16+)
+
+(sb-simd-test-suite:define-horizontal-test s32.4-horizontal-max s32-max)
+(sb-simd-test-suite:define-horizontal-test s32.4-horizontal-min s32-min)
+(sb-simd-test-suite:define-horizontal-test s32.4-horizontal+ s32+)
+
+(sb-simd-test-suite:define-horizontal-test s64.2-horizontal-max s64-max)
+(sb-simd-test-suite:define-horizontal-test s64.2-horizontal-min s64-min)
+(sb-simd-test-suite:define-horizontal-test s64.2-horizontal+ s64+)
diff --git a/contrib/sb-simd/test-suite/test-horizontal-functions-x86-64.lisp b/contrib/sb-simd/test-suite/test-horizontal-functions-x86-64.lisp
new file mode 100644
index 000000000..b64d92147
--- /dev/null
+++ b/contrib/sb-simd/test-suite/test-horizontal-functions-x86-64.lisp
@@ -0,0 +1,56 @@
+
+(in-package #:sb-simd-sse)
+
+(sb-simd-test-suite:define-horizontal-test f32.4-horizontal-and f32-and)
+(sb-simd-test-suite:define-horizontal-test f32.4-horizontal-or f32-or)
+(sb-simd-test-suite:define-horizontal-test f32.4-horizontal-xor f32-xor)
+(sb-simd-test-suite:define-horizontal-test f32.4-horizontal-max f32-max)
+(sb-simd-test-suite:define-horizontal-test f32.4-horizontal-min f32-min)
+(sb-simd-test-suite:define-horizontal-test f32.4-horizontal+ f32+)
+(sb-simd-test-suite:define-horizontal-test f32.4-horizontal* f32*)
+
+(in-package #:sb-simd-sse2)
+
+(sb-simd-test-suite:define-horizontal-test f64.2-horizontal-and f64-and)
+(sb-simd-test-suite:define-horizontal-test f64.2-horizontal-or f64-or)
+(sb-simd-test-suite:define-horizontal-test f64.2-horizontal-xor f64-xor)
+(sb-simd-test-suite:define-horizontal-test f64.2-horizontal-max f64-max)
+(sb-simd-test-suite:define-horizontal-test f64.2-horizontal-min f64-min)
+(sb-simd-test-suite:define-horizontal-test f64.2-horizontal+ f64+)
+(sb-simd-test-suite:define-horizontal-test f64.2-horizontal* f64*)
+
+(in-package #:sb-simd-avx)
+
+(sb-simd-test-suite:define-horizontal-test f32.4-horizontal-and f32-and)
+(sb-simd-test-suite:define-horizontal-test f32.4-horizontal-or f32-or)
+(sb-simd-test-suite:define-horizontal-test f32.4-horizontal-xor f32-xor)
+(sb-simd-test-suite:define-horizontal-test f32.4-horizontal-max f32-max)
+(sb-simd-test-suite:define-horizontal-test f32.4-horizontal-min f32-min)
+(sb-simd-test-suite:define-horizontal-test f32.4-horizontal+ f32+)
+(sb-simd-test-suite:define-horizontal-test f32.4-horizontal* f32*)
+
+(sb-simd-test-suite:define-horizontal-test f64.2-horizontal-and f64-and)
+(sb-simd-test-suite:define-horizontal-test f64.2-horizontal-or f64-or)
+(sb-simd-test-suite:define-horizontal-test f64.2-horizontal-xor f64-xor)
+(sb-simd-test-suite:define-horizontal-test f64.2-horizontal-max f64-max)
+(sb-simd-test-suite:define-horizontal-test f64.2-horizontal-min f64-min)
+(sb-simd-test-suite:define-horizontal-test f64.2-horizontal+ f64+)
+(sb-simd-test-suite:define-horizontal-test f64.2-horizontal* f64*)
+
+(sb-simd-test-suite:define-horizontal-test f32.8-horizontal-and f32-and)
+(sb-simd-test-suite:define-horizontal-test f32.8-horizontal-or f32-or)
+(sb-simd-test-suite:define-horizontal-test f32.8-horizontal-xor f32-xor)
+(sb-simd-test-suite:define-horizontal-test f32.8-horizontal-max f32-max)
+(sb-simd-test-suite:define-horizontal-test f32.8-horizontal-min f32-min)
+(sb-simd-test-suite:define-horizontal-test f32.8-horizontal+ f32+)
+(sb-simd-test-suite:define-horizontal-test f32.8-horizontal* f32*)
+
+(sb-simd-test-suite:define-horizontal-test f64.4-horizontal-and f64-and)
+(sb-simd-test-suite:define-horizontal-test f64.4-horizontal-or f64-or)
+(sb-simd-test-suite:define-horizontal-test f64.4-horizontal-xor f64-xor)
+(sb-simd-test-suite:define-horizontal-test f64.4-horizontal-max f64-max)
+(sb-simd-test-suite:define-horizontal-test f64.4-horizontal-min f64-min)
+(sb-simd-test-suite:define-horizontal-test f64.4-horizontal+ f64+)
+(sb-simd-test-suite:define-horizontal-test f64.4-horizontal* f64*)
+
+(in-package #:sb-simd-avx2)
diff --git a/contrib/sb-simd/test-suite/test-horizontal-functions.lisp b/contrib/sb-simd/test-suite/test-horizontal-functions.lisp
index 7e3d3ae0c..147bb3131 100644
--- a/contrib/sb-simd/test-suite/test-horizontal-functions.lisp
+++ b/contrib/sb-simd/test-suite/test-horizontal-functions.lisp
@@ -18,101 +18,3 @@
(,scalar-fn ,@args)))
(floating-point-overflow ())
(floating-point-overflow ()))))))))
-
-(in-package #:sb-simd-sse)
-
-(sb-simd-test-suite:define-horizontal-test f32.4-horizontal-and f32-and)
-(sb-simd-test-suite:define-horizontal-test f32.4-horizontal-or f32-or)
-(sb-simd-test-suite:define-horizontal-test f32.4-horizontal-xor f32-xor)
-(sb-simd-test-suite:define-horizontal-test f32.4-horizontal-max f32-max)
-(sb-simd-test-suite:define-horizontal-test f32.4-horizontal-min f32-min)
-(sb-simd-test-suite:define-horizontal-test f32.4-horizontal+ f32+)
-(sb-simd-test-suite:define-horizontal-test f32.4-horizontal* f32*)
-
-(in-package #:sb-simd-sse2)
-
-(sb-simd-test-suite:define-horizontal-test f64.2-horizontal-and f64-and)
-(sb-simd-test-suite:define-horizontal-test f64.2-horizontal-or f64-or)
-(sb-simd-test-suite:define-horizontal-test f64.2-horizontal-xor f64-xor)
-(sb-simd-test-suite:define-horizontal-test f64.2-horizontal-max f64-max)
-(sb-simd-test-suite:define-horizontal-test f64.2-horizontal-min f64-min)
-(sb-simd-test-suite:define-horizontal-test f64.2-horizontal+ f64+)
-(sb-simd-test-suite:define-horizontal-test f64.2-horizontal* f64*)
-
-(in-package #:sb-simd-avx)
-
-(sb-simd-test-suite:define-horizontal-test f32.4-horizontal-and f32-and)
-(sb-simd-test-suite:define-horizontal-test f32.4-horizontal-or f32-or)
-(sb-simd-test-suite:define-horizontal-test f32.4-horizontal-xor f32-xor)
-(sb-simd-test-suite:define-horizontal-test f32.4-horizontal-max f32-max)
-(sb-simd-test-suite:define-horizontal-test f32.4-horizontal-min f32-min)
-(sb-simd-test-suite:define-horizontal-test f32.4-horizontal+ f32+)
-(sb-simd-test-suite:define-horizontal-test f32.4-horizontal* f32*)
-
-(sb-simd-test-suite:define-horizontal-test f64.2-horizontal-and f64-and)
-(sb-simd-test-suite:define-horizontal-test f64.2-horizontal-or f64-or)
-(sb-simd-test-suite:define-horizontal-test f64.2-horizontal-xor f64-xor)
-(sb-simd-test-suite:define-horizontal-test f64.2-horizontal-max f64-max)
-(sb-simd-test-suite:define-horizontal-test f64.2-horizontal-min f64-min)
-(sb-simd-test-suite:define-horizontal-test f64.2-horizontal+ f64+)
-(sb-simd-test-suite:define-horizontal-test f64.2-horizontal* f64*)
-
-(sb-simd-test-suite:define-horizontal-test f32.8-horizontal-and f32-and)
-(sb-simd-test-suite:define-horizontal-test f32.8-horizontal-or f32-or)
-(sb-simd-test-suite:define-horizontal-test f32.8-horizontal-xor f32-xor)
-(sb-simd-test-suite:define-horizontal-test f32.8-horizontal-max f32-max)
-(sb-simd-test-suite:define-horizontal-test f32.8-horizontal-min f32-min)
-(sb-simd-test-suite:define-horizontal-test f32.8-horizontal+ f32+)
-(sb-simd-test-suite:define-horizontal-test f32.8-horizontal* f32*)
-
-(sb-simd-test-suite:define-horizontal-test f64.4-horizontal-and f64-and)
-(sb-simd-test-suite:define-horizontal-test f64.4-horizontal-or f64-or)
-(sb-simd-test-suite:define-horizontal-test f64.4-horizontal-xor f64-xor)
-(sb-simd-test-suite:define-horizontal-test f64.4-horizontal-max f64-max)
-(sb-simd-test-suite:define-horizontal-test f64.4-horizontal-min f64-min)
-(sb-simd-test-suite:define-horizontal-test f64.4-horizontal+ f64+)
-(sb-simd-test-suite:define-horizontal-test f64.4-horizontal* f64*)
-
-(in-package #:sb-simd-avx2)
-
-(in-package #:sb-simd-neon)
-
-(sb-simd-test-suite:define-horizontal-test f32.4-horizontal-max f32-max)
-(sb-simd-test-suite:define-horizontal-test f32.4-horizontal-min f32-min)
-(sb-simd-test-suite:define-horizontal-test f32.4-horizontal+ f32+)
-
-(sb-simd-test-suite:define-horizontal-test f64.2-horizontal-max f64-max)
-(sb-simd-test-suite:define-horizontal-test f64.2-horizontal-min f64-min)
-(sb-simd-test-suite:define-horizontal-test f64.2-horizontal+ f64+)
-
-(sb-simd-test-suite:define-horizontal-test u8.16-horizontal-max u8-max)
-(sb-simd-test-suite:define-horizontal-test u8.16-horizontal-min u8-min)
-(sb-simd-test-suite:define-horizontal-test u8.16-horizontal+ u8+)
-
-(sb-simd-test-suite:define-horizontal-test u16.8-horizontal-max u16-max)
-(sb-simd-test-suite:define-horizontal-test u16.8-horizontal-min u16-min)
-(sb-simd-test-suite:define-horizontal-test u16.8-horizontal+ u16+)
-
-(sb-simd-test-suite:define-horizontal-test u32.4-horizontal-max u32-max)
-(sb-simd-test-suite:define-horizontal-test u32.4-horizontal-min u32-min)
-(sb-simd-test-suite:define-horizontal-test u32.4-horizontal+ u32+)
-
-(sb-simd-test-suite:define-horizontal-test u64.2-horizontal-max u64-max)
-(sb-simd-test-suite:define-horizontal-test u64.2-horizontal-min u64-min)
-(sb-simd-test-suite:define-horizontal-test u64.2-horizontal+ u64+)
-
-(sb-simd-test-suite:define-horizontal-test s8.16-horizontal-max s8-max)
-(sb-simd-test-suite:define-horizontal-test s8.16-horizontal-min s8-min)
-(sb-simd-test-suite:define-horizontal-test s8.16-horizontal+ s8+)
-
-(sb-simd-test-suite:define-horizontal-test s16.8-horizontal-max s16-max)
-(sb-simd-test-suite:define-horizontal-test s16.8-horizontal-min s16-min)
-(sb-simd-test-suite:define-horizontal-test s16.8-horizontal+ s16+)
-
-(sb-simd-test-suite:define-horizontal-test s32.4-horizontal-max s32-max)
-(sb-simd-test-suite:define-horizontal-test s32.4-horizontal-min s32-min)
-(sb-simd-test-suite:define-horizontal-test s32.4-horizontal+ s32+)
-
-(sb-simd-test-suite:define-horizontal-test s64.2-horizontal-max s64-max)
-(sb-simd-test-suite:define-horizontal-test s64.2-horizontal-min s64-min)
-(sb-simd-test-suite:define-horizontal-test s64.2-horizontal+ s64+)
diff --git a/contrib/sb-simd/test-suite/test-packages.lisp b/contrib/sb-simd/test-suite/test-packages.lisp
index ba18de9c2..0ae886e96 100644
--- a/contrib/sb-simd/test-suite/test-packages.lisp
+++ b/contrib/sb-simd/test-suite/test-packages.lisp
@@ -5,15 +5,18 @@
(define-test packages
(check-package '#:sb-simd-internals)
(check-package '#:sb-simd)
- (check-package '#:sb-simd-x86-64)
- (check-package '#:sb-simd-sse)
- (check-package '#:sb-simd-sse2)
- (check-package '#:sb-simd-sse3)
- (check-package '#:sb-simd-ssse3)
- (check-package '#:sb-simd-sse4.1)
- (check-package '#:sb-simd-sse4.2)
- (check-package '#:sb-simd-avx)
- (check-package '#:sb-simd-avx2)
+ #+x86-64
+ (progn
+ (check-package '#:sb-simd-x86-64)
+ (check-package '#:sb-simd-sse)
+ (check-package '#:sb-simd-sse2)
+ (check-package '#:sb-simd-sse3)
+ (check-package '#:sb-simd-ssse3)
+ (check-package '#:sb-simd-sse4.1)
+ (check-package '#:sb-simd-sse4.2)
+ (check-package '#:sb-simd-avx)
+ (check-package '#:sb-simd-avx2))
+ #+arm64
(check-package '#:sb-simd-neon)
;; Ensure that every instruction has a corresponding VOP.
(dolist (instruction-record (filter-available-function-records #'instruction-record-p))
diff --git a/contrib/sb-simd/test-suite/test-simple-simd-functions-arm64.lisp b/contrib/sb-simd/test-suite/test-simple-simd-functions-arm64.lisp
new file mode 100644
index 000000000..280d4184b
--- /dev/null
+++ b/contrib/sb-simd/test-suite/test-simple-simd-functions-arm64.lisp
@@ -0,0 +1,149 @@
+
+(in-package #:sb-simd-neon)
+
+(sb-simd-test-suite:define-simple-simd-test f32.4-and (f32.4) (&rest f32.4) f32-and)
+(sb-simd-test-suite:define-simple-simd-test f32.4-or (f32.4) (&rest f32.4) f32-or)
+(sb-simd-test-suite:define-simple-simd-test f32.4-xor (f32.4) (&rest f32.4) f32-xor)
+(sb-simd-test-suite:define-simple-simd-test f32.4-andc1 (f32.4) (f32.4 f32.4) f32-andc1)
+(sb-simd-test-suite:define-simple-simd-test f32.4-not (f32.4) (f32.4) f32-not)
+(sb-simd-test-suite:define-simple-simd-test f32.4-max (f32.4) (f32.4 &rest f32.4) f32-max)
+(sb-simd-test-suite:define-simple-simd-test f32.4-min (f32.4) (f32.4 &rest f32.4) f32-min)
+(sb-simd-test-suite:define-simple-simd-test f32.4+ (f32.4) (&rest f32.4) f32+)
+(sb-simd-test-suite:define-simple-simd-test f32.4- (f32.4) (f32.4 &rest f32.4) f32-)
+(sb-simd-test-suite:define-simple-simd-test f32.4* (f32.4) (&rest f32.4) f32*)
+(sb-simd-test-suite:define-simple-simd-test f32.4/ (f32.4) (f32.4 &rest f32.4) f32/)
+(sb-simd-test-suite:define-simple-simd-test f32.4= (u32.4) (f32.4 &rest f32.4) f32=)
+(sb-simd-test-suite:define-simple-simd-test f32.4/= (u32.4) (f32.4 &rest f32.4) f32/=)
+(sb-simd-test-suite:define-simple-simd-test f32.4< (u32.4) (f32.4 &rest f32.4) f32<)
+(sb-simd-test-suite:define-simple-simd-test f32.4<= (u32.4) (f32.4 &rest f32.4) f32<=)
+(sb-simd-test-suite:define-simple-simd-test f32.4> (u32.4) (f32.4 &rest f32.4) f32>)
+(sb-simd-test-suite:define-simple-simd-test f32.4>= (u32.4) (f32.4 &rest f32.4) f32>=)
+
+(sb-simd-test-suite:define-simple-simd-test f64.2-and (f64.2) (&rest f64.2) f64-and)
+(sb-simd-test-suite:define-simple-simd-test f64.2-or (f64.2) (&rest f64.2) f64-or)
+(sb-simd-test-suite:define-simple-simd-test f64.2-xor (f64.2) (&rest f64.2) f64-xor)
+(sb-simd-test-suite:define-simple-simd-test f64.2-andc1 (f64.2) (f64.2 f64.2) f64-andc1)
+(sb-simd-test-suite:define-simple-simd-test f64.2-not (f64.2) (f64.2) f64-not)
+(sb-simd-test-suite:define-simple-simd-test f64.2-max (f64.2) (f64.2 &rest f64.2) f64-max)
+(sb-simd-test-suite:define-simple-simd-test f64.2-min (f64.2) (f64.2 &rest f64.2) f64-min)
+(sb-simd-test-suite:define-simple-simd-test f64.2+ (f64.2) (&rest f64.2) f64+)
+(sb-simd-test-suite:define-simple-simd-test f64.2- (f64.2) (f64.2 &rest f64.2) f64-)
+(sb-simd-test-suite:define-simple-simd-test f64.2* (f64.2) (&rest f64.2) f64*)
+(sb-simd-test-suite:define-simple-simd-test f64.2/ (f64.2) (f64.2 &rest f64.2) f64/)
+(sb-simd-test-suite:define-simple-simd-test f64.2= (u64.2) (f64.2 &rest f64.2) f64=)
+(sb-simd-test-suite:define-simple-simd-test f64.2/= (u64.2) (f64.2 &rest f64.2) f64/=)
+(sb-simd-test-suite:define-simple-simd-test f64.2< (u64.2) (f64.2 &rest f64.2) f64<)
+(sb-simd-test-suite:define-simple-simd-test f64.2<= (u64.2) (f64.2 &rest f64.2) f64<=)
+(sb-simd-test-suite:define-simple-simd-test f64.2> (u64.2) (f64.2 &rest f64.2) f64>)
+(sb-simd-test-suite:define-simple-simd-test f64.2>= (u64.2) (f64.2 &rest f64.2) f64>=)
+
+(sb-simd-test-suite:define-simple-simd-test u8.16-and (u8.16) (&rest u8.16) u8-and)
+(sb-simd-test-suite:define-simple-simd-test u8.16-or (u8.16) (&rest u8.16) u8-or)
+(sb-simd-test-suite:define-simple-simd-test u8.16-xor (u8.16) (&rest u8.16) u8-xor)
+(sb-simd-test-suite:define-simple-simd-test u8.16-andc1 (u8.16) (u8.16 u8.16) u8-andc1)
+(sb-simd-test-suite:define-simple-simd-test u8.16-not (u8.16) (u8.16) u8-not)
+(sb-simd-test-suite:define-simple-simd-test u8.16+ (u8.16) (&rest u8.16) u8+)
+(sb-simd-test-suite:define-simple-simd-test u8.16- (u8.16) (u8.16 &rest u8.16) u8-)
+(sb-simd-test-suite:define-simple-simd-test u8.16= (u8.16) (u8.16 &rest u8.16) u8=)
+(sb-simd-test-suite:define-simple-simd-test u8.16/= (u8.16) (u8.16 &rest u8.16) u8/=)
+(sb-simd-test-suite:define-simple-simd-test u8.16< (u8.16) (u8.16 &rest u8.16) u8<)
+(sb-simd-test-suite:define-simple-simd-test u8.16<= (u8.16) (u8.16 &rest u8.16) u8<=)
+(sb-simd-test-suite:define-simple-simd-test u8.16> (u8.16) (u8.16 &rest u8.16) u8>)
+(sb-simd-test-suite:define-simple-simd-test u8.16>= (u8.16) (u8.16 &rest u8.16) u8>=)
+
+(sb-simd-test-suite:define-simple-simd-test u16.8-and (u16.8) (&rest u16.8) u16-and)
+(sb-simd-test-suite:define-simple-simd-test u16.8-or (u16.8) (&rest u16.8) u16-or)
+(sb-simd-test-suite:define-simple-simd-test u16.8-xor (u16.8) (&rest u16.8) u16-xor)
+(sb-simd-test-suite:define-simple-simd-test u16.8-andc1 (u16.8) (u16.8 u16.8) u16-andc1)
+(sb-simd-test-suite:define-simple-simd-test u16.8-not (u16.8) (u16.8) u16-not)
+(sb-simd-test-suite:define-simple-simd-test u16.8+ (u16.8) (&rest u16.8) u16+)
+(sb-simd-test-suite:define-simple-simd-test u16.8- (u16.8) (u16.8 &rest u16.8) u16-)
+(sb-simd-test-suite:define-simple-simd-test u16.8= (u16.8) (u16.8 &rest u16.8) u16=)
+(sb-simd-test-suite:define-simple-simd-test u16.8/= (u16.8) (u16.8 &rest u16.8) u16/=)
+(sb-simd-test-suite:define-simple-simd-test u16.8< (u16.8) (u16.8 &rest u16.8) u16<)
+(sb-simd-test-suite:define-simple-simd-test u16.8<= (u16.8) (u16.8 &rest u16.8) u16<=)
+(sb-simd-test-suite:define-simple-simd-test u16.8> (u16.8) (u16.8 &rest u16.8) u16>)
+(sb-simd-test-suite:define-simple-simd-test u16.8>= (u16.8) (u16.8 &rest u16.8) u16>=)
+
+(sb-simd-test-suite:define-simple-simd-test u32.4-and (u32.4) (&rest u32.4) u32-and)
+(sb-simd-test-suite:define-simple-simd-test u32.4-or (u32.4) (&rest u32.4) u32-or)
+(sb-simd-test-suite:define-simple-simd-test u32.4-xor (u32.4) (&rest u32.4) u32-xor)
+(sb-simd-test-suite:define-simple-simd-test u32.4-andc1 (u32.4) (u32.4 u32.4) u32-andc1)
+(sb-simd-test-suite:define-simple-simd-test u32.4-not (u32.4) (u32.4) u32-not)
+(sb-simd-test-suite:define-simple-simd-test u32.4+ (u32.4) (&rest u32.4) u32+)
+(sb-simd-test-suite:define-simple-simd-test u32.4- (u32.4) (u32.4 &rest u32.4) u32-)
+(sb-simd-test-suite:define-simple-simd-test u32.4= (u32.4) (u32.4 &rest u32.4) u32=)
+(sb-simd-test-suite:define-simple-simd-test u32.4/= (u32.4) (u32.4 &rest u32.4) u32/=)
+(sb-simd-test-suite:define-simple-simd-test u32.4< (u32.4) (u32.4 &rest u32.4) u32<)
+(sb-simd-test-suite:define-simple-simd-test u32.4<= (u32.4) (u32.4 &rest u32.4) u32<=)
+(sb-simd-test-suite:define-simple-simd-test u32.4> (u32.4) (u32.4 &rest u32.4) u32>)
+(sb-simd-test-suite:define-simple-simd-test u32.4>= (u32.4) (u32.4 &rest u32.4) u32>=)
+
+(sb-simd-test-suite:define-simple-simd-test u64.2-and (u64.2) (&rest u64.2) u64-and)
+(sb-simd-test-suite:define-simple-simd-test u64.2-or (u64.2) (&rest u64.2) u64-or)
+(sb-simd-test-suite:define-simple-simd-test u64.2-xor (u64.2) (&rest u64.2) u64-xor)
+(sb-simd-test-suite:define-simple-simd-test u64.2-andc1 (u64.2) (u64.2 u64.2) u64-andc1)
+(sb-simd-test-suite:define-simple-simd-test u64.2-not (u64.2) (u64.2) u64-not)
+(sb-simd-test-suite:define-simple-simd-test u64.2+ (u64.2) (&rest u64.2) u64+)
+(sb-simd-test-suite:define-simple-simd-test u64.2- (u64.2) (u64.2 &rest u64.2) u64-)
+(sb-simd-test-suite:define-simple-simd-test u64.2= (u64.2) (u64.2 &rest u64.2) u64=)
+(sb-simd-test-suite:define-simple-simd-test u64.2/= (u64.2) (u64.2 &rest u64.2) u64/=)
+(sb-simd-test-suite:define-simple-simd-test u64.2< (u64.2) (u64.2 &rest u64.2) u64<)
+(sb-simd-test-suite:define-simple-simd-test u64.2<= (u64.2) (u64.2 &rest u64.2) u64<=)
+(sb-simd-test-suite:define-simple-simd-test u64.2> (u64.2) (u64.2 &rest u64.2) u64>)
+(sb-simd-test-suite:define-simple-simd-test u64.2>= (u64.2) (u64.2 &rest u64.2) u64>=)
+
+(sb-simd-test-suite:define-simple-simd-test s8.16-and (s8.16) (&rest s8.16) s8-and)
+(sb-simd-test-suite:define-simple-simd-test s8.16-or (s8.16) (&rest s8.16) s8-or)
+(sb-simd-test-suite:define-simple-simd-test s8.16-xor (s8.16) (&rest s8.16) s8-xor)
+(sb-simd-test-suite:define-simple-simd-test s8.16-andc1 (s8.16) (s8.16 s8.16) s8-andc1)
+(sb-simd-test-suite:define-simple-simd-test s8.16-not (s8.16) (s8.16) s8-not)
+(sb-simd-test-suite:define-simple-simd-test s8.16+ (s8.16) (&rest s8.16) s8+)
+(sb-simd-test-suite:define-simple-simd-test s8.16- (s8.16) (s8.16 &rest s8.16) s8-)
+(sb-simd-test-suite:define-simple-simd-test s8.16= (u8.16) (s8.16 &rest s8.16) s8=)
+(sb-simd-test-suite:define-simple-simd-test s8.16/= (u8.16) (s8.16 &rest s8.16) s8/=)
+(sb-simd-test-suite:define-simple-simd-test s8.16< (u8.16) (s8.16 &rest s8.16) s8<)
+(sb-simd-test-suite:define-simple-simd-test s8.16<= (u8.16) (s8.16 &rest s8.16) s8<=)
+(sb-simd-test-suite:define-simple-simd-test s8.16> (u8.16) (s8.16 &rest s8.16) s8>)
+(sb-simd-test-suite:define-simple-simd-test s8.16>= (u8.16) (s8.16 &rest s8.16) s8>=)
+
+(sb-simd-test-suite:define-simple-simd-test s16.8-and (s16.8) (&rest s16.8) s16-and)
+(sb-simd-test-suite:define-simple-simd-test s16.8-or (s16.8) (&rest s16.8) s16-or)
+(sb-simd-test-suite:define-simple-simd-test s16.8-xor (s16.8) (&rest s16.8) s16-xor)
+(sb-simd-test-suite:define-simple-simd-test s16.8-andc1 (s16.8) (s16.8 s16.8) s16-andc1)
+(sb-simd-test-suite:define-simple-simd-test s16.8-not (s16.8) (s16.8) s16-not)
+(sb-simd-test-suite:define-simple-simd-test s16.8+ (s16.8) (&rest s16.8) s16+)
+(sb-simd-test-suite:define-simple-simd-test s16.8- (s16.8) (s16.8 &rest s16.8) s16-)
+(sb-simd-test-suite:define-simple-simd-test s16.8= (u16.8) (s16.8 &rest s16.8) s16=)
+(sb-simd-test-suite:define-simple-simd-test s16.8/= (u16.8) (s16.8 &rest s16.8) s16/=)
+(sb-simd-test-suite:define-simple-simd-test s16.8< (u16.8) (s16.8 &rest s16.8) s16<)
+(sb-simd-test-suite:define-simple-simd-test s16.8<= (u16.8) (s16.8 &rest s16.8) s16<=)
+(sb-simd-test-suite:define-simple-simd-test s16.8> (u16.8) (s16.8 &rest s16.8) s16>)
+(sb-simd-test-suite:define-simple-simd-test s16.8>= (u16.8) (s16.8 &rest s16.8) s16>=)
+
+(sb-simd-test-suite:define-simple-simd-test s32.4-and (s32.4) (&rest s32.4) s32-and)
+(sb-simd-test-suite:define-simple-simd-test s32.4-or (s32.4) (&rest s32.4) s32-or)
+(sb-simd-test-suite:define-simple-simd-test s32.4-xor (s32.4) (&rest s32.4) s32-xor)
+(sb-simd-test-suite:define-simple-simd-test s32.4-andc1 (s32.4) (s32.4 s32.4) s32-andc1)
+(sb-simd-test-suite:define-simple-simd-test s32.4-not (s32.4) (s32.4) s32-not)
+(sb-simd-test-suite:define-simple-simd-test s32.4+ (s32.4) (&rest s32.4) s32+)
+(sb-simd-test-suite:define-simple-simd-test s32.4- (s32.4) (s32.4 &rest s32.4) s32-)
+(sb-simd-test-suite:define-simple-simd-test s32.4= (u32.4) (s32.4 &rest s32.4) s32=)
+(sb-simd-test-suite:define-simple-simd-test s32.4/= (u32.4) (s32.4 &rest s32.4) s32/=)
+(sb-simd-test-suite:define-simple-simd-test s32.4< (u32.4) (s32.4 &rest s32.4) s32<)
+(sb-simd-test-suite:define-simple-simd-test s32.4<= (u32.4) (s32.4 &rest s32.4) s32<=)
+(sb-simd-test-suite:define-simple-simd-test s32.4> (u32.4) (s32.4 &rest s32.4) s32>)
+(sb-simd-test-suite:define-simple-simd-test s32.4>= (u32.4) (s32.4 &rest s32.4) s32>=)
+
+(sb-simd-test-suite:define-simple-simd-test s64.2-and (s64.2) (&rest s64.2) s64-and)
+(sb-simd-test-suite:define-simple-simd-test s64.2-or (s64.2) (&rest s64.2) s64-or)
+(sb-simd-test-suite:define-simple-simd-test s64.2-xor (s64.2) (&rest s64.2) s64-xor)
+(sb-simd-test-suite:define-simple-simd-test s64.2-andc1 (s64.2) (s64.2 s64.2) s64-andc1)
+(sb-simd-test-suite:define-simple-simd-test s64.2-not (s64.2) (s64.2) s64-not)
+(sb-simd-test-suite:define-simple-simd-test s64.2+ (s64.2) (&rest s64.2) s64+)
+(sb-simd-test-suite:define-simple-simd-test s64.2- (s64.2) (s64.2 &rest s64.2) s64-)
+(sb-simd-test-suite:define-simple-simd-test s64.2= (u64.2) (s64.2 &rest s64.2) s64=)
+(sb-simd-test-suite:define-simple-simd-test s64.2< (u64.2) (s64.2 &rest s64.2) s64<)
+(sb-simd-test-suite:define-simple-simd-test s64.2<= (u64.2) (s64.2 &rest s64.2) s64<=)
+(sb-simd-test-suite:define-simple-simd-test s64.2> (u64.2) (s64.2 &rest s64.2) s64>)
+(sb-simd-test-suite:define-simple-simd-test s64.2>= (u64.2) (s64.2 &rest s64.2) s64>=)
diff --git a/contrib/sb-simd/test-suite/test-simple-simd-functions.lisp b/contrib/sb-simd/test-suite/test-simple-simd-functions-x86-64.lisp
similarity index 74%
copy from contrib/sb-simd/test-suite/test-simple-simd-functions.lisp
copy to contrib/sb-simd/test-suite/test-simple-simd-functions-x86-64.lisp
index 6ee0307aa..088df1717 100644
--- a/contrib/sb-simd/test-suite/test-simple-simd-functions.lisp
+++ b/contrib/sb-simd/test-suite/test-simple-simd-functions-x86-64.lisp
@@ -1,38 +1,3 @@
-(in-package #:sb-simd-test-suite)
-
-(defmacro define-simple-simd-test (simd-foo result-types argtypes foo)
- `(define-test ,simd-foo
- ,@(loop for argtype-variant in (argtypes-variants argtypes)
- collect `(test-simple-simd-function ,simd-foo ,result-types ,argtype-variant ,foo))))
-
-(defmacro test-simple-simd-function (simd-foo result-types simplified-argtypes foo)
- (let* ((result-infos (mapcar #'simd-info result-types))
- (argument-infos (mapcar #'simd-info simplified-argtypes))
- (argument-symbols (prefixed-symbols "ARGUMENT-" (length argument-infos)))
- (result-symbols (prefixed-symbols "RESULT-" (length result-infos)))
- (output-symbols (prefixed-symbols "OUTPUT-" (length result-infos)))
- (simd-width (the integer (second (first result-infos)))))
- (assert (apply #'= (append (mapcar #'second result-infos) (mapcar #'second argument-infos))))
- `(loop repeat ,(min (expt 99 (length argument-infos)) 10000) do
- (multiple-value-bind (inputs outputs)
- (find-valid-simd-call
- (lambda ,argument-symbols
- (declare ,@(loop for argument-symbol in argument-symbols
- for argument-type in (mapcar #'first argument-infos)
- collect `(type ,argument-type ,argument-symbol)))
- (,foo ,@argument-symbols))
- ',(mapcar #'find-generator (mapcar #'first argument-infos))
- ,simd-width
- ',(mapcar #'third argument-infos)
- ',(mapcar #'third result-infos))
- (destructuring-bind ,argument-symbols inputs
- (destructuring-bind ,output-symbols outputs
- (multiple-value-bind ,result-symbols (,simd-foo ,@argument-symbols)
- ,@(loop for result-type in result-types
- for result-symbol in result-symbols
- for output-symbol in output-symbols
- collect
- `(is (simd= ,result-symbol ,output-symbol))))))))))
(in-package #:sb-simd-sse)
@@ -541,152 +506,3 @@
(sb-simd-test-suite:define-simple-simd-test f64.4-fmadd (f64.4) (f64.4 f64.4 f64.4) f64-fmadd)
(sb-simd-test-suite:define-simple-simd-test f64.4-fnmadd (f64.4) (f64.4 f64.4 f64.4) f64-fnmadd)
(sb-simd-test-suite:define-simple-simd-test f64.4-fmsub (f64.4) (f64.4 f64.4 f64.4) f64-fmsub)
-
-(in-package #:sb-simd-neon)
-
-(sb-simd-test-suite:define-simple-simd-test f32.4-and (f32.4) (&rest f32.4) f32-and)
-(sb-simd-test-suite:define-simple-simd-test f32.4-or (f32.4) (&rest f32.4) f32-or)
-(sb-simd-test-suite:define-simple-simd-test f32.4-xor (f32.4) (&rest f32.4) f32-xor)
-(sb-simd-test-suite:define-simple-simd-test f32.4-andc1 (f32.4) (f32.4 f32.4) f32-andc1)
-(sb-simd-test-suite:define-simple-simd-test f32.4-not (f32.4) (f32.4) f32-not)
-(sb-simd-test-suite:define-simple-simd-test f32.4-max (f32.4) (f32.4 &rest f32.4) f32-max)
-(sb-simd-test-suite:define-simple-simd-test f32.4-min (f32.4) (f32.4 &rest f32.4) f32-min)
-(sb-simd-test-suite:define-simple-simd-test f32.4+ (f32.4) (&rest f32.4) f32+)
-(sb-simd-test-suite:define-simple-simd-test f32.4- (f32.4) (f32.4 &rest f32.4) f32-)
-(sb-simd-test-suite:define-simple-simd-test f32.4* (f32.4) (&rest f32.4) f32*)
-(sb-simd-test-suite:define-simple-simd-test f32.4/ (f32.4) (f32.4 &rest f32.4) f32/)
-(sb-simd-test-suite:define-simple-simd-test f32.4= (u32.4) (f32.4 &rest f32.4) f32=)
-(sb-simd-test-suite:define-simple-simd-test f32.4/= (u32.4) (f32.4 &rest f32.4) f32/=)
-(sb-simd-test-suite:define-simple-simd-test f32.4< (u32.4) (f32.4 &rest f32.4) f32<)
-(sb-simd-test-suite:define-simple-simd-test f32.4<= (u32.4) (f32.4 &rest f32.4) f32<=)
-(sb-simd-test-suite:define-simple-simd-test f32.4> (u32.4) (f32.4 &rest f32.4) f32>)
-(sb-simd-test-suite:define-simple-simd-test f32.4>= (u32.4) (f32.4 &rest f32.4) f32>=)
-
-(sb-simd-test-suite:define-simple-simd-test f64.2-and (f64.2) (&rest f64.2) f64-and)
-(sb-simd-test-suite:define-simple-simd-test f64.2-or (f64.2) (&rest f64.2) f64-or)
-(sb-simd-test-suite:define-simple-simd-test f64.2-xor (f64.2) (&rest f64.2) f64-xor)
-(sb-simd-test-suite:define-simple-simd-test f64.2-andc1 (f64.2) (f64.2 f64.2) f64-andc1)
-(sb-simd-test-suite:define-simple-simd-test f64.2-not (f64.2) (f64.2) f64-not)
-(sb-simd-test-suite:define-simple-simd-test f64.2-max (f64.2) (f64.2 &rest f64.2) f64-max)
-(sb-simd-test-suite:define-simple-simd-test f64.2-min (f64.2) (f64.2 &rest f64.2) f64-min)
-(sb-simd-test-suite:define-simple-simd-test f64.2+ (f64.2) (&rest f64.2) f64+)
-(sb-simd-test-suite:define-simple-simd-test f64.2- (f64.2) (f64.2 &rest f64.2) f64-)
-(sb-simd-test-suite:define-simple-simd-test f64.2* (f64.2) (&rest f64.2) f64*)
-(sb-simd-test-suite:define-simple-simd-test f64.2/ (f64.2) (f64.2 &rest f64.2) f64/)
-(sb-simd-test-suite:define-simple-simd-test f64.2= (u64.2) (f64.2 &rest f64.2) f64=)
-(sb-simd-test-suite:define-simple-simd-test f64.2/= (u64.2) (f64.2 &rest f64.2) f64/=)
-(sb-simd-test-suite:define-simple-simd-test f64.2< (u64.2) (f64.2 &rest f64.2) f64<)
-(sb-simd-test-suite:define-simple-simd-test f64.2<= (u64.2) (f64.2 &rest f64.2) f64<=)
-(sb-simd-test-suite:define-simple-simd-test f64.2> (u64.2) (f64.2 &rest f64.2) f64>)
-(sb-simd-test-suite:define-simple-simd-test f64.2>= (u64.2) (f64.2 &rest f64.2) f64>=)
-
-(sb-simd-test-suite:define-simple-simd-test u8.16-and (u8.16) (&rest u8.16) u8-and)
-(sb-simd-test-suite:define-simple-simd-test u8.16-or (u8.16) (&rest u8.16) u8-or)
-(sb-simd-test-suite:define-simple-simd-test u8.16-xor (u8.16) (&rest u8.16) u8-xor)
-(sb-simd-test-suite:define-simple-simd-test u8.16-andc1 (u8.16) (u8.16 u8.16) u8-andc1)
-(sb-simd-test-suite:define-simple-simd-test u8.16-not (u8.16) (u8.16) u8-not)
-(sb-simd-test-suite:define-simple-simd-test u8.16+ (u8.16) (&rest u8.16) u8+)
-(sb-simd-test-suite:define-simple-simd-test u8.16- (u8.16) (u8.16 &rest u8.16) u8-)
-(sb-simd-test-suite:define-simple-simd-test u8.16= (u8.16) (u8.16 &rest u8.16) u8=)
-(sb-simd-test-suite:define-simple-simd-test u8.16/= (u8.16) (u8.16 &rest u8.16) u8/=)
-(sb-simd-test-suite:define-simple-simd-test u8.16< (u8.16) (u8.16 &rest u8.16) u8<)
-(sb-simd-test-suite:define-simple-simd-test u8.16<= (u8.16) (u8.16 &rest u8.16) u8<=)
-(sb-simd-test-suite:define-simple-simd-test u8.16> (u8.16) (u8.16 &rest u8.16) u8>)
-(sb-simd-test-suite:define-simple-simd-test u8.16>= (u8.16) (u8.16 &rest u8.16) u8>=)
-
-(sb-simd-test-suite:define-simple-simd-test u16.8-and (u16.8) (&rest u16.8) u16-and)
-(sb-simd-test-suite:define-simple-simd-test u16.8-or (u16.8) (&rest u16.8) u16-or)
-(sb-simd-test-suite:define-simple-simd-test u16.8-xor (u16.8) (&rest u16.8) u16-xor)
-(sb-simd-test-suite:define-simple-simd-test u16.8-andc1 (u16.8) (u16.8 u16.8) u16-andc1)
-(sb-simd-test-suite:define-simple-simd-test u16.8-not (u16.8) (u16.8) u16-not)
-(sb-simd-test-suite:define-simple-simd-test u16.8+ (u16.8) (&rest u16.8) u16+)
-(sb-simd-test-suite:define-simple-simd-test u16.8- (u16.8) (u16.8 &rest u16.8) u16-)
-(sb-simd-test-suite:define-simple-simd-test u16.8= (u16.8) (u16.8 &rest u16.8) u16=)
-(sb-simd-test-suite:define-simple-simd-test u16.8/= (u16.8) (u16.8 &rest u16.8) u16/=)
-(sb-simd-test-suite:define-simple-simd-test u16.8< (u16.8) (u16.8 &rest u16.8) u16<)
-(sb-simd-test-suite:define-simple-simd-test u16.8<= (u16.8) (u16.8 &rest u16.8) u16<=)
-(sb-simd-test-suite:define-simple-simd-test u16.8> (u16.8) (u16.8 &rest u16.8) u16>)
-(sb-simd-test-suite:define-simple-simd-test u16.8>= (u16.8) (u16.8 &rest u16.8) u16>=)
-
-(sb-simd-test-suite:define-simple-simd-test u32.4-and (u32.4) (&rest u32.4) u32-and)
-(sb-simd-test-suite:define-simple-simd-test u32.4-or (u32.4) (&rest u32.4) u32-or)
-(sb-simd-test-suite:define-simple-simd-test u32.4-xor (u32.4) (&rest u32.4) u32-xor)
-(sb-simd-test-suite:define-simple-simd-test u32.4-andc1 (u32.4) (u32.4 u32.4) u32-andc1)
-(sb-simd-test-suite:define-simple-simd-test u32.4-not (u32.4) (u32.4) u32-not)
-(sb-simd-test-suite:define-simple-simd-test u32.4+ (u32.4) (&rest u32.4) u32+)
-(sb-simd-test-suite:define-simple-simd-test u32.4- (u32.4) (u32.4 &rest u32.4) u32-)
-(sb-simd-test-suite:define-simple-simd-test u32.4= (u32.4) (u32.4 &rest u32.4) u32=)
-(sb-simd-test-suite:define-simple-simd-test u32.4/= (u32.4) (u32.4 &rest u32.4) u32/=)
-(sb-simd-test-suite:define-simple-simd-test u32.4< (u32.4) (u32.4 &rest u32.4) u32<)
-(sb-simd-test-suite:define-simple-simd-test u32.4<= (u32.4) (u32.4 &rest u32.4) u32<=)
-(sb-simd-test-suite:define-simple-simd-test u32.4> (u32.4) (u32.4 &rest u32.4) u32>)
-(sb-simd-test-suite:define-simple-simd-test u32.4>= (u32.4) (u32.4 &rest u32.4) u32>=)
-
-(sb-simd-test-suite:define-simple-simd-test u64.2-and (u64.2) (&rest u64.2) u64-and)
-(sb-simd-test-suite:define-simple-simd-test u64.2-or (u64.2) (&rest u64.2) u64-or)
-(sb-simd-test-suite:define-simple-simd-test u64.2-xor (u64.2) (&rest u64.2) u64-xor)
-(sb-simd-test-suite:define-simple-simd-test u64.2-andc1 (u64.2) (u64.2 u64.2) u64-andc1)
-(sb-simd-test-suite:define-simple-simd-test u64.2-not (u64.2) (u64.2) u64-not)
-(sb-simd-test-suite:define-simple-simd-test u64.2+ (u64.2) (&rest u64.2) u64+)
-(sb-simd-test-suite:define-simple-simd-test u64.2- (u64.2) (u64.2 &rest u64.2) u64-)
-(sb-simd-test-suite:define-simple-simd-test u64.2= (u64.2) (u64.2 &rest u64.2) u64=)
-(sb-simd-test-suite:define-simple-simd-test u64.2/= (u64.2) (u64.2 &rest u64.2) u64/=)
-(sb-simd-test-suite:define-simple-simd-test u64.2< (u64.2) (u64.2 &rest u64.2) u64<)
-(sb-simd-test-suite:define-simple-simd-test u64.2<= (u64.2) (u64.2 &rest u64.2) u64<=)
-(sb-simd-test-suite:define-simple-simd-test u64.2> (u64.2) (u64.2 &rest u64.2) u64>)
-(sb-simd-test-suite:define-simple-simd-test u64.2>= (u64.2) (u64.2 &rest u64.2) u64>=)
-
-(sb-simd-test-suite:define-simple-simd-test s8.16-and (s8.16) (&rest s8.16) s8-and)
-(sb-simd-test-suite:define-simple-simd-test s8.16-or (s8.16) (&rest s8.16) s8-or)
-(sb-simd-test-suite:define-simple-simd-test s8.16-xor (s8.16) (&rest s8.16) s8-xor)
-(sb-simd-test-suite:define-simple-simd-test s8.16-andc1 (s8.16) (s8.16 s8.16) s8-andc1)
-(sb-simd-test-suite:define-simple-simd-test s8.16-not (s8.16) (s8.16) s8-not)
-(sb-simd-test-suite:define-simple-simd-test s8.16+ (s8.16) (&rest s8.16) s8+)
-(sb-simd-test-suite:define-simple-simd-test s8.16- (s8.16) (s8.16 &rest s8.16) s8-)
-(sb-simd-test-suite:define-simple-simd-test s8.16= (u8.16) (s8.16 &rest s8.16) s8=)
-(sb-simd-test-suite:define-simple-simd-test s8.16/= (u8.16) (s8.16 &rest s8.16) s8/=)
-(sb-simd-test-suite:define-simple-simd-test s8.16< (u8.16) (s8.16 &rest s8.16) s8<)
-(sb-simd-test-suite:define-simple-simd-test s8.16<= (u8.16) (s8.16 &rest s8.16) s8<=)
-(sb-simd-test-suite:define-simple-simd-test s8.16> (u8.16) (s8.16 &rest s8.16) s8>)
-(sb-simd-test-suite:define-simple-simd-test s8.16>= (u8.16) (s8.16 &rest s8.16) s8>=)
-
-(sb-simd-test-suite:define-simple-simd-test s16.8-and (s16.8) (&rest s16.8) s16-and)
-(sb-simd-test-suite:define-simple-simd-test s16.8-or (s16.8) (&rest s16.8) s16-or)
-(sb-simd-test-suite:define-simple-simd-test s16.8-xor (s16.8) (&rest s16.8) s16-xor)
-(sb-simd-test-suite:define-simple-simd-test s16.8-andc1 (s16.8) (s16.8 s16.8) s16-andc1)
-(sb-simd-test-suite:define-simple-simd-test s16.8-not (s16.8) (s16.8) s16-not)
-(sb-simd-test-suite:define-simple-simd-test s16.8+ (s16.8) (&rest s16.8) s16+)
-(sb-simd-test-suite:define-simple-simd-test s16.8- (s16.8) (s16.8 &rest s16.8) s16-)
-(sb-simd-test-suite:define-simple-simd-test s16.8= (u16.8) (s16.8 &rest s16.8) s16=)
-(sb-simd-test-suite:define-simple-simd-test s16.8/= (u16.8) (s16.8 &rest s16.8) s16/=)
-(sb-simd-test-suite:define-simple-simd-test s16.8< (u16.8) (s16.8 &rest s16.8) s16<)
-(sb-simd-test-suite:define-simple-simd-test s16.8<= (u16.8) (s16.8 &rest s16.8) s16<=)
-(sb-simd-test-suite:define-simple-simd-test s16.8> (u16.8) (s16.8 &rest s16.8) s16>)
-(sb-simd-test-suite:define-simple-simd-test s16.8>= (u16.8) (s16.8 &rest s16.8) s16>=)
-
-(sb-simd-test-suite:define-simple-simd-test s32.4-and (s32.4) (&rest s32.4) s32-and)
-(sb-simd-test-suite:define-simple-simd-test s32.4-or (s32.4) (&rest s32.4) s32-or)
-(sb-simd-test-suite:define-simple-simd-test s32.4-xor (s32.4) (&rest s32.4) s32-xor)
-(sb-simd-test-suite:define-simple-simd-test s32.4-andc1 (s32.4) (s32.4 s32.4) s32-andc1)
-(sb-simd-test-suite:define-simple-simd-test s32.4-not (s32.4) (s32.4) s32-not)
-(sb-simd-test-suite:define-simple-simd-test s32.4+ (s32.4) (&rest s32.4) s32+)
-(sb-simd-test-suite:define-simple-simd-test s32.4- (s32.4) (s32.4 &rest s32.4) s32-)
-(sb-simd-test-suite:define-simple-simd-test s32.4= (u32.4) (s32.4 &rest s32.4) s32=)
-(sb-simd-test-suite:define-simple-simd-test s32.4/= (u32.4) (s32.4 &rest s32.4) s32/=)
-(sb-simd-test-suite:define-simple-simd-test s32.4< (u32.4) (s32.4 &rest s32.4) s32<)
-(sb-simd-test-suite:define-simple-simd-test s32.4<= (u32.4) (s32.4 &rest s32.4) s32<=)
-(sb-simd-test-suite:define-simple-simd-test s32.4> (u32.4) (s32.4 &rest s32.4) s32>)
-(sb-simd-test-suite:define-simple-simd-test s32.4>= (u32.4) (s32.4 &rest s32.4) s32>=)
-
-(sb-simd-test-suite:define-simple-simd-test s64.2-and (s64.2) (&rest s64.2) s64-and)
-(sb-simd-test-suite:define-simple-simd-test s64.2-or (s64.2) (&rest s64.2) s64-or)
-(sb-simd-test-suite:define-simple-simd-test s64.2-xor (s64.2) (&rest s64.2) s64-xor)
-(sb-simd-test-suite:define-simple-simd-test s64.2-andc1 (s64.2) (s64.2 s64.2) s64-andc1)
-(sb-simd-test-suite:define-simple-simd-test s64.2-not (s64.2) (s64.2) s64-not)
-(sb-simd-test-suite:define-simple-simd-test s64.2+ (s64.2) (&rest s64.2) s64+)
-(sb-simd-test-suite:define-simple-simd-test s64.2- (s64.2) (s64.2 &rest s64.2) s64-)
-(sb-simd-test-suite:define-simple-simd-test s64.2= (u64.2) (s64.2 &rest s64.2) s64=)
-(sb-simd-test-suite:define-simple-simd-test s64.2< (u64.2) (s64.2 &rest s64.2) s64<)
-(sb-simd-test-suite:define-simple-simd-test s64.2<= (u64.2) (s64.2 &rest s64.2) s64<=)
-(sb-simd-test-suite:define-simple-simd-test s64.2> (u64.2) (s64.2 &rest s64.2) s64>)
-(sb-simd-test-suite:define-simple-simd-test s64.2>= (u64.2) (s64.2 &rest s64.2) s64>=)
diff --git a/contrib/sb-simd/test-suite/test-simple-simd-functions.lisp b/contrib/sb-simd/test-suite/test-simple-simd-functions.lisp
index 6ee0307aa..64d8b0c1f 100644
--- a/contrib/sb-simd/test-suite/test-simple-simd-functions.lisp
+++ b/contrib/sb-simd/test-suite/test-simple-simd-functions.lisp
@@ -33,660 +33,3 @@
for output-symbol in output-symbols
collect
`(is (simd= ,result-symbol ,output-symbol))))))))))
-
-(in-package #:sb-simd-sse)
-
-(sb-simd-test-suite:define-simple-simd-test f32.4-and (f32.4) (&rest f32.4) f32-and)
-(sb-simd-test-suite:define-simple-simd-test f32.4-or (f32.4) (&rest f32.4) f32-or)
-(sb-simd-test-suite:define-simple-simd-test f32.4-xor (f32.4) (&rest f32.4) f32-xor)
-(sb-simd-test-suite:define-simple-simd-test f32.4-andc1 (f32.4) (f32.4 f32.4) f32-andc1)
-(sb-simd-test-suite:define-simple-simd-test f32.4-not (f32.4) (f32.4) f32-not)
-(sb-simd-test-suite:define-simple-simd-test f32.4-max (f32.4) (f32.4 &rest f32.4) f32-max)
-(sb-simd-test-suite:define-simple-simd-test f32.4-min (f32.4) (f32.4 &rest f32.4) f32-min)
-(sb-simd-test-suite:define-simple-simd-test f32.4+ (f32.4) (&rest f32.4) f32+)
-(sb-simd-test-suite:define-simple-simd-test f32.4- (f32.4) (f32.4 &rest f32.4) f32-)
-(sb-simd-test-suite:define-simple-simd-test f32.4* (f32.4) (&rest f32.4) f32*)
-(sb-simd-test-suite:define-simple-simd-test f32.4/ (f32.4) (f32.4 &rest f32.4) f32/)
-
-(in-package #:sb-simd-sse2)
-
-(sb-simd-test-suite:define-simple-simd-test f32.4= (u32.4) (f32.4 &rest f32.4) f32=)
-(sb-simd-test-suite:define-simple-simd-test f32.4/= (u32.4) (f32.4 &rest f32.4) f32/=)
-(sb-simd-test-suite:define-simple-simd-test f32.4< (u32.4) (f32.4 &rest f32.4) f32<)
-(sb-simd-test-suite:define-simple-simd-test f32.4<= (u32.4) (f32.4 &rest f32.4) f32<=)
-(sb-simd-test-suite:define-simple-simd-test f32.4> (u32.4) (f32.4 &rest f32.4) f32>)
-(sb-simd-test-suite:define-simple-simd-test f32.4>= (u32.4) (f32.4 &rest f32.4) f32>=)
-
-(sb-simd-test-suite:define-simple-simd-test f64.2-and (f64.2) (&rest f64.2) f64-and)
-(sb-simd-test-suite:define-simple-simd-test f64.2-or (f64.2) (&rest f64.2) f64-or)
-(sb-simd-test-suite:define-simple-simd-test f64.2-xor (f64.2) (&rest f64.2) f64-xor)
-(sb-simd-test-suite:define-simple-simd-test f64.2-andc1 (f64.2) (f64.2 f64.2) f64-andc1)
-(sb-simd-test-suite:define-simple-simd-test f64.2-not (f64.2) (f64.2) f64-not)
-(sb-simd-test-suite:define-simple-simd-test f64.2-max (f64.2) (f64.2 &rest f64.2) f64-max)
-(sb-simd-test-suite:define-simple-simd-test f64.2-min (f64.2) (f64.2 &rest f64.2) f64-min)
-(sb-simd-test-suite:define-simple-simd-test f64.2+ (f64.2) (&rest f64.2) f64+)
-(sb-simd-test-suite:define-simple-simd-test f64.2- (f64.2) (f64.2 &rest f64.2) f64-)
-(sb-simd-test-suite:define-simple-simd-test f64.2* (f64.2) (&rest f64.2) f64*)
-(sb-simd-test-suite:define-simple-simd-test f64.2/ (f64.2) (f64.2 &rest f64.2) f64/)
-(sb-simd-test-suite:define-simple-simd-test f64.2= (u64.2) (f64.2 &rest f64.2) f64=)
-(sb-simd-test-suite:define-simple-simd-test f64.2/= (u64.2) (f64.2 &rest f64.2) f64/=)
-(sb-simd-test-suite:define-simple-simd-test f64.2< (u64.2) (f64.2 &rest f64.2) f64<)
-(sb-simd-test-suite:define-simple-simd-test f64.2<= (u64.2) (f64.2 &rest f64.2) f64<=)
-(sb-simd-test-suite:define-simple-simd-test f64.2> (u64.2) (f64.2 &rest f64.2) f64>)
-(sb-simd-test-suite:define-simple-simd-test f64.2>= (u64.2) (f64.2 &rest f64.2) f64>=)
-
-(sb-simd-test-suite:define-simple-simd-test u8.16-and (u8.16) (&rest u8.16) u8-and)
-(sb-simd-test-suite:define-simple-simd-test u8.16-or (u8.16) (&rest u8.16) u8-or)
-(sb-simd-test-suite:define-simple-simd-test u8.16-xor (u8.16) (&rest u8.16) u8-xor)
-(sb-simd-test-suite:define-simple-simd-test u8.16-andc1 (u8.16) (u8.16 u8.16) u8-andc1)
-(sb-simd-test-suite:define-simple-simd-test u8.16-not (u8.16) (u8.16) u8-not)
-(sb-simd-test-suite:define-simple-simd-test u8.16+ (u8.16) (&rest u8.16) u8+)
-(sb-simd-test-suite:define-simple-simd-test u8.16- (u8.16) (u8.16 &rest u8.16) u8-)
-(sb-simd-test-suite:define-simple-simd-test u8.16= (u8.16) (u8.16 &rest u8.16) u8=)
-(sb-simd-test-suite:define-simple-simd-test u8.16/= (u8.16) (u8.16 &rest u8.16) u8/=)
-(sb-simd-test-suite:define-simple-simd-test u8.16< (u8.16) (u8.16 &rest u8.16) u8<)
-(sb-simd-test-suite:define-simple-simd-test u8.16<= (u8.16) (u8.16 &rest u8.16) u8<=)
-(sb-simd-test-suite:define-simple-simd-test u8.16> (u8.16) (u8.16 &rest u8.16) u8>)
-(sb-simd-test-suite:define-simple-simd-test u8.16>= (u8.16) (u8.16 &rest u8.16) u8>=)
-
-(sb-simd-test-suite:define-simple-simd-test u16.8-and (u16.8) (&rest u16.8) u16-and)
-(sb-simd-test-suite:define-simple-simd-test u16.8-or (u16.8) (&rest u16.8) u16-or)
-(sb-simd-test-suite:define-simple-simd-test u16.8-xor (u16.8) (&rest u16.8) u16-xor)
-(sb-simd-test-suite:define-simple-simd-test u16.8-andc1 (u16.8) (u16.8 u16.8) u16-andc1)
-(sb-simd-test-suite:define-simple-simd-test u16.8-not (u16.8) (u16.8) u16-not)
-(sb-simd-test-suite:define-simple-simd-test u16.8+ (u16.8) (&rest u16.8) u16+)
-(sb-simd-test-suite:define-simple-simd-test u16.8- (u16.8) (u16.8 &rest u16.8) u16-)
-(sb-simd-test-suite:define-simple-simd-test u16.8= (u16.8) (u16.8 &rest u16.8) u16=)
-(sb-simd-test-suite:define-simple-simd-test u16.8/= (u16.8) (u16.8 &rest u16.8) u16/=)
-(sb-simd-test-suite:define-simple-simd-test u16.8< (u16.8) (u16.8 &rest u16.8) u16<)
-(sb-simd-test-suite:define-simple-simd-test u16.8<= (u16.8) (u16.8 &rest u16.8) u16<=)
-(sb-simd-test-suite:define-simple-simd-test u16.8> (u16.8) (u16.8 &rest u16.8) u16>)
-(sb-simd-test-suite:define-simple-simd-test u16.8>= (u16.8) (u16.8 &rest u16.8) u16>=)
-
-(sb-simd-test-suite:define-simple-simd-test u32.4-and (u32.4) (&rest u32.4) u32-and)
-(sb-simd-test-suite:define-simple-simd-test u32.4-or (u32.4) (&rest u32.4) u32-or)
-(sb-simd-test-suite:define-simple-simd-test u32.4-xor (u32.4) (&rest u32.4) u32-xor)
-(sb-simd-test-suite:define-simple-simd-test u32.4-andc1 (u32.4) (u32.4 u32.4) u32-andc1)
-(sb-simd-test-suite:define-simple-simd-test u32.4-not (u32.4) (u32.4) u32-not)
-(sb-simd-test-suite:define-simple-simd-test u32.4+ (u32.4) (&rest u32.4) u32+)
-(sb-simd-test-suite:define-simple-simd-test u32.4- (u32.4) (u32.4 &rest u32.4) u32-)
-(sb-simd-test-suite:define-simple-simd-test u32.4= (u32.4) (u32.4 &rest u32.4) u32=)
-(sb-simd-test-suite:define-simple-simd-test u32.4/= (u32.4) (u32.4 &rest u32.4) u32/=)
-(sb-simd-test-suite:define-simple-simd-test u32.4< (u32.4) (u32.4 &rest u32.4) u32<)
-(sb-simd-test-suite:define-simple-simd-test u32.4<= (u32.4) (u32.4 &rest u32.4) u32<=)
-(sb-simd-test-suite:define-simple-simd-test u32.4> (u32.4) (u32.4 &rest u32.4) u32>)
-(sb-simd-test-suite:define-simple-simd-test u32.4>= (u32.4) (u32.4 &rest u32.4) u32>=)
-
-(sb-simd-test-suite:define-simple-simd-test u64.2-and (u64.2) (&rest u64.2) u64-and)
-(sb-simd-test-suite:define-simple-simd-test u64.2-or (u64.2) (&rest u64.2) u64-or)
-(sb-simd-test-suite:define-simple-simd-test u64.2-xor (u64.2) (&rest u64.2) u64-xor)
-(sb-simd-test-suite:define-simple-simd-test u64.2-andc1 (u64.2) (u64.2 u64.2) u64-andc1)
-(sb-simd-test-suite:define-simple-simd-test u64.2-not (u64.2) (u64.2) u64-not)
-(sb-simd-test-suite:define-simple-simd-test u64.2+ (u64.2) (&rest u64.2) u64+)
-(sb-simd-test-suite:define-simple-simd-test u64.2- (u64.2) (u64.2 &rest u64.2) u64-)
-
-(sb-simd-test-suite:define-simple-simd-test s8.16-and (s8.16) (&rest s8.16) s8-and)
-(sb-simd-test-suite:define-simple-simd-test s8.16-or (s8.16) (&rest s8.16) s8-or)
-(sb-simd-test-suite:define-simple-simd-test s8.16-xor (s8.16) (&rest s8.16) s8-xor)
-(sb-simd-test-suite:define-simple-simd-test s8.16-andc1 (s8.16) (s8.16 s8.16) s8-andc1)
-(sb-simd-test-suite:define-simple-simd-test s8.16-not (s8.16) (s8.16) s8-not)
-(sb-simd-test-suite:define-simple-simd-test s8.16+ (s8.16) (&rest s8.16) s8+)
-(sb-simd-test-suite:define-simple-simd-test s8.16- (s8.16) (s8.16 &rest s8.16) s8-)
-(sb-simd-test-suite:define-simple-simd-test s8.16= (u8.16) (s8.16 &rest s8.16) s8=)
-(sb-simd-test-suite:define-simple-simd-test s8.16/= (u8.16) (s8.16 &rest s8.16) s8/=)
-(sb-simd-test-suite:define-simple-simd-test s8.16< (u8.16) (s8.16 &rest s8.16) s8<)
-(sb-simd-test-suite:define-simple-simd-test s8.16<= (u8.16) (s8.16 &rest s8.16) s8<=)
-(sb-simd-test-suite:define-simple-simd-test s8.16> (u8.16) (s8.16 &rest s8.16) s8>)
-(sb-simd-test-suite:define-simple-simd-test s8.16>= (u8.16) (s8.16 &rest s8.16) s8>=)
-
-(sb-simd-test-suite:define-simple-simd-test s16.8-and (s16.8) (&rest s16.8) s16-and)
-(sb-simd-test-suite:define-simple-simd-test s16.8-or (s16.8) (&rest s16.8) s16-or)
-(sb-simd-test-suite:define-simple-simd-test s16.8-xor (s16.8) (&rest s16.8) s16-xor)
-(sb-simd-test-suite:define-simple-simd-test s16.8-andc1 (s16.8) (s16.8 s16.8) s16-andc1)
-(sb-simd-test-suite:define-simple-simd-test s16.8-not (s16.8) (s16.8) s16-not)
-(sb-simd-test-suite:define-simple-simd-test s16.8+ (s16.8) (&rest s16.8) s16+)
-(sb-simd-test-suite:define-simple-simd-test s16.8- (s16.8) (s16.8 &rest s16.8) s16-)
-(sb-simd-test-suite:define-simple-simd-test s16.8= (u16.8) (s16.8 &rest s16.8) s16=)
-(sb-simd-test-suite:define-simple-simd-test s16.8/= (u16.8) (s16.8 &rest s16.8) s16/=)
-(sb-simd-test-suite:define-simple-simd-test s16.8< (u16.8) (s16.8 &rest s16.8) s16<)
-(sb-simd-test-suite:define-simple-simd-test s16.8<= (u16.8) (s16.8 &rest s16.8) s16<=)
-(sb-simd-test-suite:define-simple-simd-test s16.8> (u16.8) (s16.8 &rest s16.8) s16>)
-(sb-simd-test-suite:define-simple-simd-test s16.8>= (u16.8) (s16.8 &rest s16.8) s16>=)
-
-(sb-simd-test-suite:define-simple-simd-test s32.4-and (s32.4) (&rest s32.4) s32-and)
-(sb-simd-test-suite:define-simple-simd-test s32.4-or (s32.4) (&rest s32.4) s32-or)
-(sb-simd-test-suite:define-simple-simd-test s32.4-xor (s32.4) (&rest s32.4) s32-xor)
-(sb-simd-test-suite:define-simple-simd-test s32.4-andc1 (s32.4) (s32.4 s32.4) s32-andc1)
-(sb-simd-test-suite:define-simple-simd-test s32.4-not (s32.4) (s32.4) s32-not)
-(sb-simd-test-suite:define-simple-simd-test s32.4+ (s32.4) (&rest s32.4) s32+)
-(sb-simd-test-suite:define-simple-simd-test s32.4- (s32.4) (s32.4 &rest s32.4) s32-)
-(sb-simd-test-suite:define-simple-simd-test s32.4= (u32.4) (s32.4 &rest s32.4) s32=)
-(sb-simd-test-suite:define-simple-simd-test s32.4/= (u32.4) (s32.4 &rest s32.4) s32/=)
-(sb-simd-test-suite:define-simple-simd-test s32.4< (u32.4) (s32.4 &rest s32.4) s32<)
-(sb-simd-test-suite:define-simple-simd-test s32.4<= (u32.4) (s32.4 &rest s32.4) s32<=)
-(sb-simd-test-suite:define-simple-simd-test s32.4> (u32.4) (s32.4 &rest s32.4) s32>)
-(sb-simd-test-suite:define-simple-simd-test s32.4>= (u32.4) (s32.4 &rest s32.4) s32>=)
-
-(sb-simd-test-suite:define-simple-simd-test s64.2-and (s64.2) (&rest s64.2) s64-and)
-(sb-simd-test-suite:define-simple-simd-test s64.2-or (s64.2) (&rest s64.2) s64-or)
-(sb-simd-test-suite:define-simple-simd-test s64.2-xor (s64.2) (&rest s64.2) s64-xor)
-(sb-simd-test-suite:define-simple-simd-test s64.2-andc1 (s64.2) (s64.2 s64.2) s64-andc1)
-(sb-simd-test-suite:define-simple-simd-test s64.2-not (s64.2) (s64.2) s64-not)
-(sb-simd-test-suite:define-simple-simd-test s64.2+ (s64.2) (&rest s64.2) s64+)
-(sb-simd-test-suite:define-simple-simd-test s64.2- (s64.2) (s64.2 &rest s64.2) s64-)
-
-(in-package #:sb-simd-sse4.1)
-
-(sb-simd-test-suite:define-simple-simd-test f32.4-if (f32.4) (u32.4 f32.4 f32.4) f32-if)
-(sb-simd-test-suite:define-simple-simd-test f64.2-if (f64.2) (u64.2 f64.2 f64.2) f64-if)
-(sb-simd-test-suite:define-simple-simd-test u8.16-if (u8.16) (u8.16 u8.16 u8.16) u8-if)
-(sb-simd-test-suite:define-simple-simd-test u16.8-if (u16.8) (u16.8 u16.8 u16.8) u16-if)
-(sb-simd-test-suite:define-simple-simd-test u32.4-if (u32.4) (u32.4 u32.4 u32.4) u32-if)
-(sb-simd-test-suite:define-simple-simd-test u64.2-if (u64.2) (u64.2 u64.2 u64.2) u64-if)
-(sb-simd-test-suite:define-simple-simd-test s8.16-if (s8.16) (u8.16 s8.16 s8.16) s8-if)
-(sb-simd-test-suite:define-simple-simd-test s16.8-if (s16.8) (u16.8 s16.8 s16.8) s16-if)
-(sb-simd-test-suite:define-simple-simd-test s32.4-if (s32.4) (u32.4 s32.4 s32.4) s32-if)
-(sb-simd-test-suite:define-simple-simd-test s64.2-if (s64.2) (u64.2 s64.2 s64.2) s64-if)
-
-(sb-simd-test-suite:define-simple-simd-test u64.2= (u64.2) (u64.2 &rest u64.2) u64=)
-(sb-simd-test-suite:define-simple-simd-test u64.2/= (u64.2) (u64.2 &rest u64.2) u64/=)
-
-(sb-simd-test-suite:define-simple-simd-test s64.2= (u64.2) (s64.2 &rest s64.2) s64=)
-(sb-simd-test-suite:define-simple-simd-test s64.2/= (u64.2) (s64.2 &rest s64.2) s64/=)
-
-(in-package #:sb-simd-sse4.2)
-
-(sb-simd-test-suite:define-simple-simd-test u64.2< (u64.2) (u64.2 &rest u64.2) u64<)
-(sb-simd-test-suite:define-simple-simd-test u64.2<= (u64.2) (u64.2 &rest u64.2) u64<=)
-(sb-simd-test-suite:define-simple-simd-test u64.2> (u64.2) (u64.2 &rest u64.2) u64>)
-(sb-simd-test-suite:define-simple-simd-test u64.2>= (u64.2) (u64.2 &rest u64.2) u64>=)
-
-(sb-simd-test-suite:define-simple-simd-test s64.2< (u64.2) (s64.2 &rest s64.2) s64<)
-(sb-simd-test-suite:define-simple-simd-test s64.2<= (u64.2) (s64.2 &rest s64.2) s64<=)
-(sb-simd-test-suite:define-simple-simd-test s64.2> (u64.2) (s64.2 &rest s64.2) s64>)
-(sb-simd-test-suite:define-simple-simd-test s64.2>= (u64.2) (s64.2 &rest s64.2) s64>=)
-
-(in-package #:sb-simd-avx)
-
-(sb-simd-test-suite:define-simple-simd-test f32.4-if (f32.4) (u32.4 f32.4 f32.4) f32-if)
-(sb-simd-test-suite:define-simple-simd-test f32.4-and (f32.4) (&rest f32.4) f32-and)
-(sb-simd-test-suite:define-simple-simd-test f32.4-or (f32.4) (&rest f32.4) f32-or)
-(sb-simd-test-suite:define-simple-simd-test f32.4-xor (f32.4) (&rest f32.4) f32-xor)
-(sb-simd-test-suite:define-simple-simd-test f32.4-andc1 (f32.4) (f32.4 f32.4) f32-andc1)
-(sb-simd-test-suite:define-simple-simd-test f32.4-not (f32.4) (f32.4) f32-not)
-(sb-simd-test-suite:define-simple-simd-test f32.4-max (f32.4) (f32.4 &rest f32.4) f32-max)
-(sb-simd-test-suite:define-simple-simd-test f32.4-min (f32.4) (f32.4 &rest f32.4) f32-min)
-(sb-simd-test-suite:define-simple-simd-test f32.4+ (f32.4) (&rest f32.4) f32+)
-(sb-simd-test-suite:define-simple-simd-test f32.4- (f32.4) (f32.4 &rest f32.4) f32-)
-(sb-simd-test-suite:define-simple-simd-test f32.4* (f32.4) (&rest f32.4) f32*)
-(sb-simd-test-suite:define-simple-simd-test f32.4/ (f32.4) (f32.4 &rest f32.4) f32/)
-(sb-simd-test-suite:define-simple-simd-test f32.4= (u32.4) (f32.4 &rest f32.4) f32=)
-(sb-simd-test-suite:define-simple-simd-test f32.4/= (u32.4) (f32.4 &rest f32.4) f32/=)
-(sb-simd-test-suite:define-simple-simd-test f32.4< (u32.4) (f32.4 &rest f32.4) f32<)
-(sb-simd-test-suite:define-simple-simd-test f32.4<= (u32.4) (f32.4 &rest f32.4) f32<=)
-(sb-simd-test-suite:define-simple-simd-test f32.4> (u32.4) (f32.4 &rest f32.4) f32>)
-(sb-simd-test-suite:define-simple-simd-test f32.4>= (u32.4) (f32.4 &rest f32.4) f32>=)
-
-(sb-simd-test-suite:define-simple-simd-test f32.8-if (f32.8) (u32.8 f32.8 f32.8) f32-if)
-(sb-simd-test-suite:define-simple-simd-test f32.8-and (f32.8) (&rest f32.8) f32-and)
-(sb-simd-test-suite:define-simple-simd-test f32.8-or (f32.8) (&rest f32.8) f32-or)
-(sb-simd-test-suite:define-simple-simd-test f32.8-xor (f32.8) (&rest f32.8) f32-xor)
-(sb-simd-test-suite:define-simple-simd-test f32.8-andc1 (f32.8) (f32.8 f32.8) f32-andc1)
-(sb-simd-test-suite:define-simple-simd-test f32.8-not (f32.8) (f32.8) f32-not)
-(sb-simd-test-suite:define-simple-simd-test f32.8-max (f32.8) (f32.8 &rest f32.8) f32-max)
-(sb-simd-test-suite:define-simple-simd-test f32.8-min (f32.8) (f32.8 &rest f32.8) f32-min)
-(sb-simd-test-suite:define-simple-simd-test f32.8+ (f32.8) (&rest f32.8) f32+)
-(sb-simd-test-suite:define-simple-simd-test f32.8- (f32.8) (f32.8 &rest f32.8) f32-)
-(sb-simd-test-suite:define-simple-simd-test f32.8* (f32.8) (&rest f32.8) f32*)
-(sb-simd-test-suite:define-simple-simd-test f32.8/ (f32.8) (f32.8 &rest f32.8) f32/)
-(sb-simd-test-suite:define-simple-simd-test f32.8= (u32.8) (f32.8 &rest f32.8) f32=)
-(sb-simd-test-suite:define-simple-simd-test f32.8/= (u32.8) (f32.8 &rest f32.8) f32/=)
-(sb-simd-test-suite:define-simple-simd-test f32.8< (u32.8) (f32.8 &rest f32.8) f32<)
-(sb-simd-test-suite:define-simple-simd-test f32.8<= (u32.8) (f32.8 &rest f32.8) f32<=)
-(sb-simd-test-suite:define-simple-simd-test f32.8> (u32.8) (f32.8 &rest f32.8) f32>)
-(sb-simd-test-suite:define-simple-simd-test f32.8>= (u32.8) (f32.8 &rest f32.8) f32>=)
-
-(sb-simd-test-suite:define-simple-simd-test f64.2-if (f64.2) (u64.2 f64.2 f64.2) f64-if)
-(sb-simd-test-suite:define-simple-simd-test f64.2-and (f64.2) (&rest f64.2) f64-and)
-(sb-simd-test-suite:define-simple-simd-test f64.2-or (f64.2) (&rest f64.2) f64-or)
-(sb-simd-test-suite:define-simple-simd-test f64.2-xor (f64.2) (&rest f64.2) f64-xor)
-(sb-simd-test-suite:define-simple-simd-test f64.2-andc1 (f64.2) (f64.2 f64.2) f64-andc1)
-(sb-simd-test-suite:define-simple-simd-test f64.2-not (f64.2) (f64.2) f64-not)
-(sb-simd-test-suite:define-simple-simd-test f64.2-max (f64.2) (f64.2 &rest f64.2) f64-max)
-(sb-simd-test-suite:define-simple-simd-test f64.2-min (f64.2) (f64.2 &rest f64.2) f64-min)
-(sb-simd-test-suite:define-simple-simd-test f64.2+ (f64.2) (&rest f64.2) f64+)
-(sb-simd-test-suite:define-simple-simd-test f64.2- (f64.2) (f64.2 &rest f64.2) f64-)
-(sb-simd-test-suite:define-simple-simd-test f64.2* (f64.2) (&rest f64.2) f64*)
-(sb-simd-test-suite:define-simple-simd-test f64.2/ (f64.2) (f64.2 &rest f64.2) f64/)
-(sb-simd-test-suite:define-simple-simd-test f64.2= (u64.2) (f64.2 &rest f64.2) f64=)
-(sb-simd-test-suite:define-simple-simd-test f64.2/= (u64.2) (f64.2 &rest f64.2) f64/=)
-(sb-simd-test-suite:define-simple-simd-test f64.2< (u64.2) (f64.2 &rest f64.2) f64<)
-(sb-simd-test-suite:define-simple-simd-test f64.2<= (u64.2) (f64.2 &rest f64.2) f64<=)
-(sb-simd-test-suite:define-simple-simd-test f64.2> (u64.2) (f64.2 &rest f64.2) f64>)
-(sb-simd-test-suite:define-simple-simd-test f64.2>= (u64.2) (f64.2 &rest f64.2) f64>=)
-
-(sb-simd-test-suite:define-simple-simd-test f64.4-if (f64.4) (u64.4 f64.4 f64.4) f64-if)
-(sb-simd-test-suite:define-simple-simd-test f64.4-and (f64.4) (&rest f64.4) f64-and)
-(sb-simd-test-suite:define-simple-simd-test f64.4-or (f64.4) (&rest f64.4) f64-or)
-(sb-simd-test-suite:define-simple-simd-test f64.4-xor (f64.4) (&rest f64.4) f64-xor)
-(sb-simd-test-suite:define-simple-simd-test f64.4-andc1 (f64.4) (f64.4 f64.4) f64-andc1)
-(sb-simd-test-suite:define-simple-simd-test f64.4-not (f64.4) (f64.4) f64-not)
-(sb-simd-test-suite:define-simple-simd-test f64.4-max (f64.4) (f64.4 &rest f64.4) f64-max)
-(sb-simd-test-suite:define-simple-simd-test f64.4-min (f64.4) (f64.4 &rest f64.4) f64-min)
-(sb-simd-test-suite:define-simple-simd-test f64.4+ (f64.4) (&rest f64.4) f64+)
-(sb-simd-test-suite:define-simple-simd-test f64.4- (f64.4) (f64.4 &rest f64.4) f64-)
-(sb-simd-test-suite:define-simple-simd-test f64.4* (f64.4) (&rest f64.4) f64*)
-(sb-simd-test-suite:define-simple-simd-test f64.4/ (f64.4) (f64.4 &rest f64.4) f64/)
-(sb-simd-test-suite:define-simple-simd-test f64.4= (u64.4) (f64.4 &rest f64.4) f64=)
-(sb-simd-test-suite:define-simple-simd-test f64.4/= (u64.4) (f64.4 &rest f64.4) f64/=)
-(sb-simd-test-suite:define-simple-simd-test f64.4< (u64.4) (f64.4 &rest f64.4) f64<)
-(sb-simd-test-suite:define-simple-simd-test f64.4<= (u64.4) (f64.4 &rest f64.4) f64<=)
-(sb-simd-test-suite:define-simple-simd-test f64.4> (u64.4) (f64.4 &rest f64.4) f64>)
-(sb-simd-test-suite:define-simple-simd-test f64.4>= (u64.4) (f64.4 &rest f64.4) f64>=)
-
-(sb-simd-test-suite:define-simple-simd-test u8.16-if (u8.16) (u8.16 u8.16 u8.16) u8-if)
-(sb-simd-test-suite:define-simple-simd-test u8.16-and (u8.16) (&rest u8.16) u8-and)
-(sb-simd-test-suite:define-simple-simd-test u8.16-or (u8.16) (&rest u8.16) u8-or)
-(sb-simd-test-suite:define-simple-simd-test u8.16-xor (u8.16) (&rest u8.16) u8-xor)
-(sb-simd-test-suite:define-simple-simd-test u8.16-andc1 (u8.16) (u8.16 u8.16) u8-andc1)
-(sb-simd-test-suite:define-simple-simd-test u8.16-not (u8.16) (u8.16) u8-not)
-(sb-simd-test-suite:define-simple-simd-test u8.16+ (u8.16) (&rest u8.16) u8+)
-(sb-simd-test-suite:define-simple-simd-test u8.16- (u8.16) (u8.16 &rest u8.16) u8-)
-(sb-simd-test-suite:define-simple-simd-test u8.16= (u8.16) (u8.16 &rest u8.16) u8=)
-(sb-simd-test-suite:define-simple-simd-test u8.16/= (u8.16) (u8.16 &rest u8.16) u8/=)
-(sb-simd-test-suite:define-simple-simd-test u8.16< (u8.16) (u8.16 &rest u8.16) u8<)
-(sb-simd-test-suite:define-simple-simd-test u8.16<= (u8.16) (u8.16 &rest u8.16) u8<=)
-(sb-simd-test-suite:define-simple-simd-test u8.16> (u8.16) (u8.16 &rest u8.16) u8>)
-(sb-simd-test-suite:define-simple-simd-test u8.16>= (u8.16) (u8.16 &rest u8.16) u8>=)
-
-(sb-simd-test-suite:define-simple-simd-test u16.8-if (u16.8) (u16.8 u16.8 u16.8) u16-if)
-(sb-simd-test-suite:define-simple-simd-test u16.8-and (u16.8) (&rest u16.8) u16-and)
-(sb-simd-test-suite:define-simple-simd-test u16.8-or (u16.8) (&rest u16.8) u16-or)
-(sb-simd-test-suite:define-simple-simd-test u16.8-xor (u16.8) (&rest u16.8) u16-xor)
-(sb-simd-test-suite:define-simple-simd-test u16.8-andc1 (u16.8) (u16.8 u16.8) u16-andc1)
-(sb-simd-test-suite:define-simple-simd-test u16.8-not (u16.8) (u16.8) u16-not)
-(sb-simd-test-suite:define-simple-simd-test u16.8+ (u16.8) (&rest u16.8) u16+)
-(sb-simd-test-suite:define-simple-simd-test u16.8- (u16.8) (u16.8 &rest u16.8) u16-)
-(sb-simd-test-suite:define-simple-simd-test u16.8= (u16.8) (u16.8 &rest u16.8) u16=)
-(sb-simd-test-suite:define-simple-simd-test u16.8/= (u16.8) (u16.8 &rest u16.8) u16/=)
-(sb-simd-test-suite:define-simple-simd-test u16.8< (u16.8) (u16.8 &rest u16.8) u16<)
-(sb-simd-test-suite:define-simple-simd-test u16.8<= (u16.8) (u16.8 &rest u16.8) u16<=)
-(sb-simd-test-suite:define-simple-simd-test u16.8> (u16.8) (u16.8 &rest u16.8) u16>)
-(sb-simd-test-suite:define-simple-simd-test u16.8>= (u16.8) (u16.8 &rest u16.8) u16>=)
-
-(sb-simd-test-suite:define-simple-simd-test u32.4-if (u32.4) (u32.4 u32.4 u32.4) u32-if)
-(sb-simd-test-suite:define-simple-simd-test u32.4-and (u32.4) (&rest u32.4) u32-and)
-(sb-simd-test-suite:define-simple-simd-test u32.4-or (u32.4) (&rest u32.4) u32-or)
-(sb-simd-test-suite:define-simple-simd-test u32.4-xor (u32.4) (&rest u32.4) u32-xor)
-(sb-simd-test-suite:define-simple-simd-test u32.4-andc1 (u32.4) (u32.4 u32.4) u32-andc1)
-(sb-simd-test-suite:define-simple-simd-test u32.4-not (u32.4) (u32.4) u32-not)
-(sb-simd-test-suite:define-simple-simd-test u32.4+ (u32.4) (&rest u32.4) u32+)
-(sb-simd-test-suite:define-simple-simd-test u32.4- (u32.4) (u32.4 &rest u32.4) u32-)
-(sb-simd-test-suite:define-simple-simd-test u32.4= (u32.4) (u32.4 &rest u32.4) u32=)
-(sb-simd-test-suite:define-simple-simd-test u32.4/= (u32.4) (u32.4 &rest u32.4) u32/=)
-(sb-simd-test-suite:define-simple-simd-test u32.4< (u32.4) (u32.4 &rest u32.4) u32<)
-(sb-simd-test-suite:define-simple-simd-test u32.4<= (u32.4) (u32.4 &rest u32.4) u32<=)
-(sb-simd-test-suite:define-simple-simd-test u32.4> (u32.4) (u32.4 &rest u32.4) u32>)
-(sb-simd-test-suite:define-simple-simd-test u32.4>= (u32.4) (u32.4 &rest u32.4) u32>=)
-
-(sb-simd-test-suite:define-simple-simd-test u64.2-if (u64.2) (u64.2 u64.2 u64.2) u64-if)
-(sb-simd-test-suite:define-simple-simd-test u64.2-and (u64.2) (&rest u64.2) u64-and)
-(sb-simd-test-suite:define-simple-simd-test u64.2-or (u64.2) (&rest u64.2) u64-or)
-(sb-simd-test-suite:define-simple-simd-test u64.2-xor (u64.2) (&rest u64.2) u64-xor)
-(sb-simd-test-suite:define-simple-simd-test u64.2-andc1 (u64.2) (u64.2 u64.2) u64-andc1)
-(sb-simd-test-suite:define-simple-simd-test u64.2-not (u64.2) (u64.2) u64-not)
-(sb-simd-test-suite:define-simple-simd-test u64.2+ (u64.2) (&rest u64.2) u64+)
-(sb-simd-test-suite:define-simple-simd-test u64.2- (u64.2) (u64.2 &rest u64.2) u64-)
-(sb-simd-test-suite:define-simple-simd-test u64.2= (u64.2) (u64.2 &rest u64.2) u64=)
-(sb-simd-test-suite:define-simple-simd-test u64.2/= (u64.2) (u64.2 &rest u64.2) u64/=)
-(sb-simd-test-suite:define-simple-simd-test u64.2< (u64.2) (u64.2 &rest u64.2) u64<)
-(sb-simd-test-suite:define-simple-simd-test u64.2<= (u64.2) (u64.2 &rest u64.2) u64<=)
-(sb-simd-test-suite:define-simple-simd-test u64.2> (u64.2) (u64.2 &rest u64.2) u64>)
-(sb-simd-test-suite:define-simple-simd-test u64.2>= (u64.2) (u64.2 &rest u64.2) u64>=)
-
-(sb-simd-test-suite:define-simple-simd-test s8.16-if (s8.16) (u8.16 s8.16 s8.16) s8-if)
-(sb-simd-test-suite:define-simple-simd-test s8.16-and (s8.16) (&rest s8.16) s8-and)
-(sb-simd-test-suite:define-simple-simd-test s8.16-or (s8.16) (&rest s8.16) s8-or)
-(sb-simd-test-suite:define-simple-simd-test s8.16-xor (s8.16) (&rest s8.16) s8-xor)
-(sb-simd-test-suite:define-simple-simd-test s8.16-andc1 (s8.16) (s8.16 s8.16) s8-andc1)
-(sb-simd-test-suite:define-simple-simd-test s8.16-not (s8.16) (s8.16) s8-not)
-(sb-simd-test-suite:define-simple-simd-test s8.16+ (s8.16) (&rest s8.16) s8+)
-(sb-simd-test-suite:define-simple-simd-test s8.16- (s8.16) (s8.16 &rest s8.16) s8-)
-(sb-simd-test-suite:define-simple-simd-test s8.16= (u8.16) (s8.16 &rest s8.16) s8=)
-(sb-simd-test-suite:define-simple-simd-test s8.16/= (u8.16) (s8.16 &rest s8.16) s8/=)
-(sb-simd-test-suite:define-simple-simd-test s8.16< (u8.16) (s8.16 &rest s8.16) s8<)
-(sb-simd-test-suite:define-simple-simd-test s8.16<= (u8.16) (s8.16 &rest s8.16) s8<=)
-(sb-simd-test-suite:define-simple-simd-test s8.16> (u8.16) (s8.16 &rest s8.16) s8>)
-(sb-simd-test-suite:define-simple-simd-test s8.16>= (u8.16) (s8.16 &rest s8.16) s8>=)
-
-(sb-simd-test-suite:define-simple-simd-test s16.8-if (s16.8) (u16.8 s16.8 s16.8) s16-if)
-(sb-simd-test-suite:define-simple-simd-test s16.8-and (s16.8) (&rest s16.8) s16-and)
-(sb-simd-test-suite:define-simple-simd-test s16.8-or (s16.8) (&rest s16.8) s16-or)
-(sb-simd-test-suite:define-simple-simd-test s16.8-xor (s16.8) (&rest s16.8) s16-xor)
-(sb-simd-test-suite:define-simple-simd-test s16.8-andc1 (s16.8) (s16.8 s16.8) s16-andc1)
-(sb-simd-test-suite:define-simple-simd-test s16.8-not (s16.8) (s16.8) s16-not)
-(sb-simd-test-suite:define-simple-simd-test s16.8+ (s16.8) (&rest s16.8) s16+)
-(sb-simd-test-suite:define-simple-simd-test s16.8- (s16.8) (s16.8 &rest s16.8) s16-)
-(sb-simd-test-suite:define-simple-simd-test s16.8= (u16.8) (s16.8 &rest s16.8) s16=)
-(sb-simd-test-suite:define-simple-simd-test s16.8/= (u16.8) (s16.8 &rest s16.8) s16/=)
-(sb-simd-test-suite:define-simple-simd-test s16.8< (u16.8) (s16.8 &rest s16.8) s16<)
-(sb-simd-test-suite:define-simple-simd-test s16.8<= (u16.8) (s16.8 &rest s16.8) s16<=)
-(sb-simd-test-suite:define-simple-simd-test s16.8> (u16.8) (s16.8 &rest s16.8) s16>)
-(sb-simd-test-suite:define-simple-simd-test s16.8>= (u16.8) (s16.8 &rest s16.8) s16>=)
-
-(sb-simd-test-suite:define-simple-simd-test s32.4-if (s32.4) (u32.4 s32.4 s32.4) s32-if)
-(sb-simd-test-suite:define-simple-simd-test s32.4-and (s32.4) (&rest s32.4) s32-and)
-(sb-simd-test-suite:define-simple-simd-test s32.4-or (s32.4) (&rest s32.4) s32-or)
-(sb-simd-test-suite:define-simple-simd-test s32.4-xor (s32.4) (&rest s32.4) s32-xor)
-(sb-simd-test-suite:define-simple-simd-test s32.4-andc1 (s32.4) (s32.4 s32.4) s32-andc1)
-(sb-simd-test-suite:define-simple-simd-test s32.4-not (s32.4) (s32.4) s32-not)
-(sb-simd-test-suite:define-simple-simd-test s32.4+ (s32.4) (&rest s32.4) s32+)
-(sb-simd-test-suite:define-simple-simd-test s32.4- (s32.4) (s32.4 &rest s32.4) s32-)
-(sb-simd-test-suite:define-simple-simd-test s32.4= (u32.4) (s32.4 &rest s32.4) s32=)
-(sb-simd-test-suite:define-simple-simd-test s32.4/= (u32.4) (s32.4 &rest s32.4) s32/=)
-(sb-simd-test-suite:define-simple-simd-test s32.4< (u32.4) (s32.4 &rest s32.4) s32<)
-(sb-simd-test-suite:define-simple-simd-test s32.4<= (u32.4) (s32.4 &rest s32.4) s32<=)
-(sb-simd-test-suite:define-simple-simd-test s32.4> (u32.4) (s32.4 &rest s32.4) s32>)
-(sb-simd-test-suite:define-simple-simd-test s32.4>= (u32.4) (s32.4 &rest s32.4) s32>=)
-
-(sb-simd-test-suite:define-simple-simd-test s64.2-if (s64.2) (u64.2 s64.2 s64.2) s64-if)
-(sb-simd-test-suite:define-simple-simd-test s64.2-and (s64.2) (&rest s64.2) s64-and)
-(sb-simd-test-suite:define-simple-simd-test s64.2-or (s64.2) (&rest s64.2) s64-or)
-(sb-simd-test-suite:define-simple-simd-test s64.2-xor (s64.2) (&rest s64.2) s64-xor)
-(sb-simd-test-suite:define-simple-simd-test s64.2-andc1 (s64.2) (s64.2 s64.2) s64-andc1)
-(sb-simd-test-suite:define-simple-simd-test s64.2-not (s64.2) (s64.2) s64-not)
-(sb-simd-test-suite:define-simple-simd-test s64.2+ (s64.2) (&rest s64.2) s64+)
-(sb-simd-test-suite:define-simple-simd-test s64.2- (s64.2) (s64.2 &rest s64.2) s64-)
-(sb-simd-test-suite:define-simple-simd-test s64.2= (u64.2) (s64.2 &rest s64.2) s64=)
-(sb-simd-test-suite:define-simple-simd-test s64.2< (u64.2) (s64.2 &rest s64.2) s64<)
-(sb-simd-test-suite:define-simple-simd-test s64.2<= (u64.2) (s64.2 &rest s64.2) s64<=)
-(sb-simd-test-suite:define-simple-simd-test s64.2> (u64.2) (s64.2 &rest s64.2) s64>)
-(sb-simd-test-suite:define-simple-simd-test s64.2>= (u64.2) (s64.2 &rest s64.2) s64>=)
-
-(in-package #:sb-simd-avx2)
-
-(sb-simd-test-suite:define-simple-simd-test u8.32-if (u8.32) (u8.32 u8.32 u8.32) u8-if)
-(sb-simd-test-suite:define-simple-simd-test u8.32-and (u8.32) (&rest u8.32) u8-and)
-(sb-simd-test-suite:define-simple-simd-test u8.32-or (u8.32) (&rest u8.32) u8-or)
-(sb-simd-test-suite:define-simple-simd-test u8.32-xor (u8.32) (&rest u8.32) u8-xor)
-(sb-simd-test-suite:define-simple-simd-test u8.32-andc1 (u8.32) (u8.32 u8.32) u8-andc1)
-(sb-simd-test-suite:define-simple-simd-test u8.32-not (u8.32) (u8.32) u8-not)
-(sb-simd-test-suite:define-simple-simd-test u8.32+ (u8.32) (&rest u8.32) u8+)
-(sb-simd-test-suite:define-simple-simd-test u8.32- (u8.32) (u8.32 &rest u8.32) u8-)
-(sb-simd-test-suite:define-simple-simd-test u8.32= (u8.32) (u8.32 &rest u8.32) u8=)
-(sb-simd-test-suite:define-simple-simd-test u8.32/= (u8.32) (u8.32 &rest u8.32) u8/=)
-(sb-simd-test-suite:define-simple-simd-test u8.32< (u8.32) (u8.32 &rest u8.32) u8<)
-(sb-simd-test-suite:define-simple-simd-test u8.32<= (u8.32) (u8.32 &rest u8.32) u8<=)
-(sb-simd-test-suite:define-simple-simd-test u8.32> (u8.32) (u8.32 &rest u8.32) u8>)
-(sb-simd-test-suite:define-simple-simd-test u8.32>= (u8.32) (u8.32 &rest u8.32) u8>=)
-
-(sb-simd-test-suite:define-simple-simd-test u16.16-if (u16.16) (u16.16 u16.16 u16.16) u16-if)
-(sb-simd-test-suite:define-simple-simd-test u16.16-and (u16.16) (&rest u16.16) u16-and)
-(sb-simd-test-suite:define-simple-simd-test u16.16-or (u16.16) (&rest u16.16) u16-or)
-(sb-simd-test-suite:define-simple-simd-test u16.16-xor (u16.16) (&rest u16.16) u16-xor)
-(sb-simd-test-suite:define-simple-simd-test u16.16-andc1 (u16.16) (u16.16 u16.16) u16-andc1)
-(sb-simd-test-suite:define-simple-simd-test u16.16-not (u16.16) (u16.16) u16-not)
-(sb-simd-test-suite:define-simple-simd-test u16.16+ (u16.16) (&rest u16.16) u16+)
-(sb-simd-test-suite:define-simple-simd-test u16.16- (u16.16) (u16.16 &rest u16.16) u16-)
-(sb-simd-test-suite:define-simple-simd-test u16.16= (u16.16) (u16.16 &rest u16.16) u16=)
-(sb-simd-test-suite:define-simple-simd-test u16.16/= (u16.16) (u16.16 &rest u16.16) u16/=)
-(sb-simd-test-suite:define-simple-simd-test u16.16< (u16.16) (u16.16 &rest u16.16) u16<)
-(sb-simd-test-suite:define-simple-simd-test u16.16<= (u16.16) (u16.16 &rest u16.16) u16<=)
-(sb-simd-test-suite:define-simple-simd-test u16.16> (u16.16) (u16.16 &rest u16.16) u16>)
-(sb-simd-test-suite:define-simple-simd-test u16.16>= (u16.16) (u16.16 &rest u16.16) u16>=)
-
-(sb-simd-test-suite:define-simple-simd-test u32.8-if (u32.8) (u32.8 u32.8 u32.8) u32-if)
-(sb-simd-test-suite:define-simple-simd-test u32.8-and (u32.8) (&rest u32.8) u32-and)
-(sb-simd-test-suite:define-simple-simd-test u32.8-or (u32.8) (&rest u32.8) u32-or)
-(sb-simd-test-suite:define-simple-simd-test u32.8-xor (u32.8) (&rest u32.8) u32-xor)
-(sb-simd-test-suite:define-simple-simd-test u32.8-andc1 (u32.8) (u32.8 u32.8) u32-andc1)
-(sb-simd-test-suite:define-simple-simd-test u32.8-not (u32.8) (u32.8) u32-not)
-(sb-simd-test-suite:define-simple-simd-test u32.8+ (u32.8) (&rest u32.8) u32+)
-(sb-simd-test-suite:define-simple-simd-test u32.8- (u32.8) (u32.8 &rest u32.8) u32-)
-(sb-simd-test-suite:define-simple-simd-test u32.8= (u32.8) (u32.8 &rest u32.8) u32=)
-(sb-simd-test-suite:define-simple-simd-test u32.8/= (u32.8) (u32.8 &rest u32.8) u32/=)
-(sb-simd-test-suite:define-simple-simd-test u32.8< (u32.8) (u32.8 &rest u32.8) u32<)
-(sb-simd-test-suite:define-simple-simd-test u32.8<= (u32.8) (u32.8 &rest u32.8) u32<=)
-(sb-simd-test-suite:define-simple-simd-test u32.8> (u32.8) (u32.8 &rest u32.8) u32>)
-(sb-simd-test-suite:define-simple-simd-test u32.8>= (u32.8) (u32.8 &rest u32.8) u32>=)
-
-(sb-simd-test-suite:define-simple-simd-test u64.4-if (u64.4) (u64.4 u64.4 u64.4) u64-if)
-(sb-simd-test-suite:define-simple-simd-test u64.4-and (u64.4) (&rest u64.4) u64-and)
-(sb-simd-test-suite:define-simple-simd-test u64.4-or (u64.4) (&rest u64.4) u64-or)
-(sb-simd-test-suite:define-simple-simd-test u64.4-xor (u64.4) (&rest u64.4) u64-xor)
-(sb-simd-test-suite:define-simple-simd-test u64.4-andc1 (u64.4) (u64.4 u64.4) u64-andc1)
-(sb-simd-test-suite:define-simple-simd-test u64.4-not (u64.4) (u64.4) u64-not)
-(sb-simd-test-suite:define-simple-simd-test u64.4+ (u64.4) (&rest u64.4) u64+)
-(sb-simd-test-suite:define-simple-simd-test u64.4- (u64.4) (u64.4 &rest u64.4) u64-)
-(sb-simd-test-suite:define-simple-simd-test u64.4= (u64.4) (u64.4 &rest u64.4) u64=)
-(sb-simd-test-suite:define-simple-simd-test u64.4/= (u64.4) (u64.4 &rest u64.4) u64/=)
-(sb-simd-test-suite:define-simple-simd-test u64.4< (u64.4) (u64.4 &rest u64.4) u64<)
-(sb-simd-test-suite:define-simple-simd-test u64.4<= (u64.4) (u64.4 &rest u64.4) u64<=)
-(sb-simd-test-suite:define-simple-simd-test u64.4> (u64.4) (u64.4 &rest u64.4) u64>)
-(sb-simd-test-suite:define-simple-simd-test u64.4>= (u64.4) (u64.4 &rest u64.4) u64>=)
-
-(sb-simd-test-suite:define-simple-simd-test s8.32-if (s8.32) (u8.32 s8.32 s8.32) s8-if)
-(sb-simd-test-suite:define-simple-simd-test s8.32-and (s8.32) (&rest s8.32) s8-and)
-(sb-simd-test-suite:define-simple-simd-test s8.32-or (s8.32) (&rest s8.32) s8-or)
-(sb-simd-test-suite:define-simple-simd-test s8.32-xor (s8.32) (&rest s8.32) s8-xor)
-(sb-simd-test-suite:define-simple-simd-test s8.32-andc1 (s8.32) (s8.32 s8.32) s8-andc1)
-(sb-simd-test-suite:define-simple-simd-test s8.32-not (s8.32) (s8.32) s8-not)
-(sb-simd-test-suite:define-simple-simd-test s8.32+ (s8.32) (&rest s8.32) s8+)
-(sb-simd-test-suite:define-simple-simd-test s8.32- (s8.32) (s8.32 &rest s8.32) s8-)
-(sb-simd-test-suite:define-simple-simd-test s8.32= (u8.32) (s8.32 &rest s8.32) s8=)
-(sb-simd-test-suite:define-simple-simd-test s8.32/= (u8.32) (s8.32 &rest s8.32) s8/=)
-(sb-simd-test-suite:define-simple-simd-test s8.32< (u8.32) (s8.32 &rest s8.32) s8<)
-(sb-simd-test-suite:define-simple-simd-test s8.32<= (u8.32) (s8.32 &rest s8.32) s8<=)
-(sb-simd-test-suite:define-simple-simd-test s8.32> (u8.32) (s8.32 &rest s8.32) s8>)
-(sb-simd-test-suite:define-simple-simd-test s8.32>= (u8.32) (s8.32 &rest s8.32) s8>=)
-
-(sb-simd-test-suite:define-simple-simd-test s16.16-if (s16.16) (u16.16 s16.16 s16.16) s16-if)
-(sb-simd-test-suite:define-simple-simd-test s16.16-and (s16.16) (&rest s16.16) s16-and)
-(sb-simd-test-suite:define-simple-simd-test s16.16-or (s16.16) (&rest s16.16) s16-or)
-(sb-simd-test-suite:define-simple-simd-test s16.16-xor (s16.16) (&rest s16.16) s16-xor)
-(sb-simd-test-suite:define-simple-simd-test s16.16-andc1 (s16.16) (s16.16 s16.16) s16-andc1)
-(sb-simd-test-suite:define-simple-simd-test s16.16-not (s16.16) (s16.16) s16-not)
-(sb-simd-test-suite:define-simple-simd-test s16.16+ (s16.16) (&rest s16.16) s16+)
-(sb-simd-test-suite:define-simple-simd-test s16.16- (s16.16) (s16.16 &rest s16.16) s16-)
-(sb-simd-test-suite:define-simple-simd-test s16.16= (u16.16) (s16.16 &rest s16.16) s16=)
-(sb-simd-test-suite:define-simple-simd-test s16.16/= (u16.16) (s16.16 &rest s16.16) s16/=)
-(sb-simd-test-suite:define-simple-simd-test s16.16< (u16.16) (s16.16 &rest s16.16) s16<)
-(sb-simd-test-suite:define-simple-simd-test s16.16<= (u16.16) (s16.16 &rest s16.16) s16<=)
-(sb-simd-test-suite:define-simple-simd-test s16.16> (u16.16) (s16.16 &rest s16.16) s16>)
-(sb-simd-test-suite:define-simple-simd-test s16.16>= (u16.16) (s16.16 &rest s16.16) s16>=)
-
-(sb-simd-test-suite:define-simple-simd-test s32.8-if (s32.8) (u32.8 s32.8 s32.8) s32-if)
-(sb-simd-test-suite:define-simple-simd-test s32.8-and (s32.8) (&rest s32.8) s32-and)
-(sb-simd-test-suite:define-simple-simd-test s32.8-or (s32.8) (&rest s32.8) s32-or)
-(sb-simd-test-suite:define-simple-simd-test s32.8-xor (s32.8) (&rest s32.8) s32-xor)
-(sb-simd-test-suite:define-simple-simd-test s32.8-andc1 (s32.8) (s32.8 s32.8) s32-andc1)
-(sb-simd-test-suite:define-simple-simd-test s32.8-not (s32.8) (s32.8) s32-not)
-(sb-simd-test-suite:define-simple-simd-test s32.8+ (s32.8) (&rest s32.8) s32+)
-(sb-simd-test-suite:define-simple-simd-test s32.8- (s32.8) (s32.8 &rest s32.8) s32-)
-(sb-simd-test-suite:define-simple-simd-test s32.8= (u32.8) (s32.8 &rest s32.8) s32=)
-(sb-simd-test-suite:define-simple-simd-test s32.8/= (u32.8) (s32.8 &rest s32.8) s32/=)
-(sb-simd-test-suite:define-simple-simd-test s32.8< (u32.8) (s32.8 &rest s32.8) s32<)
-(sb-simd-test-suite:define-simple-simd-test s32.8<= (u32.8) (s32.8 &rest s32.8) s32<=)
-(sb-simd-test-suite:define-simple-simd-test s32.8> (u32.8) (s32.8 &rest s32.8) s32>)
-(sb-simd-test-suite:define-simple-simd-test s32.8>= (u32.8) (s32.8 &rest s32.8) s32>=)
-
-(sb-simd-test-suite:define-simple-simd-test s64.4-if (s64.4) (u64.4 s64.4 s64.4) s64-if)
-(sb-simd-test-suite:define-simple-simd-test s64.4-and (s64.4) (&rest s64.4) s64-and)
-(sb-simd-test-suite:define-simple-simd-test s64.4-or (s64.4) (&rest s64.4) s64-or)
-(sb-simd-test-suite:define-simple-simd-test s64.4-xor (s64.4) (&rest s64.4) s64-xor)
-(sb-simd-test-suite:define-simple-simd-test s64.4-andc1 (s64.4) (s64.4 s64.4) s64-andc1)
-(sb-simd-test-suite:define-simple-simd-test s64.4-not (s64.4) (s64.4) s64-not)
-(sb-simd-test-suite:define-simple-simd-test s64.4+ (s64.4) (&rest s64.4) s64+)
-(sb-simd-test-suite:define-simple-simd-test s64.4- (s64.4) (s64.4 &rest s64.4) s64-)
-(sb-simd-test-suite:define-simple-simd-test s64.4= (u64.4) (s64.4 &rest s64.4) s64=)
-(sb-simd-test-suite:define-simple-simd-test s64.4< (u64.4) (s64.4 &rest s64.4) s64<)
-(sb-simd-test-suite:define-simple-simd-test s64.4<= (u64.4) (s64.4 &rest s64.4) s64<=)
-(sb-simd-test-suite:define-simple-simd-test s64.4> (u64.4) (s64.4 &rest s64.4) s64>)
-(sb-simd-test-suite:define-simple-simd-test s64.4>= (u64.4) (s64.4 &rest s64.4) s64>=)
-
-(in-package #:sb-simd-fma)
-
-(sb-simd-test-suite:define-simple-simd-test f32.4-fmadd (f32.4) (f32.4 f32.4 f32.4) f32-fmadd)
-(sb-simd-test-suite:define-simple-simd-test f32.4-fnmadd (f32.4) (f32.4 f32.4 f32.4) f32-fnmadd)
-(sb-simd-test-suite:define-simple-simd-test f32.4-fmsub (f32.4) (f32.4 f32.4 f32.4) f32-fmsub)
-
-(sb-simd-test-suite:define-simple-simd-test f32.8-fmadd (f32.8) (f32.8 f32.8 f32.8) f32-fmadd)
-(sb-simd-test-suite:define-simple-simd-test f32.8-fnmadd (f32.8) (f32.8 f32.8 f32.8) f32-fnmadd)
-(sb-simd-test-suite:define-simple-simd-test f32.8-fmsub (f32.8) (f32.8 f32.8 f32.8) f32-fmsub)
-
-(sb-simd-test-suite:define-simple-simd-test f64.2-fmadd (f64.2) (f64.2 f64.2 f64.2) f64-fmadd)
-(sb-simd-test-suite:define-simple-simd-test f64.2-fnmadd (f64.2) (f64.2 f64.2 f64.2) f64-fnmadd)
-(sb-simd-test-suite:define-simple-simd-test f64.2-fmsub (f64.2) (f64.2 f64.2 f64.2) f64-fmsub)
-
-(sb-simd-test-suite:define-simple-simd-test f64.4-fmadd (f64.4) (f64.4 f64.4 f64.4) f64-fmadd)
-(sb-simd-test-suite:define-simple-simd-test f64.4-fnmadd (f64.4) (f64.4 f64.4 f64.4) f64-fnmadd)
-(sb-simd-test-suite:define-simple-simd-test f64.4-fmsub (f64.4) (f64.4 f64.4 f64.4) f64-fmsub)
-
-(in-package #:sb-simd-neon)
-
-(sb-simd-test-suite:define-simple-simd-test f32.4-and (f32.4) (&rest f32.4) f32-and)
-(sb-simd-test-suite:define-simple-simd-test f32.4-or (f32.4) (&rest f32.4) f32-or)
-(sb-simd-test-suite:define-simple-simd-test f32.4-xor (f32.4) (&rest f32.4) f32-xor)
-(sb-simd-test-suite:define-simple-simd-test f32.4-andc1 (f32.4) (f32.4 f32.4) f32-andc1)
-(sb-simd-test-suite:define-simple-simd-test f32.4-not (f32.4) (f32.4) f32-not)
-(sb-simd-test-suite:define-simple-simd-test f32.4-max (f32.4) (f32.4 &rest f32.4) f32-max)
-(sb-simd-test-suite:define-simple-simd-test f32.4-min (f32.4) (f32.4 &rest f32.4) f32-min)
-(sb-simd-test-suite:define-simple-simd-test f32.4+ (f32.4) (&rest f32.4) f32+)
-(sb-simd-test-suite:define-simple-simd-test f32.4- (f32.4) (f32.4 &rest f32.4) f32-)
-(sb-simd-test-suite:define-simple-simd-test f32.4* (f32.4) (&rest f32.4) f32*)
-(sb-simd-test-suite:define-simple-simd-test f32.4/ (f32.4) (f32.4 &rest f32.4) f32/)
-(sb-simd-test-suite:define-simple-simd-test f32.4= (u32.4) (f32.4 &rest f32.4) f32=)
-(sb-simd-test-suite:define-simple-simd-test f32.4/= (u32.4) (f32.4 &rest f32.4) f32/=)
-(sb-simd-test-suite:define-simple-simd-test f32.4< (u32.4) (f32.4 &rest f32.4) f32<)
-(sb-simd-test-suite:define-simple-simd-test f32.4<= (u32.4) (f32.4 &rest f32.4) f32<=)
-(sb-simd-test-suite:define-simple-simd-test f32.4> (u32.4) (f32.4 &rest f32.4) f32>)
-(sb-simd-test-suite:define-simple-simd-test f32.4>= (u32.4) (f32.4 &rest f32.4) f32>=)
-
-(sb-simd-test-suite:define-simple-simd-test f64.2-and (f64.2) (&rest f64.2) f64-and)
-(sb-simd-test-suite:define-simple-simd-test f64.2-or (f64.2) (&rest f64.2) f64-or)
-(sb-simd-test-suite:define-simple-simd-test f64.2-xor (f64.2) (&rest f64.2) f64-xor)
-(sb-simd-test-suite:define-simple-simd-test f64.2-andc1 (f64.2) (f64.2 f64.2) f64-andc1)
-(sb-simd-test-suite:define-simple-simd-test f64.2-not (f64.2) (f64.2) f64-not)
-(sb-simd-test-suite:define-simple-simd-test f64.2-max (f64.2) (f64.2 &rest f64.2) f64-max)
-(sb-simd-test-suite:define-simple-simd-test f64.2-min (f64.2) (f64.2 &rest f64.2) f64-min)
-(sb-simd-test-suite:define-simple-simd-test f64.2+ (f64.2) (&rest f64.2) f64+)
-(sb-simd-test-suite:define-simple-simd-test f64.2- (f64.2) (f64.2 &rest f64.2) f64-)
-(sb-simd-test-suite:define-simple-simd-test f64.2* (f64.2) (&rest f64.2) f64*)
-(sb-simd-test-suite:define-simple-simd-test f64.2/ (f64.2) (f64.2 &rest f64.2) f64/)
-(sb-simd-test-suite:define-simple-simd-test f64.2= (u64.2) (f64.2 &rest f64.2) f64=)
-(sb-simd-test-suite:define-simple-simd-test f64.2/= (u64.2) (f64.2 &rest f64.2) f64/=)
-(sb-simd-test-suite:define-simple-simd-test f64.2< (u64.2) (f64.2 &rest f64.2) f64<)
-(sb-simd-test-suite:define-simple-simd-test f64.2<= (u64.2) (f64.2 &rest f64.2) f64<=)
-(sb-simd-test-suite:define-simple-simd-test f64.2> (u64.2) (f64.2 &rest f64.2) f64>)
-(sb-simd-test-suite:define-simple-simd-test f64.2>= (u64.2) (f64.2 &rest f64.2) f64>=)
-
-(sb-simd-test-suite:define-simple-simd-test u8.16-and (u8.16) (&rest u8.16) u8-and)
-(sb-simd-test-suite:define-simple-simd-test u8.16-or (u8.16) (&rest u8.16) u8-or)
-(sb-simd-test-suite:define-simple-simd-test u8.16-xor (u8.16) (&rest u8.16) u8-xor)
-(sb-simd-test-suite:define-simple-simd-test u8.16-andc1 (u8.16) (u8.16 u8.16) u8-andc1)
-(sb-simd-test-suite:define-simple-simd-test u8.16-not (u8.16) (u8.16) u8-not)
-(sb-simd-test-suite:define-simple-simd-test u8.16+ (u8.16) (&rest u8.16) u8+)
-(sb-simd-test-suite:define-simple-simd-test u8.16- (u8.16) (u8.16 &rest u8.16) u8-)
-(sb-simd-test-suite:define-simple-simd-test u8.16= (u8.16) (u8.16 &rest u8.16) u8=)
-(sb-simd-test-suite:define-simple-simd-test u8.16/= (u8.16) (u8.16 &rest u8.16) u8/=)
-(sb-simd-test-suite:define-simple-simd-test u8.16< (u8.16) (u8.16 &rest u8.16) u8<)
-(sb-simd-test-suite:define-simple-simd-test u8.16<= (u8.16) (u8.16 &rest u8.16) u8<=)
-(sb-simd-test-suite:define-simple-simd-test u8.16> (u8.16) (u8.16 &rest u8.16) u8>)
-(sb-simd-test-suite:define-simple-simd-test u8.16>= (u8.16) (u8.16 &rest u8.16) u8>=)
-
-(sb-simd-test-suite:define-simple-simd-test u16.8-and (u16.8) (&rest u16.8) u16-and)
-(sb-simd-test-suite:define-simple-simd-test u16.8-or (u16.8) (&rest u16.8) u16-or)
-(sb-simd-test-suite:define-simple-simd-test u16.8-xor (u16.8) (&rest u16.8) u16-xor)
-(sb-simd-test-suite:define-simple-simd-test u16.8-andc1 (u16.8) (u16.8 u16.8) u16-andc1)
-(sb-simd-test-suite:define-simple-simd-test u16.8-not (u16.8) (u16.8) u16-not)
-(sb-simd-test-suite:define-simple-simd-test u16.8+ (u16.8) (&rest u16.8) u16+)
-(sb-simd-test-suite:define-simple-simd-test u16.8- (u16.8) (u16.8 &rest u16.8) u16-)
-(sb-simd-test-suite:define-simple-simd-test u16.8= (u16.8) (u16.8 &rest u16.8) u16=)
-(sb-simd-test-suite:define-simple-simd-test u16.8/= (u16.8) (u16.8 &rest u16.8) u16/=)
-(sb-simd-test-suite:define-simple-simd-test u16.8< (u16.8) (u16.8 &rest u16.8) u16<)
-(sb-simd-test-suite:define-simple-simd-test u16.8<= (u16.8) (u16.8 &rest u16.8) u16<=)
-(sb-simd-test-suite:define-simple-simd-test u16.8> (u16.8) (u16.8 &rest u16.8) u16>)
-(sb-simd-test-suite:define-simple-simd-test u16.8>= (u16.8) (u16.8 &rest u16.8) u16>=)
-
-(sb-simd-test-suite:define-simple-simd-test u32.4-and (u32.4) (&rest u32.4) u32-and)
-(sb-simd-test-suite:define-simple-simd-test u32.4-or (u32.4) (&rest u32.4) u32-or)
-(sb-simd-test-suite:define-simple-simd-test u32.4-xor (u32.4) (&rest u32.4) u32-xor)
-(sb-simd-test-suite:define-simple-simd-test u32.4-andc1 (u32.4) (u32.4 u32.4) u32-andc1)
-(sb-simd-test-suite:define-simple-simd-test u32.4-not (u32.4) (u32.4) u32-not)
-(sb-simd-test-suite:define-simple-simd-test u32.4+ (u32.4) (&rest u32.4) u32+)
-(sb-simd-test-suite:define-simple-simd-test u32.4- (u32.4) (u32.4 &rest u32.4) u32-)
-(sb-simd-test-suite:define-simple-simd-test u32.4= (u32.4) (u32.4 &rest u32.4) u32=)
-(sb-simd-test-suite:define-simple-simd-test u32.4/= (u32.4) (u32.4 &rest u32.4) u32/=)
-(sb-simd-test-suite:define-simple-simd-test u32.4< (u32.4) (u32.4 &rest u32.4) u32<)
-(sb-simd-test-suite:define-simple-simd-test u32.4<= (u32.4) (u32.4 &rest u32.4) u32<=)
-(sb-simd-test-suite:define-simple-simd-test u32.4> (u32.4) (u32.4 &rest u32.4) u32>)
-(sb-simd-test-suite:define-simple-simd-test u32.4>= (u32.4) (u32.4 &rest u32.4) u32>=)
-
-(sb-simd-test-suite:define-simple-simd-test u64.2-and (u64.2) (&rest u64.2) u64-and)
-(sb-simd-test-suite:define-simple-simd-test u64.2-or (u64.2) (&rest u64.2) u64-or)
-(sb-simd-test-suite:define-simple-simd-test u64.2-xor (u64.2) (&rest u64.2) u64-xor)
-(sb-simd-test-suite:define-simple-simd-test u64.2-andc1 (u64.2) (u64.2 u64.2) u64-andc1)
-(sb-simd-test-suite:define-simple-simd-test u64.2-not (u64.2) (u64.2) u64-not)
-(sb-simd-test-suite:define-simple-simd-test u64.2+ (u64.2) (&rest u64.2) u64+)
-(sb-simd-test-suite:define-simple-simd-test u64.2- (u64.2) (u64.2 &rest u64.2) u64-)
-(sb-simd-test-suite:define-simple-simd-test u64.2= (u64.2) (u64.2 &rest u64.2) u64=)
-(sb-simd-test-suite:define-simple-simd-test u64.2/= (u64.2) (u64.2 &rest u64.2) u64/=)
-(sb-simd-test-suite:define-simple-simd-test u64.2< (u64.2) (u64.2 &rest u64.2) u64<)
-(sb-simd-test-suite:define-simple-simd-test u64.2<= (u64.2) (u64.2 &rest u64.2) u64<=)
-(sb-simd-test-suite:define-simple-simd-test u64.2> (u64.2) (u64.2 &rest u64.2) u64>)
-(sb-simd-test-suite:define-simple-simd-test u64.2>= (u64.2) (u64.2 &rest u64.2) u64>=)
-
-(sb-simd-test-suite:define-simple-simd-test s8.16-and (s8.16) (&rest s8.16) s8-and)
-(sb-simd-test-suite:define-simple-simd-test s8.16-or (s8.16) (&rest s8.16) s8-or)
-(sb-simd-test-suite:define-simple-simd-test s8.16-xor (s8.16) (&rest s8.16) s8-xor)
-(sb-simd-test-suite:define-simple-simd-test s8.16-andc1 (s8.16) (s8.16 s8.16) s8-andc1)
-(sb-simd-test-suite:define-simple-simd-test s8.16-not (s8.16) (s8.16) s8-not)
-(sb-simd-test-suite:define-simple-simd-test s8.16+ (s8.16) (&rest s8.16) s8+)
-(sb-simd-test-suite:define-simple-simd-test s8.16- (s8.16) (s8.16 &rest s8.16) s8-)
-(sb-simd-test-suite:define-simple-simd-test s8.16= (u8.16) (s8.16 &rest s8.16) s8=)
-(sb-simd-test-suite:define-simple-simd-test s8.16/= (u8.16) (s8.16 &rest s8.16) s8/=)
-(sb-simd-test-suite:define-simple-simd-test s8.16< (u8.16) (s8.16 &rest s8.16) s8<)
-(sb-simd-test-suite:define-simple-simd-test s8.16<= (u8.16) (s8.16 &rest s8.16) s8<=)
-(sb-simd-test-suite:define-simple-simd-test s8.16> (u8.16) (s8.16 &rest s8.16) s8>)
-(sb-simd-test-suite:define-simple-simd-test s8.16>= (u8.16) (s8.16 &rest s8.16) s8>=)
-
-(sb-simd-test-suite:define-simple-simd-test s16.8-and (s16.8) (&rest s16.8) s16-and)
-(sb-simd-test-suite:define-simple-simd-test s16.8-or (s16.8) (&rest s16.8) s16-or)
-(sb-simd-test-suite:define-simple-simd-test s16.8-xor (s16.8) (&rest s16.8) s16-xor)
-(sb-simd-test-suite:define-simple-simd-test s16.8-andc1 (s16.8) (s16.8 s16.8) s16-andc1)
-(sb-simd-test-suite:define-simple-simd-test s16.8-not (s16.8) (s16.8) s16-not)
-(sb-simd-test-suite:define-simple-simd-test s16.8+ (s16.8) (&rest s16.8) s16+)
-(sb-simd-test-suite:define-simple-simd-test s16.8- (s16.8) (s16.8 &rest s16.8) s16-)
-(sb-simd-test-suite:define-simple-simd-test s16.8= (u16.8) (s16.8 &rest s16.8) s16=)
-(sb-simd-test-suite:define-simple-simd-test s16.8/= (u16.8) (s16.8 &rest s16.8) s16/=)
-(sb-simd-test-suite:define-simple-simd-test s16.8< (u16.8) (s16.8 &rest s16.8) s16<)
-(sb-simd-test-suite:define-simple-simd-test s16.8<= (u16.8) (s16.8 &rest s16.8) s16<=)
-(sb-simd-test-suite:define-simple-simd-test s16.8> (u16.8) (s16.8 &rest s16.8) s16>)
-(sb-simd-test-suite:define-simple-simd-test s16.8>= (u16.8) (s16.8 &rest s16.8) s16>=)
-
-(sb-simd-test-suite:define-simple-simd-test s32.4-and (s32.4) (&rest s32.4) s32-and)
-(sb-simd-test-suite:define-simple-simd-test s32.4-or (s32.4) (&rest s32.4) s32-or)
-(sb-simd-test-suite:define-simple-simd-test s32.4-xor (s32.4) (&rest s32.4) s32-xor)
-(sb-simd-test-suite:define-simple-simd-test s32.4-andc1 (s32.4) (s32.4 s32.4) s32-andc1)
-(sb-simd-test-suite:define-simple-simd-test s32.4-not (s32.4) (s32.4) s32-not)
-(sb-simd-test-suite:define-simple-simd-test s32.4+ (s32.4) (&rest s32.4) s32+)
-(sb-simd-test-suite:define-simple-simd-test s32.4- (s32.4) (s32.4 &rest s32.4) s32-)
-(sb-simd-test-suite:define-simple-simd-test s32.4= (u32.4) (s32.4 &rest s32.4) s32=)
-(sb-simd-test-suite:define-simple-simd-test s32.4/= (u32.4) (s32.4 &rest s32.4) s32/=)
-(sb-simd-test-suite:define-simple-simd-test s32.4< (u32.4) (s32.4 &rest s32.4) s32<)
-(sb-simd-test-suite:define-simple-simd-test s32.4<= (u32.4) (s32.4 &rest s32.4) s32<=)
-(sb-simd-test-suite:define-simple-simd-test s32.4> (u32.4) (s32.4 &rest s32.4) s32>)
-(sb-simd-test-suite:define-simple-simd-test s32.4>= (u32.4) (s32.4 &rest s32.4) s32>=)
-
-(sb-simd-test-suite:define-simple-simd-test s64.2-and (s64.2) (&rest s64.2) s64-and)
-(sb-simd-test-suite:define-simple-simd-test s64.2-or (s64.2) (&rest s64.2) s64-or)
-(sb-simd-test-suite:define-simple-simd-test s64.2-xor (s64.2) (&rest s64.2) s64-xor)
-(sb-simd-test-suite:define-simple-simd-test s64.2-andc1 (s64.2) (s64.2 s64.2) s64-andc1)
-(sb-simd-test-suite:define-simple-simd-test s64.2-not (s64.2) (s64.2) s64-not)
-(sb-simd-test-suite:define-simple-simd-test s64.2+ (s64.2) (&rest s64.2) s64+)
-(sb-simd-test-suite:define-simple-simd-test s64.2- (s64.2) (s64.2 &rest s64.2) s64-)
-(sb-simd-test-suite:define-simple-simd-test s64.2= (u64.2) (s64.2 &rest s64.2) s64=)
-(sb-simd-test-suite:define-simple-simd-test s64.2< (u64.2) (s64.2 &rest s64.2) s64<)
-(sb-simd-test-suite:define-simple-simd-test s64.2<= (u64.2) (s64.2 &rest s64.2) s64<=)
-(sb-simd-test-suite:define-simple-simd-test s64.2> (u64.2) (s64.2 &rest s64.2) s64>)
-(sb-simd-test-suite:define-simple-simd-test s64.2>= (u64.2) (s64.2 &rest s64.2) s64>=)
diff --git a/tests/sb-simd.impure.lisp b/tests/sb-simd.impure.lisp
index 8668fcf3d..0e647a95c 100644
--- a/tests/sb-simd.impure.lisp
+++ b/tests/sb-simd.impure.lisp
@@ -20,8 +20,14 @@
"utilities.lisp"
"test-suite.lisp"
"test-arefs.lisp"
+ #+x86-64 "test-arefs-x86-64.lisp"
+ #+arm64 "test-arefs-arm64.lisp"
"test-simple-simd-functions.lisp"
+ #+x86-64 "test-simple-simd-functions-x86-64.lisp"
+ #+arm64 "test-simple-simd-functions-arm64.lisp"
"test-horizontal-functions.lisp"
+ #+x86-64 "test-horizontal-functions-x86-64.lisp"
+ #+arm64 "test-horizontal-functions-arm64.lisp"
"test-hairy-simd-functions.lisp"
"test-packages.lisp"))
(load (merge-pathnames file #P"../contrib/sb-simd/test-suite/"))))
-----------------------------------------------------------------------
hooks/post-receive
--
SBCL