[PATCH] arm64 support for sb-simd

Sylvia Harrington <[email protected]> Sun, 28 Jun 2026 19:23:28 +0100
Newsgroups gmane.lisp.steel-bank.devel
Message-ID <[email protected]>
--Apple-Mail=_03B53131-1088-4A20-8204-C6AF066A7E81
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=utf-8

Hi all,

This patch set implements preliminary support for arm64=E2=80=99s =
advsimd instruction set in the sb-simd contrib.

This covers about half the advsimd instruction set. It=E2=80=99s got the =
basic stuff (simple arithmetic, conditionals, conversions, saturating =
arithmetic, etc), but the most notable missing part are the load/store =
multiple ops. I=E2=80=99ve got a WIP patch for this but it=E2=80=99s not =
ready quite yet. The rest of the missing instructions are random more =
specialised instructions, nothing stops them being included but it=E2=80=99=
s just a bunch of work and would make the patch set larger.

It=E2=80=99s broken up into the follow 4 patches, the first 3 of which =
should all be independent of each other:

0001-sb-simd-Portability-fixes.patch - Minor fixes to sb-simd to support =
building on non-x86 platforms
0002-arm64-Implement-SIMD-PACK.patch - Implements the simd-pack type on =
arm64
0003-arm64-More-simd-instructions.patch - Adds a large pile of arm64 =
advsimd instructions
0004-sb-simd-arm64-support.patch - Wires everything up, adding new types =
& functions to sb-simd

I don=E2=80=99t think there=E2=80=99s anything particularly magical in =
any of these patches, unfortunately there=E2=80=99s just a lot of code =
touched in the process (mostly just new instructions and the sb-simd =
changes though).

Full changeset (plus a bit more wip stuff) also available at =
https://github.com/froggey/sbcl/tree/arm64-simd

- Sil


--Apple-Mail=_03B53131-1088-4A20-8204-C6AF066A7E81
Content-Disposition: attachment;
	filename=0001-sb-simd-Portability-fixes.patch
Content-Type: application/octet-stream;
	x-unix-mode=0644;
	name="0001-sb-simd-Portability-fixes.patch"
Content-Transfer-Encoding: quoted-printable

=46rom=2026b4feb501c12a9687b4978ddcb42ed589d3a875=20Mon=20Sep=2017=20=
00:00:00=202001=0AFrom:=20Sylvia=20Harrington=20=
<[email protected]>=0ADate:=20Wed,=2018=20Jun=202025=20=
21:33:14=20+0100=0ASubject:=20[PATCH=201/4]=20sb-simd:=20Portability=20=
fixes=0A=0AThis=20is=20mostly=20just=20building=20on=20what=20already=20=
existed,=20primarily=0Aonly=20defining=20and=20calling=20VOPs=20where=20=
the=20instruction=20set=20exists.=0AAlso=20a=20phony=20simd-pack-256=20=
type=20to=20allow=20building=20when=20that=0Atype=20doesn't=20exist.=0A=
And=20disable=20the=20vref=20vop=20implementation=20outside=20x86oids,=20=
as=20it's=20entirely=0Aspecific=20to=20that=20instruction=20set.=0A---=0A=
=20contrib/sb-simd/code/define-custom-vops.lisp=20=20|=2048=20=
++++++-----=0A=20contrib/sb-simd/code/define-scalar-casts.lisp=20|=2085=20=
+++++++++++--------=0A=20contrib/sb-simd/code/define-simd-casts.lisp=20=20=
=20|=2015=20++--=0A=20contrib/sb-simd/code/define-vref-vops.lisp=20=20=20=
=20|=20=201=20+=0A=20contrib/sb-simd/code/define-vrefs.lisp=20=20=20=20=20=
=20=20=20|=2038=20+++++----=0A=20contrib/sb-simd/code/record.lisp=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20|=2011=20++-=0A=206=20files=20changed,=20=
115=20insertions(+),=2083=20deletions(-)=0A=0Adiff=20--git=20=
a/contrib/sb-simd/code/define-custom-vops.lisp=20=
b/contrib/sb-simd/code/define-custom-vops.lisp=0Aindex=20=
0fd034ebd..8ed639a34=20100644=0A---=20=
a/contrib/sb-simd/code/define-custom-vops.lisp=0A+++=20=
b/contrib/sb-simd/code/define-custom-vops.lisp=0A@@=20-7,31=20+7,33=20@@=0A=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(argument-records=20=
sb-simd-internals:instruction-record-argument-records)=0A=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(result-records=20=
sb-simd-internals:instruction-record-result-records)=0A=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(cost=20=
sb-simd-internals:instruction-record-cost)=0A-=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(encoding=20=
sb-simd-internals:instruction-record-encoding))=0A+=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(encoding=20=
sb-simd-internals:instruction-record-encoding)=0A+=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(instruction-set=20=
sb-simd-internals:instruction-record-instruction-set))=0A=20=20=20=20=20=20=
=20=20=20=20=20=20(sb-simd-internals:find-function-record=20name)=0A=20=20=
=20=20=20=20=20=20=20=20(assert=20(eq=20encoding=20:custom))=0A-=20=20=20=
=20=20=20=20=20=20(labels=20((find-clauses=20(key)=0A-=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20(remove=20key=20clauses=20=
:test-not=20#'eq=20:key=20#'first))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20(find-clause=20(key)=0A-=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20(let=20((found=20(find-clauses=20key)))=0A-=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(assert=20=
(=3D=201=20(length=20found)))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20(rest=20(first=20found)))))=0A-=20=20=20=20=20=20=
=20=20=20=20=20`(sb-c:define-vop=20(,vop)=0A-=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20(:translate=20,vop)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20(:policy=20:fast-safe)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(:arg-types=20,@(mapcar=20=
#'sb-simd-internals:value-record-primitive-type=20argument-records))=0A-=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20(:result-types=20,@(mapcar=20=
#'sb-simd-internals:value-record-primitive-type=20result-records))=0A-=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20(:args=0A-=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20,@(loop=20for=20arg=20in=20(find-clause=20:args)=0A=
-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
for=20argument-record=20in=20argument-records=0A-=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20collect=20`(,@arg=20:scs=20=
,(sb-simd-internals:value-record-scs=20argument-record))))=0A-=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20,@(find-clauses=20:info)=0A-=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20,@(find-clauses=20:temporary)=0A-=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20(:results=0A-=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20,@(loop=20for=20result=20in=20(find-clause=20:results)=0A-=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20for=20=
result-record=20in=20result-records=0A-=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20collect=20`(,@result=20:scs=20=
,(sb-simd-internals:value-record-scs=20result-record))))=0A-=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20(:generator=20,cost=20,@(find-clause=20=
:generator)))))))=0A+=20=20=20=20=20=20=20=20=20(when=20=
(sb-simd-internals:instruction-set-available-p=20instruction-set)=0A+=20=20=
=20=20=20=20=20=20=20=20=20(labels=20((find-clauses=20(key)=0A+=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(remove=20key=20=
clauses=20:test-not=20#'eq=20:key=20#'first))=0A+=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20(find-clause=20(key)=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(let=20((found=20=
(find-clauses=20key)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20(assert=20(=3D=201=20(length=20found)))=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(rest=20=
(first=20found)))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
`(sb-c:define-vop=20(,vop)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20(:translate=20,vop)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(:policy=20:fast-safe)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(:arg-types=20,@(mapcar=20=
#'sb-simd-internals:value-record-primitive-type=20argument-records))=0A+=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:result-types=20,@(mapcar=20=
#'sb-simd-internals:value-record-primitive-type=20result-records))=0A+=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:args=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20,@(loop=20for=20arg=20in=20(find-clause=20=
:args)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20for=20argument-record=20in=20argument-records=0A+=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20collect=20=
`(,@arg=20:scs=20,(sb-simd-internals:value-record-scs=20=
argument-record))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
,@(find-clauses=20:info)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20,@(find-clauses=20:temporary)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20(:results=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
,@(loop=20for=20result=20in=20(find-clause=20:results)=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20for=20=
result-record=20in=20result-records=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20collect=20`(,@result=20:scs=20=
,(sb-simd-internals:value-record-scs=20result-record))))=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20(:generator=20,cost=20,@(find-clause=20=
:generator))))))))=0A=20=20=20;;=20SSE=0A=20=20=20(macrolet=20((def=20=
(name=20cmp)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
`(define-custom-vop=20,name=0Adiff=20--git=20=
a/contrib/sb-simd/code/define-scalar-casts.lisp=20=
b/contrib/sb-simd/code/define-scalar-casts.lisp=0Aindex=20=
45cb30a73..2f970d100=20100644=0A---=20=
a/contrib/sb-simd/code/define-scalar-casts.lisp=0A+++=20=
b/contrib/sb-simd/code/define-scalar-casts.lisp=0A@@=20-5,8=20+5,20=20@@=0A=
=20;;;=20signal=20an=20error.=0A=20=0A=20(macrolet=0A-=20=20=20=20=
((define-scalar-cast=20(scalar-cast-record-name)=0A-=20=20=20=20=20=20=20=
(with-accessors=20((name=20scalar-cast-record-name))=0A+=20=20=20=20=
((call-vop=20(instruction-record-name=20&rest=20arguments)=0A+=20=20=20=20=
=20=20=20(with-accessors=20((instruction-set=20=
instruction-record-instruction-set)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20(vop=20instruction-record-vop))=0A+=20=
=20=20=20=20=20=20=20=20=20=20(find-function-record=20=
instruction-record-name)=0A+=20=20=20=20=20=20=20=20=20(if=20=
(instruction-set-available-p=20instruction-set)=0A+=20=20=20=20=20=20=20=20=
=20=20=20=20=20`(,vop=20,@arguments)=0A+=20=20=20=20=20=20=20=20=20=20=20=
=20=20`(progn=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(missing-instruction=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(load-time-value=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(find-function-record=20',instruction-record-name)))=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20(touch=20,@arguments)))))=0A+=20=20=20=20=20=
(define-scalar-cast=20(scalar-cast-record-name)=0A+=20=20=20=20=20=20=20=
(with-accessors=20((name=20scalar-cast-record-name)=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(instruction-set=20=
scalar-cast-record-instruction-set))=0A=20=20=20=20=20=20=20=20=20=20=20=20=
(find-function-record=20scalar-cast-record-name)=0A=20=20=20=20=20=20=20=20=
=20=20(let=20((err=20(mksym=20(symbol-package=20name)=20=
"CANNOT-CONVERT-TO-"=20name)))=0A=20=20=20=20=20=20=20=20=20=20=20=20=
`(progn=0A@@=20-17,33=20+29,34=20@@=0A=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20:overwrite-fndb-silently=20t)=0A=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20(sb-c:deftransform=20,name=20((x)=20(,name)=20*)=0A=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20'x)=0A-=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20,@(case=20name=0A-=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20(sb-simd:f32=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20`((sb-c:deftransform=20,name=20((x)=20(double-float)=20=
*)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
'(coerce=20x=20'single-float))))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20(sb-simd:f64=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20`((sb-c:deftransform=20,name=20((x)=20(single-float)=20*)=0A=
-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
'(coerce=20x=20'double-float))))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20(sb-simd-sse:f32=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20`((sb-c:deftransform=20,name=20((x)=20(double-float)=20=
*)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
'(sb-kernel:%single-float=20x))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20(sb-c:deftransform=20,name=20((x)=20=
((signed-byte=2064))=20*)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20'(sb-simd-sse::f32-from-s64=20x))))=0A-=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20(sb-simd-sse2:f64=0A-=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20`((sb-c:deftransform=20=
,name=20((x)=20(single-float)=20*)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20'(sb-simd-sse2::f64-from-f32=20x))=0A-=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(sb-c:deftransform=20,name=20((x)=20((signed-byte=2064))=20*)=0A-=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
'(sb-simd-sse2::f64-from-s64=20x))))=0A-=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20(sb-simd-avx:f32=0A-=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20`((sb-c:deftransform=20,name=20((x)=20=
(double-float)=20*)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20'(sb-simd-avx::f32-from-f64=20x))=0A-=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(sb-c:deftransform=20,name=20=
((x)=20((signed-byte=2064))=20*)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20'(sb-simd-avx::f32-from-s64=20x))))=0A-=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(sb-simd-avx:f64=0A-=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20`((sb-c:deftransform=20=
,name=20((x)=20(single-float)=20*)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20'(sb-simd-avx::f64-from-f32=20x))=0A-=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(sb-c:deftransform=20,name=20((x)=20((signed-byte=2064))=20*)=0A-=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
'(sb-simd-avx::f64-from-s64=20x)))))=0A+=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20,@(when=20(instruction-set-available-p=20instruction-set)=0A+=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(case=20name=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(sb-simd:f32=0A+=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
`((sb-c:deftransform=20,name=20((x)=20(double-float)=20*)=0A+=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20'(coerce=20=
x=20'single-float))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20(sb-simd:f64=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20`((sb-c:deftransform=20,name=20((x)=20(single-float)=20=
*)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20'(coerce=20x=20'double-float))))=0A+=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20(sb-simd-sse:f32=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20`((sb-c:deftransform=20,name=20((x)=20=
(double-float)=20*)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20'(sb-kernel:%single-float=20x))=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(sb-c:deftransform=20=
,name=20((x)=20((signed-byte=2064))=20*)=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20'(sb-simd-sse::f32-from-s64=20=
x))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(sb-simd-sse2:f64=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20`((sb-c:deftransform=20,name=20((x)=20(single-float)=20*)=0A+=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
'(sb-simd-sse2::f64-from-f32=20x))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20(sb-c:deftransform=20,name=20((x)=20=
((signed-byte=2064))=20*)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20'(sb-simd-sse2::f64-from-s64=20x))))=0A+=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(sb-simd-avx:f32=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20`((sb-c:deftransform=20,name=20((x)=20(double-float)=20*)=0A+=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
'(sb-simd-avx::f32-from-f64=20x))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20(sb-c:deftransform=20,name=20((x)=20=
((signed-byte=2064))=20*)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20'(sb-simd-avx::f32-from-s64=20x))))=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(sb-simd-avx:f64=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
`((sb-c:deftransform=20,name=20((x)=20(single-float)=20*)=0A+=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
'(sb-simd-avx::f64-from-f32=20x))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20(sb-c:deftransform=20,name=20((x)=20=
((signed-byte=2064))=20*)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20'(sb-simd-avx::f64-from-s64=20x))))))=0A=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20(defun=20,name=20(x)=0A=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20(typecase=20x=0A=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20(,name=20x)=0A@@=20-56,19=20=
+69,19=20@@=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20(real=20(coerce=20x=20',name))))=0A=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(sb-simd-sse:f32=0A=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
`((double-float=20(sb-kernel:%single-float=20x))=0A-=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(sb-simd-sse:s64=20=
(sb-simd-sse::%f32-from-s64=20x))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20(sb-simd-sse:s64=20(call-vop=20=
sb-simd-sse::f32-from-s64=20x))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20(real=20(coerce=20x=20',name))))=0A=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(sb-simd-sse2:f64=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20`((sb-simd-sse2:f32=20(sb-simd-sse2::%f64-from-f32=20x))=0A=
-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20(sb-simd-sse2:s64=20(sb-simd-sse2::%f64-from-s64=20x))=0A+=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
`((sb-simd-sse2:f32=20(call-vop=20sb-simd-sse2::f64-from-f32=20x))=0A+=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(sb-simd-sse2:s64=20(call-vop=20sb-simd-sse2::f64-from-s64=20x))=0A=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(real=20(coerce=20x=20',name))))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20(sb-simd-avx:f32=0A-=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20`((sb-simd-avx:f64=20=
(sb-simd-avx::%f32-from-f64=20x))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20(sb-simd-avx:s64=20=
(sb-simd-avx::%f32-from-s64=20x))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20`((sb-simd-avx:f64=20(call-vop=20=
sb-simd-avx::f32-from-f64=20x))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20(sb-simd-avx:s64=20(call-vop=20=
sb-simd-avx::f32-from-s64=20x))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20(real=20(coerce=20x=20',name))))=0A=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(sb-simd-avx:f64=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20`((sb-simd-avx:f32=20(sb-simd-avx::%f64-from-f32=20x))=0A=
-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20(sb-simd-avx:s64=20(sb-simd-avx::%f64-from-s64=20x))=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20`((sb-simd-avx:f32=20=
(call-vop=20sb-simd-avx::f64-from-f32=20x))=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(sb-simd-avx:s64=20=
(call-vop=20sb-simd-avx::f64-from-s64=20x))=0A=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(real=20(coerce=20x=20=
',name)))))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(otherwise=20(,err=20x))))))))=0A=20=20=20=20=20=20(define-scalar-casts=20=
()=0Adiff=20--git=20a/contrib/sb-simd/code/define-simd-casts.lisp=20=
b/contrib/sb-simd/code/define-simd-casts.lisp=0Aindex=20=
cc3e1c183..acb1d9b49=20100644=0A---=20=
a/contrib/sb-simd/code/define-simd-casts.lisp=0A+++=20=
b/contrib/sb-simd/code/define-simd-casts.lisp=0A@@=20-48,13=20+48,14=20=
@@=0A=20=20=20=20=20=20=20=20=20=20=20=20`(progn=0A=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20(define-notinline=20,err=20(x)=0A=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20(error=20"Cannot=20convert=20~S=20to=20=
~S."=20x=20',name))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(sb-c:defknown=20,name=20(t)=20(values=20,name=20&optional)=0A-=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20(sb-c:foldable)=0A-=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20:overwrite-fndb-silently=20t)=0A-=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20(sb-c:deftransform=20,name=20((x)=20=
(,simd-type)=20*)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20'x)=0A=
-=20=20=20=20=20=20=20=20=20=20=20=20=20=20(sb-c:deftransform=20,name=20=
((x)=20(real)=20*)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
'(,broadcast=20(,real-type=20x)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20,@(when=20(instruction-set-available-p=20instruction-set)=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20`((sb-c:defknown=20,name=20=
(t)=20(values=20,name=20&optional)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20(sb-c:foldable)=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20:overwrite-fndb-silently=20=
t)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(sb-c:deftransform=20,name=20((x)=20(,simd-type)=20*)=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20'x)=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20(sb-c:deftransform=20,name=20=
((x)=20(real)=20*)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20'(,broadcast=20(,real-type=20x)))))=0A=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20(defun=20,name=20(x)=0A=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20(typecase=20x=0A=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20(,simd-type=20x)=0Adiff=20--git=20=
a/contrib/sb-simd/code/define-vref-vops.lisp=20=
b/contrib/sb-simd/code/define-vref-vops.lisp=0Aindex=20=
b68cd8f16..3a93fd41b=20100644=0A---=20=
a/contrib/sb-simd/code/define-vref-vops.lisp=0A+++=20=
b/contrib/sb-simd/code/define-vref-vops.lisp=0A@@=20-7,6=20+7,7=20@@=0A=20=
;;;=20variants=20of=20the=20VOP=20-=20one=20for=20the=20general=20case,=20=
and=20one=20for=20the=20case=0A=20;;;=20where=20the=20index=20is=20a=20=
compile-time=20constant.=0A=20=0A+#+(or=20x86=20x86-64)=0A=20(macrolet=0A=
=20=20=20=20=20((define-vref-vop=20(vref-record-name)=0A=20=20=20=20=20=20=
=20=20(with-accessors=20((name=20sb-simd-internals:vref-record-name)=0A=
diff=20--git=20a/contrib/sb-simd/code/define-vrefs.lisp=20=
b/contrib/sb-simd/code/define-vrefs.lisp=0Aindex=206834ef918..11186b567=20=
100644=0A---=20a/contrib/sb-simd/code/define-vrefs.lisp=0A+++=20=
b/contrib/sb-simd/code/define-vrefs.lisp=0A@@=20-14,23=20+14,29=20@@=0A=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(value-record-type=20vector-record))))=0A=20=20=20=20=20=20=20=20=20=20=20=
=20(ecase=20kind=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:load=0A-=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20`(define-inline=20,name=20(array=20=
index)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(declare=20=
(type=20(array=20,element-type)=20array)=0A-=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(index=20index))=0A-=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(sb-kernel:check-bound=20=
array=20(array-total-size=20array)=20(+=20index=20,(1-=20simd-width)))=0A=
-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(multiple-value-bind=20=
(vector=20index)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20(sb-kernel:%data-vector-and-index=20array=20index)=0A-=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(declare=20(type=20=
(simple-array=20,element-type=20(*))=20vector))=0A-=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20(,vop=20vector=20index=200))))=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20(if=20(not=20=
(instruction-set-available-p=20instruction-set))=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20`(define-missing-instruction=20,name=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
:required-arguments=20(array=20index))=0A+=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20`(define-inline=20,name=20(array=20index)=0A+=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(declare=20(type=20=
(array=20,element-type)=20array)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(index=20index))=0A+=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(sb-kernel:check-bound=20array=20(array-total-size=20array)=20(+=20index=20=
,(1-=20simd-width)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20(multiple-value-bind=20(vector=20index)=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(sb-kernel:%data-vector-and-index=20array=20index)=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(declare=20(type=20=
(simple-array=20,element-type=20(*))=20vector))=0A+=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(,vop=20vector=20index=20=
0)))))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:store=0A-=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20`(define-inline=20,name=20(value=20array=20=
index)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(declare=20=
(type=20(array=20,element-type)=20array)=0A-=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(index=20index))=0A-=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(sb-kernel:check-bound=20=
array=20(array-total-size=20array)=20(+=20index=20,(1-=20simd-width)))=0A=
-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(multiple-value-bind=20=
(vector=20index)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20(sb-kernel:%data-vector-and-index=20array=20index)=0A-=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(declare=20(type=20=
(simple-array=20,element-type=20(*))=20vector))=0A-=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20(,vop=20(,(value-record-name=20=
value-record)=20value)=20vector=20index=200))))))))=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20(if=20(not=20(instruction-set-available-p=20=
instruction-set))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
`(define-missing-instruction=20,name=0A+=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20:required-arguments=20(value=20array=20=
index))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
`(define-inline=20,name=20(value=20array=20index)=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20(declare=20(type=20(array=20=
,element-type)=20array)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20(index=20index))=0A+=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(sb-kernel:check-bound=20array=20(array-total-size=20array)=20(+=20index=20=
,(1-=20simd-width)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20(multiple-value-bind=20(vector=20index)=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(sb-kernel:%data-vector-and-index=20array=20index)=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(declare=20(type=20=
(simple-array=20,element-type=20(*))=20vector))=0A+=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(,vop=20=
(,(value-record-name=20value-record)=20value)=20vector=20index=20=
0)))))))))=0A=20=20=20=20=20=20(define-vrefs=20()=0A=20=20=20=20=20=20=20=
=20`(progn=0A=20=20=20=20=20=20=20=20=20=20=20,@(loop=20for=20=
load-record=20in=20(filter-function-records=20#'load-record-p)=0Adiff=20=
--git=20a/contrib/sb-simd/code/record.lisp=20=
b/contrib/sb-simd/code/record.lisp=0Aindex=2077f581d80..90eadebe7=20=
100644=0A---=20a/contrib/sb-simd/code/record.lisp=0A+++=20=
b/contrib/sb-simd/code/record.lisp=0A@@=20-181,13=20+181,22=20@@=0A=20=
(defun=20scalar-record-p=20(x)=0A=20=20=20(typep=20x=20'(and=20=
value-record=20(not=20simd-record))))=0A=20=0A+#-simd-pack-256=0A+(progn=0A=
+=20=20(defstruct=20phony-simd-pack-256)=0A+=20=20(deftype=20=
simd-pack-256=20(&optional=20element-type)=0A+=20=20=20=20(declare=20=
(ignore=20element-type))=0A+=20=20=20=20'phony-simd-pack-256))=0A+=0A=20=
(defmethod=20decode-record-definition=20((_=20(eql=20'simd-record))=20=
expr):w=0A=20=20=20(destructuring-bind=20(name=20scalar-record-name=20=
bits=20primitive-type=20scs)=20expr=0A=20=20=20=20=20(let=20=
((simd-pack-type=0A=20=20=20=20=20=20=20=20=20=20=20=20=20(let=20=
((base-type=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20(ecase=20bits=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20(128=20(find-symbol=20"SIMD-PACK"=20"SB-EXT"))=0A-=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(256=20=
(find-symbol=20"SIMD-PACK-256"=20"SB-EXT")))))=0A+=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20(256=20(or=20(find-symbol=20=
"SIMD-PACK-256"=20"SB-EXT")=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#-simd-pack-256=0A+=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20'simd-pack-256)))))=0A=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20(cond=20((not=20base-type)=20't)=0A=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20((not=20scalar-record-name)=20=
base-type)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20(t=20`(,base-type=20,scalar-record-name))))))=0A--=20=0A2.50.1=20=
(Apple=20Git-155)=0A=0A=

--Apple-Mail=_03B53131-1088-4A20-8204-C6AF066A7E81
Content-Disposition: attachment;
	filename=0002-arm64-Implement-SIMD-PACK.patch
Content-Type: application/octet-stream;
	x-unix-mode=0644;
	name="0002-arm64-Implement-SIMD-PACK.patch"
Content-Transfer-Encoding: quoted-printable

=46rom=2019faf185bf2fa38969d2b1bc22492230787c9745=20Mon=20Sep=2017=20=
00:00:00=202001=0AFrom:=20Sylvia=20Harrington=20=
<[email protected]>=0ADate:=20Tue,=2017=20Jun=202025=20=
23:05:07=20+0100=0ASubject:=20[PATCH=202/4]=20arm64:=20Implement=20=
SIMD-PACK=0A=0A---=0A=20src/code/debug-int.lisp=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20|=20=2036=20++-=0A=20src/compiler/arm64/insts.lisp=20=20=20=
=20=20=20=20=20|=20182=20+++++++++---=0A=20src/compiler/arm64/parms.lisp=20=
=20=20=20=20=20=20=20|=20=2018=20++=0A=20=
src/compiler/arm64/simd-pack.lisp=20=20=20=20|=20397=20=
+++++++++++++++++++++++++++=0A=20src/compiler/arm64/target-insts.lisp=20=
|=20=2059=20++--=0A=20src/compiler/arm64/vm.lisp=20=20=20=20=20=20=20=20=20=
=20=20|=20=2048=20+++-=0A=20src/compiler/generic/primtype.lisp=20=20=20|=20=
=2036=20++-=0A=207=20files=20changed,=20698=20insertions(+),=2078=20=
deletions(-)=0A=20create=20mode=20100644=20=
src/compiler/arm64/simd-pack.lisp=0A=0Adiff=20--git=20=
a/src/code/debug-int.lisp=20b/src/code/debug-int.lisp=0Aindex=20=
33b813f6e..0f731b54d=20100644=0A---=20a/src/code/debug-int.lisp=0A+++=20=
b/src/code/debug-int.lisp=0A@@=20-2458,22=20+2458,27=20@@=0A=20=20=20=20=20=
=20=20=20(with-escaped-value=20(val)=0A=20=20=20=20=20=20=20=20=20=20=
val))=0A=20=20=20=20=20=20=20#+sb-simd-pack=0A-=20=20=20=20=20=20=
((#.sb-vm::sse-reg-sc-number=20#.sb-vm::int-sse-reg-sc-number)=0A+=20=20=20=
=20=20=20((#+x86-64=20#.sb-vm::sse-reg-sc-number=20#+x86-64=20=
#.sb-vm::int-sse-reg-sc-number=0A+=20=20=20=20=20=20=20=20#+arm64=20=
#.sb-vm::neon-reg-sc-number=20#+x86-64=20=
#.sb-vm::int-neon-reg-sc-number)=0A=20=20=20=20=20=20=20=20=
(escaped-float-value=20simd-pack-int))=0A=20=20=20=20=20=20=20=
#+sb-simd-pack=0A-=20=20=20=20=20=20((#.sb-vm::single-sse-reg-sc-number)=0A=
+=20=20=20=20=20=20((#+x86-64=20#.sb-vm::single-sse-reg-sc-number=0A+=20=20=
=20=20=20=20=20=20#+arm64=20#.sb-vm::single-neon-reg-sc-number)=0A=20=20=20=
=20=20=20=20=20(escaped-float-value=20simd-pack-single))=0A=20=20=20=20=20=
=20=20#+sb-simd-pack=0A-=20=20=20=20=20=20=
((#.sb-vm::double-sse-reg-sc-number)=0A+=20=20=20=20=20=20((#+x86-64=20=
#.sb-vm::double-sse-reg-sc-number=0A+=20=20=20=20=20=20=20=20#+arm64=20=
#.sb-vm::double-neon-reg-sc-number)=0A=20=20=20=20=20=20=20=20=
(escaped-float-value=20simd-pack-double))=0A=20=20=20=20=20=20=20=
#+sb-simd-pack=0A-=20=20=20=20=20=20((#.sb-vm::int-sse-stack-sc-number)=0A=
+=20=20=20=20=20=20((#+x86-64=20#.sb-vm::int-sse-stack-sc-number=0A+=20=20=
=20=20=20=20=20=20#+arm64=20#.sb-vm::int-neon-stack-sc-number)=0A=20=20=20=
=20=20=20=20=20(with-nfp=20(nfp)=0A=20=20=20=20=20=20=20=20=20=20=
(%make-simd-pack-ub64=0A=20=20=20=20=20=20=20=20=20=20=20(sap-ref-64=20=
nfp=20(number-stack-offset=200))=0A=20=20=20=20=20=20=20=20=20=20=20=
(sap-ref-64=20nfp=20(number-stack-offset=208)))))=0A=20=20=20=20=20=20=20=
#+sb-simd-pack=0A-=20=20=20=20=20=20=
((#.sb-vm::single-sse-stack-sc-number)=0A+=20=20=20=20=20=20((#+x86-64=20=
#.sb-vm::single-sse-stack-sc-number=0A+=20=20=20=20=20=20=20=20#+arm64=20=
#.sb-vm::single-neon-stack-sc-number)=0A=20=20=20=20=20=20=20=20=
(with-nfp=20(nfp)=0A=20=20=20=20=20=20=20=20=20=20=
(%make-simd-pack-single=0A=20=20=20=20=20=20=20=20=20=20=20=
(sap-ref-single=20nfp=20(number-stack-offset=200))=0A@@=20-2481,7=20=
+2486,8=20@@=0A=20=20=20=20=20=20=20=20=20=20=20(sap-ref-single=20nfp=20=
(number-stack-offset=208))=0A=20=20=20=20=20=20=20=20=20=20=20=
(sap-ref-single=20nfp=20(number-stack-offset=2012)))))=0A=20=20=20=20=20=20=
=20#+sb-simd-pack=0A-=20=20=20=20=20=20=
((#.sb-vm::double-sse-stack-sc-number)=0A+=20=20=20=20=20=20((#+x86-64=20=
#.sb-vm::double-sse-stack-sc-number=0A+=20=20=20=20=20=20=20=20#+arm64=20=
#.sb-vm::double-neon-stack-sc-number)=0A=20=20=20=20=20=20=20=20=
(with-nfp=20(nfp)=0A=20=20=20=20=20=20=20=20=20=20=
(%make-simd-pack-double=0A=20=20=20=20=20=20=20=20=20=20=20=
(sap-ref-double=20nfp=20(number-stack-offset=200))=0A@@=20-2688,22=20=
+2694,27=20@@=0A=20=20=20=20=20=20=20(#.non-descriptor-reg-sc-number=0A=20=
=20=20=20=20=20=20=20(error=20"Local=20non-descriptor=20register=20=
access?"))=0A=20=20=20=20=20=20=20#+sb-simd-pack=0A-=20=20=20=20=20=20=
((#.sb-vm::sse-reg-sc-number=20#.sb-vm::int-sse-reg-sc-number)=0A+=20=20=20=
=20=20=20((#+x86-64=20#.sb-vm::sse-reg-sc-number=20#+x86-64=20=
#.sb-vm::int-sse-reg-sc-number=0A+=20=20=20=20=20=20=20=20#+arm64=20=
#.sb-vm::neon-reg-sc-number=20#+arm64=20#.sb-vm::int-neon-reg-sc-number)=0A=
=20=20=20=20=20=20=20=20(set-escaped-float-value=20simd-pack-int=20=
value))=0A=20=20=20=20=20=20=20#+sb-simd-pack=0A-=20=20=20=20=20=20=
((#.sb-vm::single-sse-reg-sc-number)=0A+=20=20=20=20=20=20((#+x86-64=20=
#.sb-vm::single-sse-reg-sc-number=0A+=20=20=20=20=20=20=20=20#+arm64=20=
#.sb-vm::single-neon-reg-sc-number)=0A=20=20=20=20=20=20=20=20=
(set-escaped-float-value=20simd-pack-single=20value))=0A=20=20=20=20=20=20=
=20#+sb-simd-pack=0A-=20=20=20=20=20=20=
((#.sb-vm::double-sse-reg-sc-number)=0A+=20=20=20=20=20=20((#+x86-64=20=
#.sb-vm::double-sse-reg-sc-number=0A+=20=20=20=20=20=20=20=20#+arm64=20=
#.sb-vm::double-neon-reg-sc-number)=0A=20=20=20=20=20=20=20=20=
(set-escaped-float-value=20simd-pack-double=20value))=0A=20=20=20=20=20=20=
=20#+sb-simd-pack=0A-=20=20=20=20=20=20=
((#.sb-vm::int-sse-stack-sc-number)=0A+=20=20=20=20=20=20((#+x86-64=20=
#.sb-vm::int-sse-stack-sc-number=0A+=20=20=20=20=20=20=20=20#+arm64=20=
#.sb-vm::int-neon-stack-sc-number)=0A=20=20=20=20=20=20=20=20=
(multiple-value-bind=20(a=20b)=20(%simd-pack-ub64s=20value)=0A=20=20=20=20=
=20=20=20=20=20=20(with-nfp=20(nfp)=0A=20=20=20=20=20=20=20=20=20=20=20=20=
(setf=20(sap-ref-64=20nfp=20(number-stack-offset=200))=20a=0A=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20(sap-ref-64=20nfp=20=
(number-stack-offset=208))=20b))))=0A=20=20=20=20=20=20=20#+sb-simd-pack=0A=
-=20=20=20=20=20=20((#.sb-vm::single-sse-stack-sc-number)=0A+=20=20=20=20=
=20=20((#+x86-64=20#.sb-vm::single-sse-stack-sc-number=0A+=20=20=20=20=20=
=20=20=20#+arm64=20#.sb-vm::single-neon-stack-sc-number)=0A=20=20=20=20=20=
=20=20=20(multiple-value-bind=20(a=20b=20c=20d)=20(%simd-pack-singles=20=
value)=0A=20=20=20=20=20=20=20=20=20=20(with-nfp=20(nfp)=0A=20=20=20=20=20=
=20=20=20=20=20=20=20(setf=20(sap-ref-single=20nfp=20=
(number-stack-offset=200))=20a=0A@@=20-2711,7=20+2722,8=20@@=0A=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20(sap-ref-single=20nfp=20=
(number-stack-offset=208))=20c=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20(sap-ref-single=20nfp=20(number-stack-offset=2012))=20d))))=0A=
=20=20=20=20=20=20=20#+sb-simd-pack=0A-=20=20=20=20=20=20=
((#.sb-vm::double-sse-stack-sc-number)=0A+=20=20=20=20=20=20((#+x86-64=20=
#.sb-vm::double-sse-stack-sc-number=0A+=20=20=20=20=20=20=20=20#+arm64=20=
#.sb-vm::double-neon-stack-sc-number)=0A=20=20=20=20=20=20=20=20=
(multiple-value-bind=20(a=20b)=20(%simd-pack-doubles=20value)=0A=20=20=20=
=20=20=20=20=20=20=20(with-nfp=20(nfp)=0A=20=20=20=20=20=20=20=20=20=20=20=
=20(setf=20(sap-ref-double=20nfp=20(number-stack-offset=200))=20a=0Adiff=20=
--git=20a/src/compiler/arm64/insts.lisp=20=
b/src/compiler/arm64/insts.lisp=0Aindex=20da63cb99a..e9981a82e=20100644=0A=
---=20a/src/compiler/arm64/insts.lisp=0A+++=20=
b/src/compiler/arm64/insts.lisp=0A@@=20-21,6=20+21,11=20@@=0A=20=20=20=20=
=20=20=20=20=20=20=20=20=20ldr-str-offset-encodable=20ldp-stp-offset-p=0A=
=20=20=20=20=20=20=20=20=20=20=20=20=20extend=20lsl=20lsr=20asr=20ror=20=
@=20encode-fp-immediate)=20"SB-VM")=0A=20=20=20;;=20Imports=20from=20=
SB-VM=20into=20this=20package=0A+=20=20#+sb-simd-pack=0A+=20=20(import=20=
'(sb-vm::neon-reg=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
sb-vm::int-neon-reg=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
sb-vm::double-neon-reg=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
sb-vm::single-neon-reg))=0A=20=20=20(import=20'(sb-vm::*register-names*=0A=
=20=20=20=20=20=20=20=20=20=20=20=20=20sb-vm::add-sub-immediate=0A=20=20=20=
=20=20=20=20=20=20=20=20=20=20sb-vm::32-bit-reg=20sb-vm::single-reg=20=
sb-vm::double-reg=0A@@=20-113,6=20+118,7=20@@=0A=20=20=20=
(define-arg-type=20simd-copy-reg=20:printer=20#'print-simd-copy-reg)=0A=20=
=20=20(define-arg-type=20simd-dup-reg=20:printer=20#'print-simd-dup-reg)=0A=
=20=20=20(define-arg-type=20simd-float-reg=20:printer=20=
#'print-simd-float-reg)=0A+=20=20(define-arg-type=20simd-dup-float-reg=20=
:printer=20#'print-simd-dup-float-reg)=0A=20=0A=20=20=20(define-arg-type=20=
simd-immh-reg=20:printer=20#'print-simd-immh-reg)=0A=20=20=20=
(define-arg-type=20simd-immh-shift-left=20:printer=20=
#'print-simd-immh-shift-left)=0A@@=20-159,6=20+165,23=20@@=0A=20=20=20=
(and=20(tn-p=20thing)=0A=20=20=20=20=20=20=20=20(eq=20(sb-name=20(sc-sb=20=
(tn-sc=20thing)))=20'sb-vm::float-registers)))=0A=20=0A+(defun=20=
single-register-p=20(thing)=0A+=20=20(and=20(tn-p=20thing)=0A+=20=20=20=20=
=20=20=20(eq=20(sc-name=20(tn-sc=20thing))=20'sb-vm::single-reg)))=0A+=0A=
+(defun=20double-register-p=20(thing)=0A+=20=20(and=20(tn-p=20thing)=0A+=20=
=20=20=20=20=20=20(eq=20(sc-name=20(tn-sc=20thing))=20=
'sb-vm::double-reg)))=0A+=0A+(defun=20vector-register-p=20(thing)=0A+=20=20=
(declare=20(ignorable=20thing))=0A+=20=20#+sb-simd-pack=0A+=20=20(and=20=
(tn-p=20thing)=0A+=20=20=20=20=20=20=20(member=20(sc-name=20(tn-sc=20=
thing))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
'(sb-vm::neon-reg=20sb-vm::int-neon-reg=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20sb-vm::single-neon-reg=20sb-vm::double-neon-reg)=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20:test=20#'eq)))=0A+=0A=20=
(defun=20reg-size=20(tn)=0A=20=20=20(if=20(sc-is=20tn=2032-bit-reg)=0A=20=
=20=20=20=20=20=200=0A@@=20-1517,7=20+1540,11=20@@=0A=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=200))=0A=20=20=20=20=20=20=20=20=20=20=
(size=20(cond=20(fp=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20(sc-case=20dst=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20(complex-double-reg=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20((#+sb-simd-pack=20=
neon-reg=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20#+sb-simd-pack=20sb-vm::int-neon-reg=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
#+sb-simd-pack=20sb-vm::double-neon-reg=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#+sb-simd-pack=20=
sb-vm::single-neon-reg=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20complex-double-reg)=0A=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(setf=20opc=20=
(logior=20#b10=20opc))=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20#b00)=0A=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20(t=0A@@=20-2409,7=20+2436,11=20@@=0A=
=20=20=20=20=20=200)=0A=20=20=20=20=20((double-reg=20complex-single-reg)=0A=
=20=20=20=20=20=201)=0A-=20=20=20=20(complex-double-reg=0A+=20=20=20=20=
((#+sb-simd-pack=20neon-reg=0A+=20=20=20=20=20=20#+sb-simd-pack=20=
int-neon-reg=0A+=20=20=20=20=20=20#+sb-simd-pack=20double-neon-reg=0A+=20=
=20=20=20=20=20#+sb-simd-pack=20single-neon-reg=0A+=20=20=20=20=20=20=
complex-double-reg)=0A=20=20=20=20=20=20#b10)))=0A=20=0A=20(def-emitter=20=
fp-compare=0A@@=20-2879,7=20+2910,12=20@@=0A=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20(emit-ldr-literal=20segment=0A=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(sc-case=20dest=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20((32-bit-reg=20=
single-reg)=20#b00)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(complex-double-reg=20=
#b10)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20((#+sb-simd-pack=20neon-reg=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20#+sb-simd-pack=20sb-vm::int-neon-reg=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20#+sb-simd-pack=20sb-vm::double-neon-reg=0A+=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20#+sb-simd-pack=20sb-vm::single-neon-reg=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20complex-double-reg)=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20#b10)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(t=20#b01))=0A=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20(if=20(fp-register-p=20dest)=0A=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=201=0A@@=20-3214,18=20+3250,34=20@@=0A=20=20=20(rn=20:fields=20=
(list=20(byte=205=205)=20(byte=205=2016)=20(byte=204=2011))=20:type=20=
'simd-copy-reg)=0A=20=20=20(rd=20:fields=20(list=20(byte=205=200)=20=
(byte=205=2016))=20:type=20'simd-copy-reg))=0A=20=0A=
+(define-instruction-format=20(simd-copy-from-general=2032=0A+=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
:include=20simd-copy=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20:default-printer=20'(:name=20:tab=20rd=20=
",=20"=20rn))=0A+=20=20(rn=20:fields=20(list=20(byte=201=2030)=20(byte=20=
5=205))=20:type=20'sized-reg)=0A+=20=20(rd=20:fields=20(list=20(byte=205=20=
0)=20(byte=205=2016))=20:type=20'simd-copy-reg))=0A+=0A=20=
(define-instruction=20ins=20(segment=20rd=20index1=20rn=20index2=20size)=0A=
=20=20=20(:printer=20simd-copy=20((q=201)=20(op=201)))=0A+=20=20=
(:printer=20simd-copy-from-general=20((q=201)=20(op=200)=20(imm4=20=
#b0011)))=0A=20=20=20(:emitter=0A=20=20=20=20(let=20((size=20(position=20=
size=20'(:B=20:H=20:S=20:D))))=0A-=20=20=20=20=20(emit-simd-copy=20=
segment=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
1=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=201=0A=
-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(logior=20=
(ash=20index1=20(1+=20size))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(ash=201=20size))=0A-=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(ash=20index2=20=
size)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(fpr-offset=20rn)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20(fpr-offset=20rd)))))=0A+=20=20=20=20=20(if=20index2=0A+=20=20=20=
=20=20=20=20=20=20(emit-simd-copy=20segment=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=201=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=201=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(logior=20=
(ash=20index1=20(1+=20size))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(ash=201=20=
size))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20(ash=20index2=20size)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20(fpr-offset=20rn)=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(fpr-offset=20=
rd))=0A+=20=20=20=20=20=20=20=20=20(emit-simd-copy=20segment=0A+=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=201=0A+=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
0=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20(logior=20(ash=20index1=20(1+=20size))=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(ash=201=20size))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20#b0011=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20(gpr-offset=20rn)=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(fpr-offset=20=
rd))))))=0A=20=0A=20(define-instruction-format=20(simd-copy-to-general=20=
32=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20:include=20simd-copy=0A@@=20-3251,29=20+3303,88=20@@=0A=
=20=20=20(def=20umov=200=20#b0111=20(:d))=0A=20=20=20(def=20smov=200=20=
#b0101=20(:d=20:s)))=0A=20=0A-(define-instruction=20dup=20(segment=20rd=20=
rn=20size)=0A-=20=20(:printer=20simd-copy-to-general=0A-=20=20=20=20=20=20=
=20=20=20=20=20=20((op=200)=20(imm4=201)=0A-=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20(rn=20nil=20:fields=20(list=20(byte=205=20=
5)=20(byte=201=2030)=20(byte=205=2016))=0A-=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20:type=20=
'simd-dup-reg))=0A-=20=20=20=20=20=20=20=20=20=20=20=20'(:name=20:tab=20=
rn=20",=20"=20rd))=0A+(define-instruction-format=20=
(simd-dup-from-general=2032=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20:include=20simd-copy=0A+=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
:default-printer=20'(:name=20:tab=20rd=20",=20"=20rn))=0A+=20=20(rn=20=
:fields=20(list=20(byte=201=2030)=20(byte=205=205))=20:type=20=
'sized-reg)=0A+=20=20(rd=20:fields=20(list=20(byte=205=200)=20(byte=201=20=
30)=20(byte=205=2016))=20:type=20'simd-dup-reg))=0A+=0A=
+(define-instruction-format=20(simd-dup=2032=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20:include=20=
simd-copy=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20:default-printer=20'(:name=20:tab=20rd=20",=20"=20=
rn))=0A+=20=20(rn=20:fields=20(list=20(byte=205=205)=20(byte=205=2016))=20=
:type=20'simd-copy-reg)=0A+=20=20(rd=20:fields=20(list=20(byte=205=200)=20=
(byte=201=2030)=20(byte=205=2016))=20:type=20'simd-dup-reg))=0A+=0A=
+(define-instruction-format=20(simd-dup-extract=2032=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
:include=20simd-copy=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20:default-printer=20'(:name=20:tab=20rd=20=
",=20"=20rn))=0A+=20=20(op4=20:field=20(byte=208=2021)=20:value=20=
#b11110000)=0A+=20=20(rn=20:fields=20(list=20(byte=205=205)=20(byte=205=20=
16))=20:type=20'simd-copy-reg)=0A+=20=20(rd=20:fields=20(list=20(byte=20=
5=200)=20(byte=205=2016))=20:type=20'simd-dup-float-reg))=0A+=0A=
+(def-emitter=20simd-dup-extract=0A+=20=20(#b0=201=2031)=0A+=20=20(q=201=20=
30)=0A+=20=20(op=201=2029)=0A+=20=20(#b11110000=208=2021)=0A+=20=20(imm5=20=
5=2016)=0A+=20=20(#b0=201=2015)=0A+=20=20(imm4=204=2011)=0A+=20=20(#b1=20=
1=2010)=0A+=20=20(rn=205=205)=0A+=20=20(rd=205=200))=0A+=0A+;;=20DUP=20=
(general):=20=20=20=20=20=20=20=20=20DUP=20<Vd>.<T>,=20<R><n>=0A+;;=20=
DUP=20(element,=20vector):=20DUP=20<Vd>.<T>,=20<Vn>.<Ts>[<index>]=0A+;;=20=
DUP=20(element,=20scalar):=20DUP=20<V><d>,=20<Vn>.<Ts>[<index>]=0A=
+(define-instruction=20dup=20(segment=20rd=20rn=20size=20&optional=20=
lane)=0A+=20=20(:printer=20simd-dup-from-general=20((op=200)=20(imm4=20=
1)))=0A+=20=20(:printer=20simd-dup=20((op=200)=20(imm4=200)))=0A+=20=20=
(:printer=20simd-dup-extract=20((op=200)=20(imm4=200)))=0A=20=20=20=
(:emitter=0A-=20=20=20(multiple-value-bind=20(q=20imm)=0A-=20=20=20=20=20=
=20=20(ecase=20size=0A-=20=20=20=20=20=20=20=20=20(:8b=20(values=200=20=
#b1))=0A-=20=20=20=20=20=20=20=20=20(:16b=20(values=201=20#b1))=0A-=20=20=
=20=20=20=20=20=20=20(:4h=20(values=200=20#b10))=0A-=20=20=20=20=20=20=20=
=20=20(:8h=20(values=201=20#b10))=0A-=20=20=20=20=20=20=20=20=20(:2s=20=
(values=200=20#b100))=0A-=20=20=20=20=20=20=20=20=20(:4s=20(values=201=20=
#b100))=0A-=20=20=20=20=20=20=20=20=20(:2d=20(values=201=20#b1000)))=0A-=20=
=20=20=20=20(emit-simd-copy=20segment=0A-=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20q=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=200=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20imm=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=201=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20(gpr-offset=20rn)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20(fpr-offset=20rd)))))=0A+=20=20=20(cond=20((or=20=
(vector-register-p=20rd)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(sc-is=20rd=20complex-double-reg))=0A+=20=20=20=20=20=20=20=20=20=20=
(multiple-value-bind=20(q=20imm=20shift)=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20(ecase=20size=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20(:8b=20(values=200=20#b1=201))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20(:16b=20(values=201=20#b1=201))=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20(:4h=20(values=200=20#b10=202))=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20(:8h=20(values=201=20#b10=202))=0A+=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20(:2s=20(values=200=20#b100=203))=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:4s=20(values=201=20=
#b100=203))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:2d=20=
(values=201=20#b1000=204)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20(cond=20=
((register-p=20rn)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20(assert=20(null=20lane))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20(emit-simd-copy=20segment=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20q=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=200=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
imm=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=201=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(gpr-offset=20rn)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(fpr-offset=20rd)))=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(t=0A+=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(emit-simd-copy=20segment=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20q=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=200=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20(logior=20imm=20(ash=20(or=20lane=200)=20=
shift))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=200=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20(fpr-offset=20rn)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(fpr-offset=20=
rd))))))=0A+=20=20=20=20=20=20=20=20=20(t=0A+=20=20=20=20=20=20=20=20=20=20=
(assert=20(null=20size))=20;=20implicit=20from=20the=20dest=20width=0A+=20=
=20=20=20=20=20=20=20=20=20(multiple-value-bind=20(imm=20shift)=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20(cond=20((single-register-p=20rd)=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(values=20=
#b00100=203))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20((double-register-p=20rd)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20(values=20#b01000=204))=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20(t=20(error=20"Unsupported=20dup=20dest=20=
~a"=20rn)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
(emit-simd-dup-extract=20segment=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=201=20;=20=
q=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=200=20;=20op=0A+=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20(logior=20imm=20(ash=20(or=20lane=200)=20shift))=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=200=20;=20imm4=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(fpr-offset=20rn)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(fpr-offset=20=
rd)))))))=0A=20=0A=20(def-emitter=20simd-across-lanes=0A=20=20=20=20=20=
(#b0=201=2031)=0A@@=20-3898,6=20+4009,11=20@@=0A=20=20=20=20=20=20=20=20=
(setf=20constant=20(list=20:fixup=20(cdr=20first))))=0A=20=20=20=20=20=20=
=20(single-float=20(setf=20constant=20(list=20:single-float=20first)))=0A=
=20=20=20=20=20=20=20(double-float=20(setf=20constant=20(list=20=
:double-float=20first)))=0A+=20=20=20=20=20=20#+(and=20sb-simd-pack=20=
(not=20sb-xc-host))=0A+=20=20=20=20=20=20(simd-pack=0A+=20=20=20=20=20=20=
=20(setq=20constant=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20(list=20=
:oword=20(logior=20(%simd-pack-low=20first)=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(ash=20(%simd-pack-high=20first)=2064)))))=0A=20=20=20=20=20=20=20.=0A=20=
=20=20=20=20=20=20#+sb-xc-host=0A=20=20=20=20=20=20=20((complex=0Adiff=20=
--git=20a/src/compiler/arm64/parms.lisp=20=
b/src/compiler/arm64/parms.lisp=0Aindex=20e6f6dd4f9..3985550c6=20100644=0A=
---=20a/src/compiler/arm64/parms.lisp=0A+++=20=
b/src/compiler/arm64/parms.lisp=0A@@=20-129,3=20+129,21=20@@=0A=20;;;=20=
The=20number=20of=20bits=20per=20element=20in=20the=20assemblers=20code=20=
vector.=0A=20;;;=0A=20(defparameter=20*assembly-unit-length*=208)=0A+=0A=
+#+sb-simd-pack=0A+(progn=0A+=20=20(defconstant-eqx=20=
+simd-pack-element-types+=0A+=20=20=20=20=20=20(coerce=0A+=20=20=20=20=20=
=20=20(hash-cons=0A+=20=20=20=20=20=20=20=20'(single-float=20=
double-float=0A+=20=20=20=20=20=20=20=20=20=20(unsigned-byte=208)=20=
(unsigned-byte=2016)=20(unsigned-byte=2032)=20(unsigned-byte=2064)=0A+=20=
=20=20=20=20=20=20=20=20=20(signed-byte=208)=20(signed-byte=2016)=20=
(signed-byte=2032)=20(signed-byte=2064)))=0A+=20=20=20=20=20=20=20=
'vector)=0A+=20=20=20=20#'equalp)=0A+=20=20(defconstant=20=
sb-kernel::+simd-pack-wild+=0A+=20=20=20=20(ldb=20(byte=20(length=20=
+simd-pack-element-types+)=200)=20-1))=0A+=20=20(defconstant-eqx=20=
+simd-pack-128-primtypes+=0A+=20=20=20=20=20=20#(simd-pack-single=20=
simd-pack-double=0A+=20=20=20=20=20=20=20=20simd-pack-ub8=20=
simd-pack-ub16=20simd-pack-ub32=20simd-pack-ub64=0A+=20=20=20=20=20=20=20=
=20simd-pack-sb8=20simd-pack-sb16=20simd-pack-sb32=20simd-pack-sb64)=0A+=20=
=20=20=20#'equalp))=0Adiff=20--git=20a/src/compiler/arm64/simd-pack.lisp=20=
b/src/compiler/arm64/simd-pack.lisp=0Anew=20file=20mode=20100644=0Aindex=20=
000000000..438e006da=0A---=20/dev/null=0A+++=20=
b/src/compiler/arm64/simd-pack.lisp=0A@@=20-0,0=20+1,397=20@@=0A+;;;;=20=
NEON=20intrinsics=20support=20for=20arm64=0A+=0A+;;;;=20This=20software=20=
is=20part=20of=20the=20SBCL=20system.=20See=20the=20README=20file=20for=0A=
+;;;;=20more=20information.=0A+;;;;=0A+;;;;=20This=20software=20is=20=
derived=20from=20the=20CMU=20CL=20system,=20which=20was=0A+;;;;=20=
written=20at=20Carnegie=20Mellon=20University=20and=20released=20into=20=
the=0A+;;;;=20public=20domain.=20The=20software=20is=20in=20the=20public=20=
domain=20and=20is=0A+;;;;=20provided=20with=20absolutely=20no=20=
warranty.=20See=20the=20COPYING=20and=20CREDITS=0A+;;;;=20files=20for=20=
more=20information.=0A+=0A+(in-package=20"SB-VM")=0A+=0C=0A+(defun=20=
float-neon-p=20(tn)=0A+=20=20(sc-is=20tn=20single-neon-reg=20=
single-neon-stack=20single-neon-immediate=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20double-neon-reg=20double-neon-stack=20double-neon-immediate))=0A=
+(defun=20int-neon-p=20(tn)=0A+=20=20(sc-is=20tn=20int-neon-reg=20=
int-neon-stack=20int-neon-immediate))=0A+=0C=0A+#+sb-xc-host=0A+(progn=20=
;=20the=20host=20compiler=20will=20complain=20about=20absence=20of=20=
these=0A+=20=20(defun=20%simd-pack-low=20(x)=20(error=20"Called=20=
%SIMD-PACK-LOW=20~S"=20x))=0A+=20=20(defun=20%simd-pack-high=20(x)=20=
(error=20"Called=20%SIMD-PACK-HIGH=20~S"=20x)))=0A+=0A+(defun=20=
emit-movi-vector-imm=20(dst=20value)=0A+=20=20(aver=20(typep=20value=20=
'(unsigned-byte=2064)))=0A+=20=20;;=20We've=20got=20a=20few=20options=20=
here.=0A+=20=20;;=20movi=20can=20produce=201,=202,=20or=204=20byte=20=
constants=20with=20one=20of=20the=20values=0A+=20=20;;=20filled=20in=20=
with=20an=20imm8.=20The=20other=20option=20is=20an=208=20byte=20constant=0A=
+=20=20;;=20where=20each=20byte=20is=20populated=20from=20a=20single=20=
bit=20in=20the=20source=20imm8.=0A+=20=20(let=20((dwordp=20(=3D=20(ldb=20=
(byte=2032=200)=20value)=20(ldb=20(byte=2032=2032)=20value)))=0A+=20=20=20=
=20=20=20=20=20(wordp=20(=3D=20(ldb=20(byte=2016=200)=20value)=20(ldb=20=
(byte=2016=2016)=20value)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20(ldb=20(byte=2016=2032)=20value)=20(ldb=20(byte=2016=2048)=20=
value)))=0A+=20=20=20=20=20=20=20=20(bytep=20(=3D=20(ldb=20(byte=208=20=
0)=20value)=20(ldb=20(byte=208=208)=20value)=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20(ldb=20(byte=208=2016)=20value)=20(ldb=20=
(byte=208=2024)=20value)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20(ldb=20(byte=208=2032)=20value)=20(ldb=20(byte=208=2040)=20=
value)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(ldb=20=
(byte=208=2048)=20value)=20(ldb=20(byte=208=2056)=20value))))=0A+=20=20=20=
=20(cond=0A+=20=20=20=20=20=20((and=20dwordp=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20(or=20(zerop=20(dpb=200=20(byte=208=200)=20(ldb=20(byte=2032=20=
0)=20value)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(zerop=20=
(dpb=200=20(byte=208=208)=20(ldb=20(byte=2032=200)=20value)))=0A+=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20(zerop=20(dpb=200=20(byte=208=20=
16)=20(ldb=20(byte=2032=200)=20value)))=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20(zerop=20(dpb=200=20(byte=208=2024)=20(ldb=20(byte=20=
32=200)=20value)))))=0A+=20=20=20=20=20=20=20(inst=20movi=20dst=20value=20=
:4s))=0A+=20=20=20=20=20=20((and=20wordp=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20(or=20(zerop=20(dpb=200=20(byte=208=200)=20(ldb=20(byte=2016=200)=20=
value)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(zerop=20=
(dpb=200=20(byte=208=208)=20(ldb=20(byte=2016=200)=20value)))))=0A+=20=20=
=20=20=20=20=20(inst=20movi=20dst=20value=20:8h))=0A+=20=20=20=20=20=20=
(bytep=0A+=20=20=20=20=20=20=20(inst=20movi=20dst=20value=20:16b))=0A+=20=
=20=20=20=20=20((and=20(member=20(ldb=20(byte=208=200)=20value)=20'(0=20=
#xFF))=0A+=20=20=20=20=20=20=20=20=20=20=20=20(member=20(ldb=20(byte=208=20=
8)=20value)=20'(0=20#xFF))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
(member=20(ldb=20(byte=208=2016)=20value)=20'(0=20#xFF))=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20(member=20(ldb=20(byte=208=2024)=20value)=20'(0=20=
#xFF))=0A+=20=20=20=20=20=20=20=20=20=20=20=20(member=20(ldb=20(byte=208=20=
32)=20value)=20'(0=20#xFF))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
(member=20(ldb=20(byte=208=2040)=20value)=20'(0=20#xFF))=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20(member=20(ldb=20(byte=208=2048)=20value)=20'(0=20=
#xFF))=0A+=20=20=20=20=20=20=20=20=20=20=20=20(member=20(ldb=20(byte=208=20=
56)=20value)=20'(0=20#xFF)))=0A+=20=20=20=20=20=20=20(inst=20movi=20=
value=20:2d))=0A+=20=20=20=20=20=20;;=20Can't=20do=20movi,=20try=20via=20=
the=20scalar=20regs.=0A+=20=20=20=20=20=20(wordp=0A+=20=20=20=20=20=20=20=
(inst=20movz=20tmp-tn=20(ldb=20(byte=2016=200)=20value))=0A+=20=20=20=20=20=
=20=20(inst=20dup=20dst=20tmp-tn=20:8h))=0A+=20=20=20=20=20=20((and=20=
dwordp=0A+=20=20=20=20=20=20=20=20=20=20=20=20(zerop=20(ldb=20(byte=2016=20=
16)=20value)))=0A+=20=20=20=20=20=20=20(inst=20movz=20tmp-tn=20(ldb=20=
(byte=2016=200)=20value))=0A+=20=20=20=20=20=20=20(inst=20dup=20dst=20=
tmp-tn=20:4s))=0A+=20=20=20=20=20=20((and=20dwordp=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20(encode-logical-immediate=20(ldb=20(byte=2032=200)=20=
value)))=0A+=20=20=20=20=20=20=20(inst=20orr=20tmp-tn=20zr-tn=20(ldb=20=
(byte=2032=200)=20value))=0A+=20=20=20=20=20=20=20(inst=20dup=20dst=20=
tmp-tn=20:4s))=0A+=20=20=20=20=20=20(t=20nil))))=0A+=0A+(define-move-fun=20=
(load-neon-immediate=201)=20(vop=20x=20y)=0A+=20=20((int-neon-immediate=20=
single-neon-immediate=20double-neon-immediate)=0A+=20=20=20(int-neon-reg=20=
single-neon-reg=20double-neon-reg))=0A+=20=20(let*=20((x=20=20(tn-value=20=
x))=0A+=20=20=20=20=20=20=20=20=20(lo=20(%simd-pack-low=20x))=0A+=20=20=20=
=20=20=20=20=20=20(hi=20(%simd-pack-high=20x)))=0A+=20=20=20=20(or=20=
(and=20(=3D=20lo=20hi)=20(emit-movi-vector-imm=20y=20lo))=0A+=20=20=20=20=
=20=20=20=20(load-inline-constant=20y=20x))))=0A+=0A+(define-move-fun=20=
(load-int-neon=202)=20(vop=20x=20y)=0A+=20=20((int-neon-stack)=20=
(int-neon-reg))=0A+=20=20(loadw=20y=20(current-nfp-tn=20vop)=20=
(tn-offset=20x)))=0A+=0A+(define-move-fun=20(load-float-neon=202)=20(vop=20=
x=20y)=0A+=20=20((single-neon-stack=20double-neon-stack)=20=
(single-neon-reg=20double-neon-reg))=0A+=20=20(loadw=20y=20=
(current-nfp-tn=20vop)=20(tn-offset=20x)))=0A+=0A+(define-move-fun=20=
(store-int-neon=202)=20(vop=20x=20y)=0A+=20=20((int-neon-reg)=20=
(int-neon-stack))=0A+=20=20(storew=20x=20(current-nfp-tn=20vop)=20=
(tn-offset=20y)))=0A+=0A+(define-move-fun=20(store-float-neon=202)=20=
(vop=20x=20y)=0A+=20=20((double-neon-reg=20single-neon-reg)=20=
(double-neon-stack=20single-neon-stack))=0A+=20=20(storew=20x=20=
(current-nfp-tn=20vop)=20(tn-offset=20y)))=0A+=0A+(define-vop=20=
(neon-move)=0A+=20=20(:args=20(x=20:scs=20(single-neon-reg=20=
double-neon-reg=20int-neon-reg)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
:target=20y=0A+=20=20=20=20=20=20=20=20=20=20=20=20:load-if=20(not=20=
(location=3D=20x=20y))))=0A+=20=20(:results=20(y=20:scs=20=
(single-neon-reg=20double-neon-reg=20int-neon-reg)=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20:load-if=20(not=20(location=3D=20x=20y))))=0A+=20=
=20(:note=20"NEON=20move")=0A+=20=20(:generator=200=0A+=20=20=20=20=
(unless=20(location=3D=20y=20x)=0A+=20=20=20=20=20=20(inst=20mov=20y=20x=20=
:16b))))=0A+(define-move-vop=20neon-move=20:move=0A+=20=20(int-neon-reg=20=
single-neon-reg=20double-neon-reg)=0A+=20=20(int-neon-reg=20=
single-neon-reg=20double-neon-reg))=0A+=0A+=0A+(macrolet=20=
((define-move-from-neon=20(type=20tag=20&rest=20scs)=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20(let=20((name=20(symbolicate=20"MOVE-FROM-NEON/"=20=
type)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20`(progn=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(define-vop=20(,name)=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:args=20(x=20=
:scs=20,scs))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20(:results=20(y=20:scs=20(descriptor-reg)))=0A+=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20(:arg-types=20,type)=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:temporary=20(:scs=20=
(non-descriptor-reg)=20:offset=20lr-offset)=20lr)=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20(:temporary=20(:sc=20=
unsigned-reg)=20header)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20(:note=20"NEON=20to=20pointer=20coercion")=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:generator=2013=0A+=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(with-fixed-allocation=20(y=20lr=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20simd-pack-widetag=0A+=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20simd-pack-size)=0A+=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(inst=20=
mov=20header=20(fixnumize=20,tag))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20(storew=20header=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20y=20simd-pack-tag-slot=20other-pointer-lowtag)=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(storew=20x=20y=20=
simd-pack-lo-value-slot=20other-pointer-lowtag))))=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20(define-move-vop=20,name=20:move=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20,scs=20=
(descriptor-reg))))))=0A+=20=20;;=20see=20+simd-pack-element-types+=0A+=20=
=20(define-move-from-neon=20simd-pack-single=200=20single-neon-reg)=0A+=20=
=20(define-move-from-neon=20simd-pack-double=201=20double-neon-reg)=0A+=20=
=20(define-move-from-neon=20simd-pack-ub8=202=20int-neon-reg)=0A+=20=20=
(define-move-from-neon=20simd-pack-ub16=203=20int-neon-reg)=0A+=20=20=
(define-move-from-neon=20simd-pack-ub32=204=20int-neon-reg)=0A+=20=20=
(define-move-from-neon=20simd-pack-ub64=205=20int-neon-reg)=0A+=20=20=
(define-move-from-neon=20simd-pack-sb8=206=20int-neon-reg)=0A+=20=20=
(define-move-from-neon=20simd-pack-sb16=207=20int-neon-reg)=0A+=20=20=
(define-move-from-neon=20simd-pack-sb32=208=20int-neon-reg)=0A+=20=20=
(define-move-from-neon=20simd-pack-sb64=209=20int-neon-reg))=0A+=0A=
+(define-vop=20(move-to-neon)=0A+=20=20(:args=20(x=20:scs=20=
(descriptor-reg)))=0A+=20=20(:results=20(y=20:scs=20(int-neon-reg=20=
double-neon-reg=20single-neon-reg)))=0A+=20=20(:note=20"pointer=20to=20=
NEON=20coercion")=0A+=20=20(:generator=202=0A+=20=20=20=20(loadw=20y=20x=20=
simd-pack-lo-value-slot=20other-pointer-lowtag)))=0A+(define-move-vop=20=
move-to-neon=20:move=0A+=20=20(descriptor-reg)=0A+=20=20(int-neon-reg=20=
double-neon-reg=20single-neon-reg))=0A+=0A+(define-vop=20(move-neon-arg)=0A=
+=20=20(:args=20(x=20:scs=20(int-neon-reg=20double-neon-reg=20=
single-neon-reg)=20:target=20y)=0A+=20=20=20=20=20=20=20=20=20(fp=20:scs=20=
(any-reg)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20:load-if=20(not=20=
(sc-is=20y=20int-neon-reg=20double-neon-reg=20single-neon-reg))))=0A+=20=20=
(:results=20(y))=0A+=20=20(:note=20"NEON=20argument=20move")=0A+=20=20=
(:generator=204=0A+=20=20=20=20=20(sc-case=20y=0A+=20=20=20=20=20=20=20=
((int-neon-reg=20double-neon-reg=20single-neon-reg)=0A+=20=20=20=20=20=20=
=20=20(unless=20(location=3D=20y=20x)=0A+=20=20=20=20=20=20=20=20=20=20=
(inst=20mov=20y=20x=20:16b)))=0A+=20=20=20=20=20=20=20((int-neon-stack=20=
double-neon-stack=20single-neon-stack)=0A+=20=20=20=20=20=20=20=20=
(storew=20x=20fp=20(tn-offset=20y))))))=0A+(define-move-vop=20=
move-neon-arg=20:move-arg=0A+=20=20(int-neon-reg=20double-neon-reg=20=
single-neon-reg=20descriptor-reg)=0A+=20=20(int-neon-reg=20=
double-neon-reg=20single-neon-reg))=0A+=0A+(define-move-vop=20move-arg=20=
:move-arg=0A+=20=20(int-neon-reg=20double-neon-reg=20single-neon-reg)=0A=
+=20=20(descriptor-reg))=0A+=0A+=0C=0A+(define-vop=20(%simd-pack-low)=0A=
+=20=20(:translate=20%simd-pack-low)=0A+=20=20(:args=20(x=20:scs=20=
(int-neon-reg=20double-neon-reg=20single-neon-reg)))=0A+=20=20=
(:arg-types=20simd-pack)=0A+=20=20(:results=20(dst=20:scs=20=
(unsigned-reg)))=0A+=20=20(:result-types=20unsigned-num)=0A+=20=20=
(:policy=20:fast-safe)=0A+=20=20(:generator=203=0A+=20=20=20=20(inst=20=
umov=20dst=20x=200=20:d)))=0A+=0A+(define-vop=20(%simd-pack-high)=0A+=20=20=
(:translate=20%simd-pack-high)=0A+=20=20(:args=20(x=20:scs=20=
(int-neon-reg=20double-neon-reg=20single-neon-reg)))=0A+=20=20=
(:arg-types=20simd-pack)=0A+=20=20(:results=20(dst=20:scs=20=
(unsigned-reg)))=0A+=20=20(:result-types=20unsigned-num)=0A+=20=20=
(:policy=20:fast-safe)=0A+=20=20(:generator=203=0A+=20=20=20=20(inst=20=
umov=20dst=20x=201=20:d)))=0A+=0A+(define-vop=20(%make-simd-pack)=0A+=20=20=
(:translate=20%make-simd-pack)=0A+=20=20(:policy=20:fast-safe)=0A+=20=20=
(:args=20(tag=20:scs=20(any-reg))=0A+=20=20=20=20=20=20=20=20=20(lo=20=
:scs=20(unsigned-reg))=0A+=20=20=20=20=20=20=20=20=20(hi=20:scs=20=
(unsigned-reg)))=0A+=20=20(:arg-types=20tagged-num=20unsigned-num=20=
unsigned-num)=0A+=20=20(:temporary=20(:scs=20(non-descriptor-reg)=20=
:offset=20lr-offset)=20lr)=0A+=20=20(:results=20(dst=20:scs=20=
(descriptor-reg)=20:from=20:load))=0A+=20=20(:result-types=20t)=0A+=20=20=
(:generator=2013=0A+=20=20=20=20(with-fixed-allocation=20(dst=20lr=0A+=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20simd-pack-widetag=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
simd-pack-size)=0A+=20=20=20=20=20=20;;=20see=20=
+simd-pack-element-types+=0A+=20=20=20=20=20=20(storew=20tag=20dst=20=
simd-pack-tag-slot=20other-pointer-lowtag)=0A+=20=20=20=20=20=20(storew=20=
lo=20dst=20simd-pack-lo-value-slot=20other-pointer-lowtag)=0A+=20=20=20=20=
=20=20(storew=20hi=20dst=20simd-pack-hi-value-slot=20=
other-pointer-lowtag))))=0A+=0A+(define-vop=20(%make-simd-pack-ub64)=0A+=20=
=20(:translate=20%make-simd-pack-ub64)=0A+=20=20(:policy=20:fast-safe)=0A=
+=20=20(:args=20(lo=20:scs=20(unsigned-reg))=0A+=20=20=20=20=20=20=20=20=20=
(hi=20:scs=20(unsigned-reg)))=0A+=20=20(:arg-types=20unsigned-num=20=
unsigned-num)=0A+=20=20(:results=20(dst=20:scs=20(int-neon-reg)))=0A+=20=20=
(:result-types=20simd-pack-ub64)=0A+=20=20(:generator=205=0A+=20=20=20=20=
(inst=20ins=20dst=200=20lo=20nil=20:d)=0A+=20=20=20=20(inst=20ins=20dst=20=
1=20hi=20nil=20:d)))=0A+=0A+(defmacro=20simd-pack-dispatch=20(pack=20=
&body=20body)=0A+=20=20(check-type=20pack=20symbol)=0A+=20=20`(let=20=
((,pack=20,pack))=0A+=20=20=20=20=20(etypecase=20,pack=0A+=20=20=20=20=20=
=20=20,@(map=20'list=20(lambda=20(eltype)=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20`((simd-pack=20,eltype)=20,@body))=0A+=20=20=20=
=20=20=20=20=20=20=20+simd-pack-element-types+))))=0A+=0A+#-sb-xc-host=0A=
+(macrolet=20((unpack-unsigned=20(pack=20bits)=0A+=20=20=20=20=20=20=20=20=
=20=20=20=20=20`(simd-pack-dispatch=20,pack=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20(let=20((lo=20(%simd-pack-low=20,pack))=0A+=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(hi=20=
(%simd-pack-high=20,pack)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20(values=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20,@(loop=20for=20pos=20by=20bits=20below=2064=20collect=0A+=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
`(unpack-unsigned-1=20,bits=20,pos=20lo))=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20,@(loop=20for=20pos=20by=20bits=20below=2064=20=
collect=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20`(unpack-unsigned-1=20,bits=20,pos=20hi))))))=0A+=20=20=
=20=20=20=20=20=20=20=20=20(unpack-unsigned-1=20(bits=20position=20ub64)=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20`(ldb=20(byte=20,bits=20=
,position)=20,ub64)))=0A+=20=20(declaim=20(inline=20%simd-pack-ub8s))=0A=
+=20=20(defun=20%simd-pack-ub8s=20(pack)=0A+=20=20=20=20(declare=20(type=20=
simd-pack=20pack))=0A+=20=20=20=20(unpack-unsigned=20pack=208))=0A+=0A+=20=
=20(declaim=20(inline=20%simd-pack-ub16s))=0A+=20=20(defun=20=
%simd-pack-ub16s=20(pack)=0A+=20=20=20=20(declare=20(type=20simd-pack=20=
pack))=0A+=20=20=20=20(unpack-unsigned=20pack=2016))=0A+=0A+=20=20=
(declaim=20(inline=20%simd-pack-ub32s))=0A+=20=20(defun=20=
%simd-pack-ub32s=20(pack)=0A+=20=20=20=20(declare=20(type=20simd-pack=20=
pack))=0A+=20=20=20=20(unpack-unsigned=20pack=2032))=0A+=0A+=20=20=
(declaim=20(inline=20%simd-pack-ub64s))=0A+=20=20(defun=20=
%simd-pack-ub64s=20(pack)=0A+=20=20=20=20(declare=20(type=20simd-pack=20=
pack))=0A+=20=20=20=20(unpack-unsigned=20pack=2064)))=0A+=0A=
+#-sb-xc-host=0A+(macrolet=20((unpack-signed=20(pack=20bits)=0A+=20=20=20=
=20=20=20=20=20=20=20=20=20=20`(simd-pack-dispatch=20,pack=0A+=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20(let=20((lo=20(%simd-pack-low=20=
,pack))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20(hi=20(%simd-pack-high=20,pack)))=0A+=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20(values=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20,@(loop=20for=20pos=20by=20bits=20below=2064=20collect=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20`(unpack-signed-1=20,bits=20,pos=20lo))=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20,@(loop=20for=20pos=20by=20bits=20=
below=2064=20collect=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20`(unpack-signed-1=20,bits=20,pos=20=
hi))))))=0A+=20=20=20=20=20=20=20=20=20=20=20(unpack-signed-1=20(bits=20=
position=20ub64)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20`(-=20(mod=20=
(+=20(ldb=20(byte=20,bits=20,position)=20,ub64)=0A+=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20,(expt=202=20(1-=20=
bits)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20,(expt=202=20bits))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20,(expt=202=20(1-=20bits)))))=0A+=20=20(declaim=20(inline=20=
%simd-pack-sb8s))=0A+=20=20(defun=20%simd-pack-sb8s=20(pack)=0A+=20=20=20=
=20(declare=20(type=20simd-pack=20pack))=0A+=20=20=20=20(unpack-signed=20=
pack=208))=0A+=0A+=20=20(declaim=20(inline=20%simd-pack-sb16s))=0A+=20=20=
(defun=20%simd-pack-sb16s=20(pack)=0A+=20=20=20=20(declare=20(type=20=
simd-pack=20pack))=0A+=20=20=20=20(unpack-signed=20pack=2016))=0A+=0A+=20=
=20(declaim=20(inline=20%simd-pack-sb32s))=0A+=20=20(defun=20=
%simd-pack-sb32s=20(pack)=0A+=20=20=20=20(declare=20(type=20simd-pack=20=
pack))=0A+=20=20=20=20(unpack-signed=20pack=2032))=0A+=0A+=20=20(declaim=20=
(inline=20%simd-pack-sb64s))=0A+=20=20(defun=20%simd-pack-sb64s=20(pack)=0A=
+=20=20=20=20(declare=20(type=20simd-pack=20pack))=0A+=20=20=20=20=
(unpack-signed=20pack=2064)))=0A+=0A+#-sb-xc-host=0A+(progn=0A+=20=20=
(declaim=20(inline=20%make-simd-pack-ub32))=0A+=20=20(defun=20=
%make-simd-pack-ub32=20(w=20x=20y=20z)=0A+=20=20=20=20(declare=20(type=20=
(unsigned-byte=2032)=20w=20x=20y=20z))=0A+=20=20=20=20(%make-simd-pack=0A=
+=20=20=20=20=20#.(position=20'(unsigned-byte=2032)=20=
+simd-pack-element-types+=20:test=20#'equal)=0A+=20=20=20=20=20(logior=20=
w=20(ash=20x=2032))=0A+=20=20=20=20=20(logior=20y=20(ash=20z=2032)))))=0A=
+=0A+(define-vop=20(%make-simd-pack-double)=0A+=20=20(:translate=20=
%make-simd-pack-double)=0A+=20=20(:policy=20:fast-safe)=0A+=20=20(:args=20=
(lo=20:scs=20(double-reg))=0A+=20=20=20=20=20=20=20=20=20(hi=20:scs=20=
(double-reg)))=0A+=20=20(:arg-types=20double-float=20double-float)=0A+=20=
=20(:results=20(dst=20:scs=20(double-neon-reg)))=0A+=20=20(:result-types=20=
simd-pack-double)=0A+=20=20(:generator=205=0A+=20=20=20=20(inst=20ins=20=
dst=200=20lo=200=20:d)=0A+=20=20=20=20(inst=20ins=20dst=201=20hi=200=20=
:d)))=0A+=0A+(define-vop=20(%make-simd-pack-single)=0A+=20=20(:translate=20=
%make-simd-pack-single)=0A+=20=20(:policy=20:fast-safe)=0A+=20=20(:args=20=
(x=20:scs=20(single-reg))=0A+=20=20=20=20=20=20=20=20=20(y=20:scs=20=
(single-reg))=0A+=20=20=20=20=20=20=20=20=20(z=20:scs=20(single-reg))=0A=
+=20=20=20=20=20=20=20=20=20(w=20:scs=20(single-reg)))=0A+=20=20=
(:arg-types=20single-float=20single-float=20single-float=20single-float)=0A=
+=20=20(:results=20(dst=20:scs=20(single-neon-reg)))=0A+=20=20=
(:result-types=20simd-pack-single)=0A+=20=20(:generator=205=0A+=20=20=20=20=
(inst=20ins=20dst=200=20x=200=20:s)=0A+=20=20=20=20(inst=20ins=20dst=201=20=
y=200=20:s)=0A+=20=20=20=20(inst=20ins=20dst=202=20z=200=20:s)=0A+=20=20=20=
=20(inst=20ins=20dst=203=20w=200=20:s)))=0A+=0A+(defknown=20=
%simd-pack-single-item=0A+=20=20(simd-pack=20(integer=200=203))=20=
single-float=20(flushable))=0A+=0A+(define-vop=20=
(%simd-pack-single-item)=0A+=20=20(:args=20(x=20:scs=20(int-neon-reg=20=
double-neon-reg=20single-neon-reg)))=0A+=20=20(:translate=20=
%simd-pack-single-item)=0A+=20=20(:arg-types=20simd-pack=20(:constant=20=
t))=0A+=20=20(:info=20index)=0A+=20=20(:results=20(dst=20:scs=20=
(single-reg)))=0A+=20=20(:result-types=20single-float)=0A+=20=20=
(:temporary=20(:sc=20double-neon-reg=20:from=20(:argument=200))=20tmp)=0A=
+=20=20(:policy=20:fast-safe)=0A+=20=20(:generator=203=0A+=20=20=20=20=
(unless=20(location=3D=20x=20tmp)=0A+=20=20=20=20=20=20(inst=20mov=20tmp=20=
x=20:16b))=0A+=20=20=20=20(inst=20movi=20dst=200=20:4s)=0A+=20=20=20=20=
(inst=20ins=20dst=200=20tmp=20index=20:s)))=0A+=0A+#-sb-xc-host=0A=
+(progn=0A+(declaim=20(inline=20%simd-pack-singles))=0A+(defun=20=
%simd-pack-singles=20(pack)=0A+=20=20(declare=20(type=20simd-pack=20=
pack))=0A+=20=20(simd-pack-dispatch=20pack=0A+=20=20=20=20(values=20=
(%simd-pack-single-item=20pack=200)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
(%simd-pack-single-item=20pack=201)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
(%simd-pack-single-item=20pack=202)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
(%simd-pack-single-item=20pack=203)))))=0A+=0A+(defknown=20=
%simd-pack-double-item=0A+=20=20(simd-pack=20(integer=200=201))=20=
double-float=20(flushable))=0A+=0A+(define-vop=20=
(%simd-pack-double-item)=0A+=20=20(:translate=20%simd-pack-double-item)=0A=
+=20=20(:args=20(x=20:scs=20(int-neon-reg=20double-neon-reg=20=
single-neon-reg)=0A+=20=20=20=20=20=20=20=20=20=20=20=20:target=20tmp))=0A=
+=20=20(:info=20index)=0A+=20=20(:arg-types=20simd-pack=20(:constant=20=
t))=0A+=20=20(:results=20(dst=20:scs=20(double-reg)))=0A+=20=20=
(:result-types=20double-float)=0A+=20=20(:temporary=20(:sc=20=
double-neon-reg=20:from=20(:argument=200))=20tmp)=0A+=20=20(:policy=20=
:fast-safe)=0A+=20=20(:generator=203=0A+=20=20=20=20(unless=20(location=3D=
=20x=20tmp)=0A+=20=20=20=20=20=20(inst=20mov=20tmp=20x=20:16b))=0A+=20=20=
=20=20(inst=20movi=20dst=200=20:2d)=0A+=20=20=20=20(inst=20ins=20dst=200=20=
tmp=20index=20:d)))=0A+=0A+#-sb-xc-host=0A+(progn=0A+(declaim=20(inline=20=
%simd-pack-doubles))=0A+(defun=20%simd-pack-doubles=20(pack)=0A+=20=20=
(declare=20(type=20simd-pack=20pack))=0A+=20=20(simd-pack-dispatch=20=
pack=0A+=20=20=20=20(values=20(%simd-pack-double-item=20pack=200)=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20(%simd-pack-double-item=20pack=201)))))=0A=
diff=20--git=20a/src/compiler/arm64/target-insts.lisp=20=
b/src/compiler/arm64/target-insts.lisp=0Aindex=205d95fe847..0f0bbb7b4=20=
100644=0A---=20a/src/compiler/arm64/target-insts.lisp=0A+++=20=
b/src/compiler/arm64/target-insts.lisp=0A@@=20-467,26=20+467,29=20@@=0A=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20(#b10=20"D"))=0A=20=20=20=20=20=
=20=20=20=20=20=20=20=20offset)))=0A=20=0A+(defun=20=
q-and-size-to-element-width=20(q=20size)=0A+=20=20(cond=20((and=20(=3D=20=
size=200)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20(=3D=20q=200))=0A=
+=20=20=20=20=20=20=20=20=20"8B")=0A+=20=20=20=20=20=20=20=20((and=20(=3D=20=
size=200)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20(=3D=20q=201))=0A=
+=20=20=20=20=20=20=20=20=20"16B")=0A+=20=20=20=20=20=20=20=20((and=20(=3D=
=20size=201)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20(=3D=20q=200))=0A=
+=20=20=20=20=20=20=20=20=20"4H")=0A+=20=20=20=20=20=20=20=20((and=20(=3D=20=
size=201)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20(=3D=20q=201))=0A=
+=20=20=20=20=20=20=20=20=20"8H")=0A+=20=20=20=20=20=20=20=20((and=20(=3D=20=
size=202)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20(=3D=20q=201))=0A=
+=20=20=20=20=20=20=20=20=20"4S")))=0A+=0A=20(defun=20print-vx.t=20=
(value=20stream=20dstate)=0A=20=20=20(declare=20(ignore=20dstate))=0A=20=20=
=20(destructuring-bind=20(q=20size=20offset)=20value=0A=20=20=20=20=20=
(format=20stream=20"V~d.~a"=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=
offset=0A-=20=20=20=20=20=20=20=20=20=20=20=20(cond=20((and=20(=3D=20=
size=200)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20(=3D=20q=200))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20"8B")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
((and=20(=3D=20size=200)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20(=3D=20q=201))=0A-=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20"16B")=0A-=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20((and=20(=3D=20size=201)=0A-=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(=3D=20q=200))=0A-=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"4H")=0A-=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20((and=20(=3D=20size=201)=0A-=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(=3D=20q=20=
1))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"8H")=0A=
-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20((and=20(=3D=20=
size=202)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20(=3D=20q=201))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20"4S")))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
(q-and-size-to-element-width=20q=20size))))=0A=20=0A=20(defun=20=
lowest-set-bit-index=20(integer-value)=0A=20=20=20(max=200=20(1-=20=
(integer-length=20(logand=20integer-value=20(-=20integer-value))))))=0A=
@@=20-501,24=20+504,20=20@@=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20(ash=20imm4=20(-=20index))=0A=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20(ash=20imm5=20(-=20(1+=20index))))))))=0A=20=0A+(defun=20=
print-simd-dup-float-reg=20(value=20stream=20dstate)=0A+=20=20(declare=20=
(ignore=20dstate))=0A+=20=20(destructuring-bind=20(offset=20imm5)=20=
value=0A+=20=20=20=20(let=20((index=20(lowest-set-bit-index=20imm5)))=0A=
+=20=20=20=20=20=20(format=20stream=20"~a~d"=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20(char=20"BHSD"=20index)=0A+=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20offset))))=0A+=0A=20(defun=20print-simd-dup-reg=20(value=20=
stream=20dstate)=0A=20=20=20(declare=20(ignore=20dstate))=0A=20=20=20=
(destructuring-bind=20(offset=20q=20imm5)=20value=0A-=20=20=20=20(format=20=
stream=20"V~d.~a"=20offset=0A-=20=20=20=20=20=20=20=20=20=20=20=20(cond=20=
((=3D=20imm5=20#b1)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20(if=20(zerop=20q)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20"8B"=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20"16B"))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20((=3D=20imm5=20#b10)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20(if=20(zerop=20q)=0A-=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20"4H"=0A-=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20"8H"))=0A-=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20((=3D=20imm5=20#b100)=0A-=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20(zerop=20q)=0A-=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"2S"=0A-=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"4S"))=0A-=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20((=3D=20imm5=20#b1000)=0A=
-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20"2D")))))=0A+=20=
=20=20=20(let=20((size=20(lowest-set-bit-index=20imm5)))=0A+=20=20=20=20=20=
=20(format=20stream=20"V~d.~a"=20offset=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20(q-and-size-to-element-width=20q=20size)))))=0A=20=0A=20=
(defun=20print-simd-float-reg=20(value=20stream=20dstate)=0A=20=20=20=
(declare=20(ignore=20dstate))=0Adiff=20--git=20=
a/src/compiler/arm64/vm.lisp=20b/src/compiler/arm64/vm.lisp=0Aindex=20=
e2a34498a..827bb10b5=20100644=0A---=20a/src/compiler/arm64/vm.lisp=0A+++=20=
b/src/compiler/arm64/vm.lisp=0A@@=20-107,6=20+107,9=20@@=0A=20=20=20=
(constant=20constant)=0A=20=0A=20=20=20;;=20Anything=20else=20that=20can=20=
be=20an=20immediate.=0A+=20=20#+sb-simd-pack=20(int-neon-immediate=20=
immediate-constant)=0A+=20=20#+sb-simd-pack=20(double-neon-immediate=20=
immediate-constant)=0A+=20=20#+sb-simd-pack=20(single-neon-immediate=20=
immediate-constant)=0A=20=20=20(immediate=20immediate-constant)=0A=20=0A=20=
=20=20;;=20****=20The=20stacks.=0A@@=20-147,6=20+150,12=20@@=0A=20=20=20=
(double-stack=20non-descriptor-stack)=20;=20double=20floats.=0A=20=20=20=
(complex-single-stack=20non-descriptor-stack)=0A=20=20=20=
(complex-double-stack=20non-descriptor-stack=20:element-size=202=20=
:alignment=202)=0A+=20=20#+sb-simd-pack=0A+=20=20(int-neon-stack=20=
non-descriptor-stack=20:element-size=202)=0A+=20=20#+sb-simd-pack=0A+=20=20=
(double-neon-stack=20non-descriptor-stack=20:element-size=202)=0A+=20=20=
#+sb-simd-pack=0A+=20=20(single-neon-stack=20non-descriptor-stack=20=
:element-size=202)=0A=20=0A=20=20=20;;=20****=20Things=20that=20can=20go=20=
in=20the=20integer=20registers.=0A=20=0A@@=20-211,6=20+220,30=20@@=0A=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20:save-p=20=
t=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
:alternate-scs=20(complex-double-stack))=0A=20=0A+=20=20;;=20temporary=20=
only=0A+=20=20#+sb-simd-pack=0A+=20=20(neon-reg=20float-registers=0A+=20=20=
=20=20=20=20=20=20=20=20=20:locations=20#.*float-regs*)=0A+=20=20;;=20=
regular=20values=0A+=20=20#+sb-simd-pack=0A+=20=20(int-neon-reg=20=
float-registers=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
:locations=20#.*float-regs*=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20:constant-scs=20(int-neon-immediate)=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20:save-p=20t=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20:alternate-scs=20(int-neon-stack))=0A+=20=20#+sb-simd-pack=0A+=20=
=20(double-neon-reg=20float-registers=0A+=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20:locations=20#.*float-regs*=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20:constant-scs=20=
(double-neon-immediate)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20:save-p=20t=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20:alternate-scs=20(double-neon-stack))=0A+=20=20#+sb-simd-pack=0A+=20=
=20(single-neon-reg=20float-registers=0A+=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20:locations=20#.*float-regs*=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20:constant-scs=20=
(single-neon-immediate)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20:save-p=20t=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20:alternate-scs=20(single-neon-stack))=0A+=0A=20=20=20(catch-block=20=
control-stack=20:element-size=20catch-block-size)=0A=20=20=20=
(unwind-block=20control-stack=20:element-size=20unwind-block-size)=0A=20=20=
=20(zero=20immediate-constant))=0A@@=20-264,7=20+297,13=20@@=0A=20=20=20=20=
=20=20complex-single-immediate-sc-number)=0A=20=20=20=20=20=
(structure-object=0A=20=20=20=20=20=20(when=20(eq=20value=20=
sb-lockless:+tail+)=0A-=20=20=20=20=20=20=20immediate-sc-number))))=0A+=20=
=20=20=20=20=20=20immediate-sc-number))=0A+=20=20=20=20#+(and=20=
sb-simd-pack=20(not=20sb-xc-host))=0A+=20=20=20=20(simd-pack=0A+=20=20=20=
=20=20(typecase=20value=0A+=20=20=20=20=20=20=20((simd-pack=20=
double-float)=20double-neon-immediate-sc-number)=0A+=20=20=20=20=20=20=20=
((simd-pack=20single-float)=20single-neon-immediate-sc-number)=0A+=20=20=20=
=20=20=20=20(t=20int-neon-immediate-sc-number)))))=0A=20=0A=20(defun=20=
boxed-immediate-sc-p=20(sc)=0A=20=20=20(eql=20sc=20immediate-sc-number))=0A=
@@=20-307,7=20+346,12=20@@=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20(sc-case=20tn=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(single-reg=20"S")=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
((double-reg=20complex-single-reg)=20"D")=0A-=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20(complex-double-reg=20"Q"))=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20((#+sb-simd-pack=20neon-reg=0A+=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#+sb-simd-pack=20=
int-neon-reg=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
#+sb-simd-pack=20double-neon-reg=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20#+sb-simd-pack=20single-neon-reg=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20complex-double-reg)=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20"V"))=0A=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20offset)))))=0A=20=0A=20(defun=20=
primitive-type-indirect-cell-type=20(ptype)=0Adiff=20--git=20=
a/src/compiler/generic/primtype.lisp=20=
b/src/compiler/generic/primtype.lisp=0Aindex=20f15e16b9b..77dc53f59=20=
100644=0A---=20a/src/compiler/generic/primtype.lisp=0A+++=20=
b/src/compiler/generic/primtype.lisp=0A@@=20-93,7=20+93,7=20@@=0A=20=
(/show0=20"about=20to=20!DEF-PRIMITIVE-TYPE=20COMPLEX-DOUBLE-FLOAT")=0A=20=
(!def-primitive-type=20complex-double-float=20(complex-double-reg=20=
descriptor-reg)=0A=20=20=20:type=20(complex=20double-float))=0A=
-#+sb-simd-pack=0A+#+(and=20sb-simd-pack=20x86-64)=0A=20(progn=0A=20=20=20=
(/show0=20"about=20to=20!DEF-PRIMITIVE-TYPE=20SIMD-PACK")=0A=20=20=20=
(!def-primitive-type=20simd-pack-single=20(single-sse-reg=20=
descriptor-reg)=0A@@=20-127,6=20+127,40=20@@=0A=20=20=20=20=20=20=20=20=20=
=20simd-pack-sb16=0A=20=20=20=20=20=20=20=20=20=20simd-pack-sb32=0A=20=20=
=20=20=20=20=20=20=20=20simd-pack-sb64)))=0A+#+(and=20sb-simd-pack=20=
arm64)=0A+(progn=0A+=20=20(/show0=20"about=20to=20!DEF-PRIMITIVE-TYPE=20=
SIMD-PACK")=0A+=20=20(!def-primitive-type=20simd-pack-single=20=
(single-neon-reg=20descriptor-reg)=0A+=20=20=20=20:type=20(simd-pack=20=
single-float))=0A+=20=20(!def-primitive-type=20simd-pack-double=20=
(double-neon-reg=20descriptor-reg)=0A+=20=20=20=20:type=20(simd-pack=20=
double-float))=0A+=20=20(!def-primitive-type=20simd-pack-ub8=20=
(int-neon-reg=20descriptor-reg)=0A+=20=20=20=20:type=20(simd-pack=20=
(unsigned-byte=208)))=0A+=20=20(!def-primitive-type=20simd-pack-ub16=20=
(int-neon-reg=20descriptor-reg)=0A+=20=20=20=20:type=20(simd-pack=20=
(unsigned-byte=2016)))=0A+=20=20(!def-primitive-type=20simd-pack-ub32=20=
(int-neon-reg=20descriptor-reg)=0A+=20=20=20=20:type=20(simd-pack=20=
(unsigned-byte=2032)))=0A+=20=20(!def-primitive-type=20simd-pack-ub64=20=
(int-neon-reg=20descriptor-reg)=0A+=20=20=20=20:type=20(simd-pack=20=
(unsigned-byte=2064)))=0A+=20=20(!def-primitive-type=20simd-pack-sb8=20=
(int-neon-reg=20descriptor-reg)=0A+=20=20=20=20:type=20(simd-pack=20=
(signed-byte=208)))=0A+=20=20(!def-primitive-type=20simd-pack-sb16=20=
(int-neon-reg=20descriptor-reg)=0A+=20=20=20=20:type=20(simd-pack=20=
(signed-byte=2016)))=0A+=20=20(!def-primitive-type=20simd-pack-sb32=20=
(int-neon-reg=20descriptor-reg)=0A+=20=20=20=20:type=20(simd-pack=20=
(signed-byte=2032)))=0A+=20=20(!def-primitive-type=20simd-pack-sb64=20=
(int-neon-reg=20descriptor-reg)=0A+=20=20=20=20:type=20(simd-pack=20=
(signed-byte=2064)))=0A+=20=20(!def-primitive-type-alias=20simd-pack=0A+=20=
=20=20'(:or=20simd-pack-single=0A+=20=20=20=20=20=20=20=20=20=
simd-pack-double=0A+=20=20=20=20=20=20=20=20=20simd-pack-ub8=0A+=20=20=20=
=20=20=20=20=20=20simd-pack-ub16=0A+=20=20=20=20=20=20=20=20=20=
simd-pack-ub32=0A+=20=20=20=20=20=20=20=20=20simd-pack-ub64=0A+=20=20=20=20=
=20=20=20=20=20simd-pack-sb8=0A+=20=20=20=20=20=20=20=20=20=
simd-pack-sb16=0A+=20=20=20=20=20=20=20=20=20simd-pack-sb32=0A+=20=20=20=20=
=20=20=20=20=20simd-pack-sb64)))=0A=20#+sb-simd-pack-256=0A=20(progn=0A=20=
=20=20(!def-primitive-type=20simd-pack-256-single=20(single-avx2-reg=20=
descriptor-reg)=0A--=20=0A2.50.1=20(Apple=20Git-155)=0A=0A=

--Apple-Mail=_03B53131-1088-4A20-8204-C6AF066A7E81
Content-Disposition: attachment;
	filename=0003-arm64-More-simd-instructions.patch
Content-Type: application/octet-stream;
	x-unix-mode=0644;
	name="0003-arm64-More-simd-instructions.patch"
Content-Transfer-Encoding: quoted-printable

=46rom=207926a9a47f30ec57059356e4790e7530f7e8d9c8=20Mon=20Sep=2017=20=
00:00:00=202001=0AFrom:=20Sylvia=20Harrington=20=
<[email protected]>=0ADate:=20Sun,=2028=20Jun=202026=20=
10:22:44=20+0100=0ASubject:=20[PATCH=203/4]=20arm64:=20More=20simd=20=
instructions=0A=0A---=0A=20src/compiler/arm64/insts.lisp=20=20=20=20=20=20=
=20=20|=20365=20++++++++++++++++++++++-----=0A=20=
src/compiler/arm64/target-insts.lisp=20|=20=20=205=20+=0A=202=20files=20=
changed,=20312=20insertions(+),=2058=20deletions(-)=0A=0Adiff=20--git=20=
a/src/compiler/arm64/insts.lisp=20b/src/compiler/arm64/insts.lisp=0A=
index=20e9981a82e..168b80174=20100644=0A---=20=
a/src/compiler/arm64/insts.lisp=0A+++=20b/src/compiler/arm64/insts.lisp=0A=
@@=20-118,6=20+118,7=20@@=0A=20=20=20(define-arg-type=20simd-copy-reg=20=
:printer=20#'print-simd-copy-reg)=0A=20=20=20(define-arg-type=20=
simd-dup-reg=20:printer=20#'print-simd-dup-reg)=0A=20=20=20=
(define-arg-type=20simd-float-reg=20:printer=20#'print-simd-float-reg)=0A=
+=20=20(define-arg-type=20simd-float-pair-reg=20:printer=20=
#'print-simd-float-pair-reg)=0A=20=20=20(define-arg-type=20=
simd-dup-float-reg=20:printer=20#'print-simd-dup-float-reg)=0A=20=0A=20=20=
=20(define-arg-type=20simd-immh-reg=20:printer=20#'print-simd-immh-reg)=0A=
@@=20-1283,7=20+1284,6=20@@=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(gpr-offset=20rd)))))=0A=20=
=0A=20(def-data-processing-1=20rbit=20#b000)=0A-(def-data-processing-1=20=
rev16=20#b001)=0A=20(def-data-processing-1=20clz=20#b100)=0A=20=
(def-data-processing-1=20cls=20#b101)=0A=20=0A@@=20-1413,8=20+1413,29=20=
@@=0A=20(def-data-processing-3=20smsubl=20#b001=201)=0A=20=
(def-data-processing-3=20umsubl=20#b101=201)=0A=20=0A=
-(define-instruction-macro=20mul=20(rd=20rn=20rm)=0A-=20=20`(inst=20madd=20=
,rd=20,rn=20,rm=20zr-tn))=0A+(define-instruction=20mul=20(segment=20rd=20=
rn=20rm=20&optional=20vector-size)=0A+=20=20(:printer=20=
simd-three-same-sized=20((u=20#b0)=20(op=20#b10011)))=0A+=20=20(:emitter=0A=
+=20=20=20(if=20vector-size=0A+=20=20=20=20=20=20=20(multiple-value-bind=20=
(q=20size)=0A+=20=20=20=20=20=20=20=20=20=20=20(encode-vector-size=20=
vector-size)=0A+=20=20=20=20=20=20=20=20=20(emit-simd-three-same=20=
segment=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20q=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20#b0=0A+=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20size=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20(fpr-offset=20rm)=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
#b10011=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20(fpr-offset=20rn)=0A+=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(fpr-offset=20rd)))=0A+=20=20=20=20=20=20=20;;=20madd=0A+=20=20=20=20=20=20=
=20(emit-data-processing-3=20segment=0A+=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(reg-size=20=
rd)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20#b000=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(gpr-offset=20rm)=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=200=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(gpr-offset=20zr-tn)=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20(gpr-offset=20rn)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(gpr-offset=20rd)))))=0A=
=20=0A=20(define-instruction=20smulh=20(segment=20rd=20rn=20rm)=0A=20=20=20=
(:printer=20data-processing-3=20((op31=20#b010)=20(o0=200)=20(ra=2031))=0A=
@@=20-2618,7=20+2639,8=20@@=0A=20=20=20#b0=20#b1=20#b11111)=0A=20=
(def-fp-data-processing-1+simd=20fneg=20#b0010=0A=20=20=20#b1=20#b1=20=
#b11111)=0A-(def-fp-data-processing-1=20fsqrt=20#b0011)=0A=
+(def-fp-data-processing-1+simd=20fsqrt=20#b0011=0A+=20=20#b1=20#b0=20=
#b11111)=0A=20(def-fp-data-processing-1=20frintn=20#b1000)=0A=20=
(def-fp-data-processing-1=20frintp=20#b1001)=0A=20=
(def-fp-data-processing-1=20frintm=20#b1010)=0A@@=20-2692,10=20+2714,14=20=
@@=0A=20=20=20#b0=20#b0=20#b11010)=0A=20(def-fp-data-processing-2+simd=20=
fsub=20#b0011=0A=20=20=20#b0=20#b1=20#b11010)=0A=
-(def-fp-data-processing-2=20fmax=20#b0100)=0A-(def-fp-data-processing-2=20=
fmin=20#b0101)=0A-(def-fp-data-processing-2=20fmaxnm=20#b0110)=0A=
-(def-fp-data-processing-2=20fminnm=20#b0111)=0A=
+(def-fp-data-processing-2+simd=20fmax=20#b0100=0A+=20=20#b0=20#b0=20=
#b11110)=0A+(def-fp-data-processing-2+simd=20fmin=20#b0101=0A+=20=20#b0=20=
#b1=20#b11110)=0A+(def-fp-data-processing-2+simd=20fmaxnm=20#b0110=0A+=20=
=20#b0=20#b0=20#b11000)=0A+(def-fp-data-processing-2+simd=20fminnm=20=
#b0111=0A+=20=20#b0=20#b1=20#b11000)=0A=20(def-fp-data-processing-2=20=
fnmul=20#b1000)=0A=20=0A=20(defmacro=20def-fp-data-processing-3=20(name=20=
o1=20o2)=0A@@=20-2755,10=20+2781,51=20@@=0A=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(reg-offset=20rn)=0A=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(reg-offset=20rd)))))=0A=20=0A-(def-fp-conversion=20fcvtns=20#b00000)=0A=
-(def-fp-conversion=20fcvtnu=20#b00001)=0A-(def-fp-conversion=20scvtf=20=
#b00010=20t)=0A-(def-fp-conversion=20ucvtf=20#b00011=20t)=0A+(defmacro=20=
def-fp-conversion+simd=20(name=20op=20&optional=20from-int=20simd-u=20=
simd-op)=0A+=20=20`(define-instruction=20,name=20(segment=20rd=20rn=20=
&optional=20vector-size)=0A+=20=20=20=20=20(:printer=20fp-conversion=20=
((op=20,op)=20(,(if=20from-int=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20'rn=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20'rd)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20nil=20:type=20'reg)))=0A+=20=20=20=20=20(:printer=20=
simd-two-misc=20((u=20,simd-u)=20(op=20,simd-op)))=0A+=20=20=20=20=20=
(:emitter=0A+=20=20=20=20=20=20(if=20vector-size=0A+=20=20=20=20=20=20=20=
=20=20=20(multiple-value-bind=20(q=20size)=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20(encode-vector-float-size=20vector-size)=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20(emit-simd-two-misc=20segment=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
q=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20,simd-u=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20size=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20,simd-op=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(fpr-offset=20rn)=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20(fpr-offset=20rd)))=0A+=20=20=20=20=20=20=20=20=20=20=
(progn=0A+=20=20=20=20=20=20=20=20=20=20=20=20,@(if=20from-int=0A+=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20`((assert=20(fp-register-p=20=
rd)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20(rd)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20"Destination=20~d=20should=20be=20an=20=
FP=20register."=20rd)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20(assert=20(register-p=20rn)=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(rn)=0A+=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
"Source=20~d=20should=20be=20an=20integer=20register."=20rn))=0A+=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20`((assert=20(register-p=20=
rd)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20(rd)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20"Destination=20~d=20should=20be=20an=20=
integer=20register."=20rn)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20(assert=20(fp-register-p=20rn)=0A+=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(rn)=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20"Source=20~d=20should=20be=20an=20FP=20register."=20rn)))=0A+=20=20=20=
=20=20=20=20=20=20=20=20=20(emit-fp-conversion=20segment=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20+64-bit-size+=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(fp-reg-type=20,(if=20=
from-int=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20'rd=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20'rn))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20,op=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20(reg-offset=20rn)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(reg-offset=20rd)))))))=0A=
+=0A+(def-fp-conversion+simd=20fcvtns=20#b00000=20nil=20#b0=20#b11100)=0A=
+(def-fp-conversion+simd=20fcvtnu=20#b00001=20nil=20#b1=20#b11100)=0A=
+(def-fp-conversion+simd=20scvtf=20#b00010=20t=20#b0=20#b11101)=0A=
+(def-fp-conversion+simd=20ucvtf=20#b00011=20t=20#b1=20#b11101)=0A=20=
(def-fp-conversion=20fcvtas=20#b00100)=0A=20(def-fp-conversion=20fcvtau=20=
#b00101)=0A=20(def-fp-conversion=20fcvtps=20#b01000)=0A@@=20-3002,6=20=
+3069,20=20@@=0A=20=20=20(rn=205=205)=0A=20=20=20(rd=205=200))=0A=20=0A=
+(define-instruction-format=20(simd-three-diff=2032=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
:default-printer=20'(:name=20:tab=20rd=20",=20"=20rn=20",=20"=20rm))=0A+=20=
=20(op3=20:field=20(byte=201=2031)=20:value=20#b0)=0A+=20=20(q=20:field=20=
(byte=201=2030))=0A+=20=20(u=20:field=20(byte=201=2029))=0A+=20=20(op4=20=
:field=20(byte=205=2024)=20:value=20#b01110)=0A+=20=20(size=20:field=20=
(byte=202=2022))=0A+=20=20(op5=20:field=20(byte=201=2021)=20:value=20=
#b1)=0A+=20=20(rm=20:fields=20(list=20(byte=201=2030)=20(byte=202=2022)=20=
(byte=205=2016))=20:type=20'simd-reg)=0A+=20=20(op=20:field=20(byte=204=20=
12))=0A+=20=20(op6=20:field=20(byte=202=2010)=20:value=20#b00)=0A+=20=20=
(rn=20:fields=20(list=20(byte=201=2030)=20(byte=202=2022)=20(byte=205=20=
5))=20:type=20'simd-reg)=0A+=20=20(rd=20:fields=20(list=20(byte=201=20=
30)=20(byte=202=2022)=20(byte=205=200))=20:type=20'simd-reg))=0A+=0A=20=
(def-emitter=20simd-three-same=0A=20=20=20(#b0=201=2031)=0A=20=20=20(q=20=
1=2030)=0A@@=20-3101,6=20+3182,35=20@@=0A=20=20=20=20=20(:4s=20(values=20=
1=20#b10))=0A=20=20=20=20=20(:2d=20(values=201=20#b11))))=0A=20=0A=
+(defun=20encode-vector-float-size=20(size)=0A+=20=20(ecase=20size=0A+=20=
=20=20=20(:2s=20(values=200=200))=0A+=20=20=20=20(:4s=20(values=201=20=
0))=0A+=20=20=20=20(:2d=20(values=201=201))))=0A+=0A+(macrolet=20((def=20=
(name=20q=20u=20opc)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
`(define-instruction=20,name=20(segment=20rd=20rn=20rm=20&optional=20=
(size=20:16b))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(:printer=20simd-three-diff=20((q=20,q)=20(u=20,u)=20(op=20,opc)))=0A+=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:emitter=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20(emit-simd-three-diff=20segment=0A+=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20,q=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20,u=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(if=20(zerop=20=
,q)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(ecase=20=
size=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(:8b=20#b00)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20(:4h=20#b01)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20(:2s=20#b10))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20(ecase=20size=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20(:16b=20#b00)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20(:8h=20#b01)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20(:4s=20#b10)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(fpr-offset=20rm)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20,opc=0A+=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20(fpr-offset=20rn)=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20(fpr-offset=20rd))))))=0A+=20=20(def=20umull=20=
0=201=20#b1100)=0A+=20=20(def=20umull2=201=201=20#b1100))=0A+=0A=20=
(macrolet=20((def=20(name=20u=20size=20op=20&rest=20printer)=0A=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20`(define-instruction=20,name=20(segment=20=
rd=20rn=20rm=20size)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(:printer=20simd-three-same=20((u=20,u)=20(size=20,size)=20(op=20,op))=0A=
@@=20-3146,7=20+3256,18=20@@=0A=20=20=20(def=20urhadd=20#b1=20#b00010)=0A=
=20=20=20(def=20uhsub=20#b1=20#b00100)=0A=20=20=20(def=20uqsub=20#b1=20=
#b00101)=0A-=20=20(def=20addp=20#b0=20#b10111))=0A+=20=20(def=20addp=20=
#b0=20#b10111)=0A+=20=20(def=20shadd=20#b0=20#b00000)=0A+=20=20(def=20=
sqadd=20#b0=20#b00001)=0A+=20=20(def=20srhadd=20#b0=20#b00010)=0A+=20=20=
(def=20shsub=20#b0=20#b00100)=0A+=20=20(def=20sqsub=20#b0=20#b00101)=0A+=20=
=20(def=20uminp=20#b1=20#b10101)=0A+=20=20(def=20umaxp=20#b1=20#b10100)=0A=
+=20=20(def=20sminp=20#b0=20#b10101)=0A+=20=20(def=20smaxp=20#b0=20=
#b10100)=0A+=20=20(def=20sshl=20#b0=20#b01001)=0A+=20=20(def=20ushl=20=
#b1=20#b01001))=0A=20=0A=20(macrolet=20((def=20(name=20u=20neg=20op)=0A=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20`(define-instruction=20,name=20=
(segment=20rd=20rn=20rm=20size)=0A@@=20-3163,7=20+3284,9=20@@=0A=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20,op=0A=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(fpr-offset=20rn)=0A=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(fpr-offset=20=
rd)))))))=0A-=20=20(def=20fcmeq=20#b0=20#b0=20#b11100))=0A+=20=20(def=20=
fcmeq=20#b0=20#b0=20#b11100)=0A+=20=20(def=20fcmge=20#b1=20#b0=20=
#b11100)=0A+=20=20(def=20fcmgt=20#b1=20#b1=20#b11100))=0A=20=0A=20=
(def-emitter=20simd-scalar-three-same=0A=20=20=20=20=20(#b01=202=2030)=0A=
@@=20-3190,6=20+3313,63=20@@=0A=20=20=20(rn=20:fields=20(list=20(byte=20=
1=2030)=20(byte=205=205))=20:type=20'simd-reg)=0A=20=20=20(rd=20:fields=20=
(list=20(byte=201=2030)=20(byte=205=200))=20:type=20'simd-reg))=0A=20=0A=
+(def-emitter=20simd-scalar-and-vector-two=0A+=20=20=20=20(#b01=202=20=
30)=0A+=20=20(u=201=2029)=0A+=20=20(#b11110=205=2024)=0A+=20=20(sz2=201=20=
23)=0A+=20=20(size=201=2022)=0A+=20=20(#b11000=205=2017)=0A+=20=20(opc=20=
5=2012)=0A+=20=20(#b10=202=2010)=0A+=20=20(rn=205=205)=0A+=20=20(rd=205=20=
0))=0A+=0A+(define-instruction-format=20(simd-scalar-and-vector-two=2032=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20:default-printer=20'(:name=20:tab=20rd=20",=20"=20rn))=0A+=20=
=20(op3=20:field=20(byte=202=2030)=20:value=20#b01)=0A+=20=20(u=20:field=20=
(byte=201=2029))=0A+=20=20(op4=20:field=20(byte=205=2024)=20:value=20=
#b11110)=0A+=20=20(op2=20:field=20(byte=201=2023)=20:value=20#b0)=0A+=20=20=
(size=20:field=20(byte=201=2022))=0A+=20=20(op5=20:field=20(byte=205=20=
17)=20:value=20#b11000)=0A+=20=20(op=20:field=20(byte=205=2012))=0A+=20=20=
(op6=20:field=20(byte=202=2010)=20:value=20#b10)=0A+=20=20(rn=20:fields=20=
(list=20(byte=201=2022)=20(byte=205=205))=20:type=20'float-reg)=0A+=20=20=
(rd=20:fields=20(list=20(byte=201=2030)=20(byte=205=200))=20:type=20=
'simd-float-pair-reg))=0A+=0A+(macrolet=20((def=20(name=20u=20sz2=20opc=20=
simd-o1=20simd-opc)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
`(define-instruction=20,name=20(segment=20rd=20rn=20rm-or-scalar-size=20=
&optional=20vector-size)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20(:printer=20simd-scalar-and-vector-two=20((u=20,u)=20(op2=20,sz2)=20=
(op=20,opc)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(:printer=20simd-three-same-float=20((u=20,u)=20(neg=20,simd-o1)=20(op=20=
,simd-opc)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(:emitter=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(cond=20=
((member=20rm-or-scalar-size=20'(:2s=20:2d))=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(aver=20(null=20=
vector-size))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20(emit-simd-scalar-and-vector-two=20segment=0A+=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20,u=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20,sz2=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(ecase=20=
rm-or-scalar-size=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:2s=200)=0A+=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20(:2d=201))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20,opc=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20(fpr-offset=20rn)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(fpr-offset=20rd)))=0A+=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(t=0A+=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(multiple-value-bind=20(q=20size)=20(encode-vector-size=20vector-size)=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20(emit-simd-three-same-float=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20segment=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20q=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
,u=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20,simd-o1=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20(logand=201=20size)=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(fpr-offset=20=
rm-or-scalar-size)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20,simd-opc=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(fpr-offset=20rn)=0A+=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20(fpr-offset=20rd)))))))))=0A+=20=20(def=20faddp=201=200=20#b01101=200=20=
#b11010)=0A+=20=20(def=20fminp=201=201=20#b01111=201=20#b11110)=0A+=20=20=
(def=20fmaxp=201=200=20#b01111=200=20#b11110))=0A+=0A=20;;;=0A=20=0A=20=
(def-emitter=20simd-extract=0A@@=20-3285,23=20+3465,37=20@@=0A=20=20=20=
(rn=20:fields=20(list=20(byte=205=205)=20(byte=205=2016))=20:type=20=
'simd-copy-reg)=0A=20=20=20(rd=20:fields=20(list=20(byte=201=2030)=20=
(byte=205=200))=20:type=20'sized-reg))=0A=20=0A-(macrolet=20((def=20=
(name=20op=20imm4=20q)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=
`(define-instruction=20,name=20(segment=20rd=20rn=20index=20size)=0A-=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:printer=20=
simd-copy-to-general=20((op=20,op)=20(imm4=20,imm4)))=0A-=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20(:emitter=0A-=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20(let=20((isize=20(position=20size=20'(:B=20:H=20:S=20=
:D))))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(emit-simd-copy=20segment=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(case=20size=0A=
-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20(,q=201)=0A-=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20(t=200))=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20,op=0A-=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20(logior=20(ash=20index=20(1+=20isize))=0A-=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20(ash=201=20isize))=0A-=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20,imm4=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(fpr-offset=20=
rn)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20(gpr-offset=20rd)))))))=0A-=20=20=
(def=20umov=200=20#b0111=20(:d))=0A-=20=20(def=20smov=200=20#b0101=20(:d=20=
:s)))=0A+(define-instruction=20umov=20(segment=20rd=20rn=20index=20size)=0A=
+=20=20(:printer=20simd-copy-to-general=20((op=200)=20(imm4=20#b0111)))=0A=
+=20=20(:emitter=0A+=20=20=20(if=20(sc-is=20rd=2032-bit-reg)=0A+=20=20=20=
=20=20=20=20(aver=20(member=20size=20'(:b=20:h=20:s)))=0A+=20=20=20=20=20=
=20=20(aver=20(member=20size=20'(:b=20:h=20:s=20:d))))=0A+=20=20=20(let=20=
((isize=20(position=20size=20'(:b=20:h=20:s=20:d))))=0A+=20=20=20=20=20=
(emit-simd-copy=20segment=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20(if=20(eq=20size=20:d)=201=200)=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=200=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20(logior=20(ash=20index=20(1+=20=
isize))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20(ash=201=20isize))=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20#b0111=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20(fpr-offset=20rn)=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(gpr-offset=20rd)))))=0A+=0A=
+(define-instruction=20smov=20(segment=20rd=20rn=20index=20size)=0A+=20=20=
(:printer=20simd-copy-to-general=20((op=200)=20(imm4=20#b0101)))=0A+=20=20=
(:emitter=0A+=20=20=20(if=20(sc-is=20rd=2032-bit-reg)=0A+=20=20=20=20=20=20=
=20(aver=20(member=20size=20'(:b=20:h)))=0A+=20=20=20=20=20=20=20(aver=20=
(member=20size=20'(:b=20:h=20:s))))=0A+=20=20=20(let=20((isize=20=
(position=20size=20'(:b=20:h=20:s))))=0A+=20=20=20=20=20(emit-simd-copy=20=
segment=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(reg-size=20rd)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=200=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20(logior=20(ash=20index=20(1+=20isize))=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(ash=201=20=
isize))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
#b0101=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(fpr-offset=20rn)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20(gpr-offset=20rd)))))=0A=20=0A=20(define-instruction-format=20=
(simd-dup-from-general=2032=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20:include=20simd-copy=0A@@=20=
-3412,18=20+3606,6=20@@=0A=20=20=20(rd=20:fields=20(list=20(byte=202=20=
22)=20(byte=205=200))=20:type=20'vbhs))=0A=20=0A=20=0A-(def-emitter=20=
simd-two-misc=0A-=20=20=20=20(#b0=201=2031)=0A-=20=20(q=201=2030)=0A-=20=20=
(u=201=2029)=0A-=20=20(#b01110=205=2024)=0A-=20=20(size=202=2022)=0A-=20=20=
(#b10000=205=2017)=0A-=20=20(op=205=2012)=0A-=20=20(#b10=202=2010)=0A-=20=
=20(rn=205=205)=0A-=20=20(rd=205=200))=0A-=0A=20(define-instruction=20=
addv=20(segment=20rd=20rn=20size)=0A=20=20=20(:printer=20=
simd-across-lanes=20=20((u=200)=20(op=20#b11011)))=0A=20=20=20(:emitter=0A=
@@=20-3464,6=20+3646,30=20@@=0A=20=20=20=20=20(fpr-offset=20rn)=0A=20=20=20=
=20=20(fpr-offset=20rd))))=0A=20=0A+(define-instruction=20fminv=20=
(segment=20rd=20rn)=0A+=20=20(:printer=20simd-across-lanes=20=20((u=200)=20=
(size=20#b10)=20(op=20#b01111)))=0A+=20=20(:emitter=0A+=20=20=20=
(emit-simd-across-lanes=0A+=20=20=20=20segment=0A+=20=20=20=201=0A+=20=20=
=20=201=0A+=20=20=20=20#b10=0A+=20=20=20=20#b01111=0A+=20=20=20=20=
(fpr-offset=20rn)=0A+=20=20=20=20(fpr-offset=20rd))))=0A+=0A=
+(define-instruction=20fmaxv=20(segment=20rd=20rn)=0A+=20=20(:printer=20=
simd-across-lanes=20=20((u=200)=20(size=20#b00)=20(op=20#b01111)))=0A+=20=
=20(:emitter=0A+=20=20=20(emit-simd-across-lanes=0A+=20=20=20=20segment=0A=
+=20=20=20=201=0A+=20=20=20=201=0A+=20=20=20=20#b00=0A+=20=20=20=20=
#b01111=0A+=20=20=20=20(fpr-offset=20rn)=0A+=20=20=20=20(fpr-offset=20=
rd))))=0A+=0A=20(macrolet=20((def=20(name=20u=20op)=0A=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20`(define-instruction=20,name=20(segment=20rd=20rn=20=
size)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:printer=20=
simd-across-lanes=20=20((u=20,u)=20(op=20,op)=0A@@=20-3483,6=20+3689,18=20=
@@=0A=20=20=20(def=20sminv=200=20#b11010)=0A=20=20=20(def=20smaxv=200=20=
#b01010))=0A=20=0A+(def-emitter=20simd-two-misc=0A+=20=20=20=20(#b0=201=20=
31)=0A+=20=20(q=201=2030)=0A+=20=20(u=201=2029)=0A+=20=20(#b01110=205=20=
24)=0A+=20=20(size=202=2022)=0A+=20=20(#b10000=205=2017)=0A+=20=20(op=20=
5=2012)=0A+=20=20(#b10=202=2010)=0A+=20=20(rn=205=205)=0A+=20=20(rd=205=20=
0))=0A+=0A=20(define-instruction-format=20(simd-two-misc=2032=0A=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20:default-printer=20'(:name=20:tab=20rd=20",=20"=20rn))=0A=20=20=20(o1=20=
:field=20(byte=201=2031)=20:value=20#b0)=0A@@=20-3514,6=20+3732,23=20@@=0A=
=20=20=20(def=20rev64=20#b0=20#b00000=20(:8b=20:16b=20:4h=20:8h=20:2s=20=
:4s))=0A=20=20=20(def=20not=20#b1=20#b00101))=0A=20=0A+(macrolet=0A+=20=20=
=20=20((def=20(name=20q=20op)=0A+=20=20=20=20=20=20=20=
`(define-instruction=20,name=20(segment=20rd=20rn)=0A+=20=20=20=20=20=20=20=
=20=20=20(:printer=20simd-two-misc=20((q=20,q)=20(u=20#b0)=20(op=20=
,op)))=0A+=20=20=20=20=20=20=20=20=20=20(:emitter=0A+=20=20=20=20=20=20=20=
=20=20=20=20(emit-simd-two-misc=20segment=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20,q=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20#b0=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20#b01=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20,op=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20(fpr-offset=20rn)=0A+=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(fpr-offset=20=
rd))))))=0A+=20=20(def=20fcvtl=200=20#b10111)=0A+=20=20(def=20fcvtl2=201=20=
#b10111)=0A+=20=20(def=20fcvtn=200=20#b10110)=0A+=20=20(def=20fcvtn2=201=20=
#b10110))=0A+=0A=20(macrolet=0A=20=20=20=20=20((def=20(name=20u=20op)=0A=20=
=20=20=20=20=20=20=20`(define-instruction=20,name=20(segment=20rd=20rn=20=
size)=0A@@=20-3547,6=20+3782,10=20@@=0A=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20,op=0A=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20(fpr-offset=20rn)=0A=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(fpr-offset=20rd)))))))=0A+=20=20(def=20sqxtn=20#b0=20#b10100=200=20(:8b=20=
:4h=20:2s))=0A+=20=20(def=20sqxtn2=20#b0=20#b10100=201=20(:16b=20:8h=20=
:4s))=0A+=20=20(def=20uqxtn=20#b1=20#b10100=200=20(:8b=20:4h=20:2s))=0A+=20=
=20(def=20uqxtn2=20#b1=20#b10100=201=20(:16b=20:8h=20:4s))=0A=20=20=20=
(def=20xtn=20#b0=20#b10010=200=20(:8b=20:4h=20:2s))=0A=20=20=20(def=20=
xtn2=20#b0=20#b10010=201=20(:16b=20:8h=20:4s)))=0A=20=0A@@=20-3619,6=20=
+3858,8=20@@=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20,op=0A=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20(fpr-offset=20rn)=0A=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20(fpr-offset=20rd)))))))=0A+=20=20(def=20sshll=20#b0=20#b0=20=
#b10100)=0A+=20=20(def=20sshll2=20#b1=20#b0=20#b10100)=0A=20=20=20(def=20=
ushll=20#b0=20#b1=20#b10100)=0A=20=20=20(def=20ushll2=20#b1=20#b1=20=
#b10100))=0A=20=0A@@=20-3677,10=20+3918,11=20@@=0A=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20,op=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(fpr-offset=20=
rn)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(fpr-offset=20rd)))))))=0A+=20=
=20(def=20shl=20#b0=20#b01010=20nil=20t)=0A=20=20=20(def=20sli=20#b1=20=
#b01010)=0A=20=20=20(def=20sri=20#b1=20#b01000=20t)=0A=20=20=20(def=20=
ushr=20#b1=20#b00000=20t=20t)=0A-=20=20(def=20shl=20#b0=20#b01010=20nil=20=
t)=0A+=20=20(def=20sshr=20#b0=20#b00000=20t=20t)=0A=20=20=20(def=20shrn=20=
#b0=20#b10000=20t))=0A=20=0A=20(def-emitter=20simd-modified-imm=0A@@=20=
-4385,8=20+4627,9=20@@=0A=20=0A=20(defpattern=20"lsl=20+=20arith=20->=20=
arith"=20((ubfm)=20(add=20and=20orr=20eor))=20(stmt=20next)=0A=20=20=20=
(destructuring-bind=20(dst1=20src1=20immr=20imms)=20(stmt-operands=20=
stmt)=0A-=20=20=20=20(destructuring-bind=20(dst2=20srcn=20srcm)=20=
(stmt-operands=20next)=0A-=20=20=20=20=20=20(when=20(and=20(/=3D=20imms=20=
63)=0A+=20=20=20=20(destructuring-bind=20(dst2=20srcn=20srcm=20&optional=20=
vector-size)=20(stmt-operands=20next)=0A+=20=20=20=20=20=20(when=20(and=20=
(not=20vector-size)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(/=3D=20imms=2063)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(=3D=20(1+=20imms)=20immr)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20(tn-p=20srcm)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20(or=0A@@=20-4406,8=20+4649,9=20@@=0A=20=0A=20(defpattern=20"asr=20=
+=20arith=20->=20arith"=20((sbfm)=20(add=20and=20orr=20eor))=20(stmt=20=
next)=0A=20=20=20(destructuring-bind=20(dst1=20src1=20immr=20imms)=20=
(stmt-operands=20stmt)=0A-=20=20=20=20(destructuring-bind=20(dst2=20srcn=20=
srcm)=20(stmt-operands=20next)=0A-=20=20=20=20=20=20(when=20(and=20(=3D=20=
imms=2063)=0A+=20=20=20=20(destructuring-bind=20(dst2=20srcn=20srcm=20=
&optional=20vector-size)=20(stmt-operands=20next)=0A+=20=20=20=20=20=20=
(when=20(and=20(not=20vector-size)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20(=3D=20imms=2063)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20(tn-p=20srcm)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20(or=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(location=3D=20dst1=20srcm)=0A@@=20-4426,8=20+4670,9=20@@=0A=20=0A=20=
(defpattern=20"lsl=20+=20sub=20->=20sub"=20((ubfm)=20(sub))=20(stmt=20=
next)=0A=20=20=20(destructuring-bind=20(dst1=20src1=20immr=20imms)=20=
(stmt-operands=20stmt)=0A-=20=20=20=20(destructuring-bind=20(dst2=20srcn=20=
srcm)=20(stmt-operands=20next)=0A-=20=20=20=20=20=20(when=20(and=20(/=3D=20=
imms=2063)=0A+=20=20=20=20(destructuring-bind=20(dst2=20srcn=20srcm=20=
&optional=20vector-size)=20(stmt-operands=20next)=0A+=20=20=20=20=20=20=
(when=20(and=20(not=20vector-size)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20(/=3D=20imms=2063)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20(=3D=20(1+=20imms)=20immr)=0A=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20(tn-p=20srcm)=0A=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20(location=3D=20dst1=20srcm)=0A@@=20-4442,8=20=
+4687,9=20@@=0A=20=0A=20(defpattern=20"asr=20+=20sub=20->=20sub"=20=
((sbfm)=20(sub))=20(stmt=20next)=0A=20=20=20(destructuring-bind=20(dst1=20=
src1=20immr=20imms)=20(stmt-operands=20stmt)=0A-=20=20=20=20=
(destructuring-bind=20(dst2=20srcn=20srcm)=20(stmt-operands=20next)=0A-=20=
=20=20=20=20=20(when=20(and=20(=3D=20imms=2063)=0A+=20=20=20=20=
(destructuring-bind=20(dst2=20srcn=20srcm=20&optional=20vector-size)=20=
(stmt-operands=20next)=0A+=20=20=20=20=20=20(when=20(and=20(not=20=
vector-size)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(=3D=20=
imms=2063)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(tn-p=20=
srcm)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(location=3D=
=20dst1=20srcm)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(not=20(location=3D=20srcn=20srcm))=0A@@=20-4524,9=20+4770,10=20@@=0A=20=
;;;=20An=20even=20number=20can=20be=20shifted=20right=20and=20then=20=
negated,=0A=20;;;=20and=20fixnums=20are=20even.=0A=20(defpattern=20"neg=20=
+=20asr=20->=20neg"=20((sub)=20(sbfm))=20(stmt=20next)=0A-=20=20=
(destructuring-bind=20(dst1=20srcn=20srcm)=20(stmt-operands=20stmt)=0A+=20=
=20(destructuring-bind=20(dst1=20srcn=20srcm=20&optional=20vector-size)=20=
(stmt-operands=20stmt)=0A=20=20=20=20=20(destructuring-bind=20(dst2=20=
src2=20immr=20imms)=20(stmt-operands=20next)=0A-=20=20=20=20=20=20(when=20=
(and=20(=3D=20imms=2063)=0A+=20=20=20=20=20=20(when=20(and=20(not=20=
vector-size)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(=3D=20=
imms=2063)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(=3D=20=
immr=201)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(tn-p=20=
srcm)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(sc-is=20=
srcm=20sb-vm::any-reg)=0A@@=20-4541,8=20+4788,9=20@@=0A=20=0A=20=
(defpattern=20"mul=20+=20sub=20->=20msub"=20((madd)=20(sub))=20(stmt=20=
next)=0A=20=20=20(destructuring-bind=20(dst1=20srcn1=20srcm1=20srca)=20=
(stmt-operands=20stmt)=0A-=20=20=20=20(destructuring-bind=20(dst2=20=
srcn2=20srcm2)=20(stmt-operands=20next)=0A-=20=20=20=20=20=20(when=20=
(and=20(tn-p=20srcm2)=0A+=20=20=20=20(destructuring-bind=20(dst2=20srcn2=20=
srcm2=20&optional=20vector-size)=20(stmt-operands=20next)=0A+=20=20=20=20=
=20=20(when=20(and=20(not=20vector-size)=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20(tn-p=20srcm2)=0A=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20(location=3D=20dst1=20srcm2)=0A=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20(location=3D=20srca=20zr-tn)=0A=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20(not=20(location=3D=20srcn2=20=
srcm2))=0A@@=20-4557,8=20+4805,9=20@@=0A=20=0A=20(defpattern=20"mul=20+=20=
add=20->=20madd"=20((madd)=20(add))=20(stmt=20next)=0A=20=20=20=
(destructuring-bind=20(dst1=20srcn1=20srcm1=20srca)=20(stmt-operands=20=
stmt)=0A-=20=20=20=20(destructuring-bind=20(dst2=20srcn2=20srcm2)=20=
(stmt-operands=20next)=0A-=20=20=20=20=20=20(when=20(and=20(tn-p=20=
srcm2)=0A+=20=20=20=20(destructuring-bind=20(dst2=20srcn2=20srcm2=20=
&optional=20vector-size)=20(stmt-operands=20next)=0A+=20=20=20=20=20=20=
(when=20(and=20(not=20vector-size)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20(tn-p=20srcm2)=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20(location=3D=20srca=20zr-tn)=0A=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20(not=20(location=3D=20srcn2=20srcm2))=0A=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(or=20(location=3D=20dst1=20=
srcm2)=0Adiff=20--git=20a/src/compiler/arm64/target-insts.lisp=20=
b/src/compiler/arm64/target-insts.lisp=0Aindex=200f0bbb7b4..f442bfde2=20=
100644=0A---=20a/src/compiler/arm64/target-insts.lisp=0A+++=20=
b/src/compiler/arm64/target-insts.lisp=0A@@=20-288,6=20+288,11=20@@=0A=20=
=20=20=20=20(format=20stream=20"V~d.~a"=20offset=0A=20=20=20=20=20=20=20=20=
=20=20=20=20=20(decode-vector-size-2x=20q=20size))))=0A=20=0A+(defun=20=
print-simd-float-pair-reg=20(value=20stream=20dstate)=0A+=20=20(declare=20=
(ignore=20dstate))=0A+=20=20(destructuring-bind=20(size=20offset)=20=
value=0A+=20=20=20=20(format=20stream=20"V~d.~a"=20offset=20(if=20(=3D=20=
size=201)=20"2S"=20"2D"))))=0A+=0A=20(defun=20print-simd-immh-reg=20=
(value=20stream=20dstate)=0A=20=20=20(declare=20(ignore=20dstate))=0A=20=20=
=20(if=20(=3D=20(length=20value)=202)=0A--=20=0A2.50.1=20(Apple=20=
Git-155)=0A=0A=

--Apple-Mail=_03B53131-1088-4A20-8204-C6AF066A7E81
Content-Disposition: attachment;
	filename=0004-sb-simd-arm64-support.patch
Content-Type: application/octet-stream;
	x-unix-mode=0644;
	name="0004-sb-simd-arm64-support.patch"
Content-Transfer-Encoding: quoted-printable

=46rom=20319bc0f184a68f6c987bc705da9dd07d973081df=20Mon=20Sep=2017=20=
00:00:00=202001=0AFrom:=20Sylvia=20Harrington=20=
<[email protected]>=0ADate:=20Sun,=2028=20Jun=202026=20=
10:24:33=20+0100=0ASubject:=20[PATCH=204/4]=20sb-simd:=20arm64=20support=0A=
=0A---=0A=20contrib/sb-simd/code/cpu-identification.lisp=20=20|=20=20=20=
8=20+=0A=20contrib/sb-simd/code/define-custom-vops.lisp=20=20|=20210=20=
++++-=0A=20contrib/sb-simd/code/define-fake-vops.lisp=20=20=20=20|=20132=20=
+++=0A=20.../sb-simd/code/define-instruction-vops.lisp=20|=20=2059=20+-=0A=
=20.../sb-simd/code/define-modify-macros.lisp=20=20=20=20|=20=2031=20+=0A=
=20contrib/sb-simd/code/define-simd-casts.lisp=20=20=20|=20=20=201=20+=0A=
=20contrib/sb-simd/code/define-vref-vops.lisp=20=20=20=20|=20=2072=20++=0A=
=20.../code/instruction-sets/advsimd.lisp=20=20=20=20=20=20=20=20|=20764=20=
++++++++++++++++++=0A=20.../sb-simd/code/instruction-sets/arm64.lisp=20=20=
|=20=2013=20+=0A=20contrib/sb-simd/code/packages.lisp=20=20=20=20=20=20=20=
=20=20=20=20=20|=20565=20++++++++++++-=0A=20=
contrib/sb-simd/code/record.lisp=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
|=20=20=202=20+-=0A=20contrib/sb-simd/sb-simd.asd=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20|=20=20=204=20+-=0A=20=
contrib/sb-simd/test-suite/test-arefs.lisp=20=20=20=20|=20=2013=20+=0A=20=
.../test-suite/test-hairy-simd-functions.lisp=20|=20=20=202=20+=0A=20=
.../test-suite/test-horizontal-functions.lisp=20|=20=2042=20+=0A=20=
contrib/sb-simd/test-suite/test-packages.lisp=20|=20=20=201=20+=0A=20=
.../test-simple-simd-functions.lisp=20=20=20=20=20=20=20=20=20=20=20|=20=
149=20++++=0A=20contrib/sb-simd/test-suite/test-suite.lisp=20=20=20=20|=20=
=2010=20+-=0A=20contrib/sb-simd/test-suite/utilities.lisp=20=20=20=20=20=
|=20=20=201=20+=0A=20make-config.sh=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20|=20=20=207=20=
+-=0A=20tests/sb-simd.impure.lisp=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20|=20=20=204=20-=0A=2021=20files=20changed,=202076=20=
insertions(+),=2014=20deletions(-)=0A=20create=20mode=20100644=20=
contrib/sb-simd/code/instruction-sets/advsimd.lisp=0A=20create=20mode=20=
100644=20contrib/sb-simd/code/instruction-sets/arm64.lisp=0A=0Adiff=20=
--git=20a/contrib/sb-simd/code/cpu-identification.lisp=20=
b/contrib/sb-simd/code/cpu-identification.lisp=0Aindex=20=
2981f29f5..e74c9be64=20100644=0A---=20=
a/contrib/sb-simd/code/cpu-identification.lisp=0A+++=20=
b/contrib/sb-simd/code/cpu-identification.lisp=0A@@=20-70,3=20+70,11=20=
@@=0A=20=0A=20=20=20(defun=20fma-supported-p=20()=0A=20=20=20=20=20nil))=0A=
+=0A+#+arm64=0A+(defun=20advsimd-supported-p=20()=0A+=20=20t)=0A+=0A=
+#-arm64=0A+(defun=20advsimd-supported-p=20()=0A+=20=20nil)=0Adiff=20=
--git=20a/contrib/sb-simd/code/define-custom-vops.lisp=20=
b/contrib/sb-simd/code/define-custom-vops.lisp=0Aindex=20=
8ed639a34..865419d30=20100644=0A---=20=
a/contrib/sb-simd/code/define-custom-vops.lisp=0A+++=20=
b/contrib/sb-simd/code/define-custom-vops.lisp=0A@@=20-166,4=20+166,212=20=
@@=0A=20=20=20=20=20(:results=20(dst))=0A=20=20=20=20=20(:generator=0A=20=
=20=20=20=20=20(inst=20vxorpd=20dst=20dst=20dst)=0A-=20=20=20=20=20(inst=20=
movsd=20dst=20src))))=0A+=20=20=20=20=20(inst=20movsd=20dst=20src)))=0A+=0A=
+;;=20AdvSIMD=0A+=0A+(define-custom-vop=20=
sb-simd-advsimd::f32!-from-p128=0A+=20=20(:args=20(src=20:scs=20=
(single-neon-reg)=20:to=20:save))=0A+=20=20(:results=20(dst=20:scs=20=
(single-reg)))=0A+=20=20(:generator=0A+=20=20=20(inst=20movi=20dst=200=20=
:4s)=0A+=20=20=20(inst=20dup=20dst=20src=20nil=200)))=0A+=0A=
+(define-custom-vop=20sb-simd-advsimd::f32.4!-from-f32=0A+=20=20(:args=20=
(src=20:scs=20(single-reg)=20:target=20dst))=0A+=20=20(:results=20(dst=20=
:scs=20(single-neon-reg)))=0A+=20=20(:generator=0A+=20=20=20(unless=20=
(location=3D=20src=20dst)=0A+=20=20=20=20=20(inst=20ins=20dst=200=20src=20=
0=20:s))))=0A+=0A+(define-custom-vop=20sb-simd-advsimd:f32.4-dup=0A+=20=20=
(:args=20(src=20:scs=20(single-neon-reg)))=0A+=20=20(:info=20lane)=0A+=20=
=20(:results=20(dst=20:scs=20(single-neon-reg)))=0A+=20=20(:generator=0A=
+=20=20=20(inst=20dup=20dst=20src=20:4s=20lane)))=0A+=0A=
+(define-custom-vop=20sb-simd-advsimd:f32.4-lane-extract=0A+=20=20(:args=20=
(src=20:scs=20(single-neon-reg)))=0A+=20=20(:info=20lane)=0A+=20=20=
(:results=20(dst=20:scs=20(single-reg)))=0A+=20=20(:generator=0A+=20=20=20=
(unless=20(and=20(location=3D=20dst=20src)=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20(eql=20lane=200))=0A+=20=20=20=20=20(inst=20dup=20=
dst=20src=20nil=20lane))))=0A+=0A+(define-custom-vop=20=
sb-simd-advsimd:f32.4-lane-insert=0A+=20=20(:args=20(src1=20:scs=20=
(single-neon-reg)=20:target=20dst)=0A+=20=20=20=20=20=20=20=20=20(src2=20=
:scs=20(single-reg)=20:to=20:save))=0A+=20=20(:info=20lane)=0A+=20=20=
(:results=20(dst=20:scs=20(single-neon-reg)))=0A+=20=20(:generator=0A+=20=
=20=20(unless=20(location=3D=20dst=20src1)=0A+=20=20=20=20=20(inst=20mov=20=
dst=20src1=20:16b))=0A+=20=20=20(inst=20ins=20dst=20lane=0A+=20=20=20=20=20=
=20=20=20=20(make-random-tn=20(sc-or-lose=20'single-neon-reg)=20=
(tn-offset=20src2))=200=0A+=20=20=20=20=20=20=20=20=20:s)))=0A+=0A=
+(define-custom-vop=20sb-simd-advsimd:f32.4-ins=0A+=20=20(:args=20(src1=20=
:scs=20(single-neon-reg)=20:target=20dst)=0A+=20=20=20=20=20=20=20=20=20=
(src2=20:scs=20(single-neon-reg)=20:to=20:save))=0A+=20=20(:info=20idx1=20=
idx2)=0A+=20=20(:results=20(dst=20:scs=20(single-neon-reg)))=0A+=20=20=
(:generator=0A+=20=20=20(unless=20(location=3D=20dst=20src1)=0A+=20=20=20=
=20=20(inst=20mov=20dst=20src1=20:16b))=0A+=20=20=20(inst=20ins=20dst=20=
idx1=20src2=20idx2=20:s)))=0A+=0A+(define-custom-vop=20=
sb-simd-advsimd::f64!-from-p128=0A+=20=20(:args=20(src=20:scs=20=
(double-neon-reg)=20:to=20:save))=0A+=20=20(:results=20(dst=20:scs=20=
(double-reg)))=0A+=20=20(:generator=0A+=20=20=20(inst=20movi=20dst=200=20=
:2d)=0A+=20=20=20(inst=20dup=20dst=20src=20nil=200)))=0A+=0A=
+(define-custom-vop=20sb-simd-advsimd::f64.2!-from-f64=0A+=20=20(:args=20=
(src=20:scs=20(double-reg)=20:target=20dst))=0A+=20=20(:results=20(dst=20=
:scs=20(double-neon-reg)))=0A+=20=20(:generator=0A+=20=20=20(unless=20=
(location=3D=20src=20dst)=0A+=20=20=20=20=20(inst=20ins=20dst=200=20src=20=
0=20:d))))=0A+=0A+(define-custom-vop=20sb-simd-advsimd:f64.2-dup=0A+=20=20=
(:args=20(src=20:scs=20(double-neon-reg)))=0A+=20=20(:info=20lane)=0A+=20=
=20(:results=20(dst=20:scs=20(double-neon-reg)))=0A+=20=20(:generator=0A=
+=20=20=20(inst=20dup=20dst=20src=20:2d=20lane)))=0A+=0A=
+(define-custom-vop=20sb-simd-advsimd:f64.2-lane-extract=0A+=20=20(:args=20=
(src=20:scs=20(double-neon-reg)))=0A+=20=20(:info=20lane)=0A+=20=20=
(:results=20(dst=20:scs=20(double-reg)))=0A+=20=20(:generator=0A+=20=20=20=
(inst=20dup=20dst=20src=20nil=20lane)))=0A+=0A+(define-custom-vop=20=
sb-simd-advsimd:f64.2-lane-insert=0A+=20=20(:args=20(src1=20:scs=20=
(double-neon-reg)=20:target=20dst)=0A+=20=20=20=20=20=20=20=20=20(src2=20=
:scs=20(double-reg)=20:to=20:save))=0A+=20=20(:info=20lane)=0A+=20=20=
(:results=20(dst=20:scs=20(double-neon-reg)))=0A+=20=20(:generator=0A+=20=
=20=20(unless=20(location=3D=20dst=20src1)=0A+=20=20=20=20=20(inst=20mov=20=
dst=20src1=20:16b))=0A+=20=20=20(inst=20ins=20dst=20lane=0A+=20=20=20=20=20=
=20=20=20=20(make-random-tn=20(sc-or-lose=20'single-neon-reg)=20=
(tn-offset=20src2))=200=0A+=20=20=20=20=20=20=20=20=20:d)))=0A+=0A=
+(define-custom-vop=20sb-simd-advsimd:f64.2-ins=0A+=20=20(:args=20(src1=20=
:scs=20(double-neon-reg)=20:target=20dst)=0A+=20=20=20=20=20=20=20=20=20=
(src2=20:scs=20(double-neon-reg)=20:to=20:save))=0A+=20=20(:info=20idx1=20=
idx2)=0A+=20=20(:results=20(dst=20:scs=20(double-neon-reg)))=0A+=20=20=
(:generator=0A+=20=20=20(unless=20(location=3D=20dst=20src1)=0A+=20=20=20=
=20=20(inst=20mov=20dst=20src1=20:16b))=0A+=20=20=20(inst=20ins=20dst=20=
idx1=20src2=20idx2=20:d)))=0A+=0A+(define-custom-vop=20=
sb-simd-advsimd:u8.16-shuffle=0A+=20=20(:args=20(src1=20:scs=20=
(single-neon-reg))=0A+=20=20=20=20=20=20=20=20=20(control=20:scs=20=
(single-neon-reg)))=0A+=20=20(:results=20(dst=20:scs=20=
(single-neon-reg)))=0A+=20=20(:generator=0A+=20=20=20(inst=20tbl=20dst=20=
(list=20src1)=20control=20:16b)))=0A+=0A+(macrolet=0A+=20=20=20=20((def=20=
(sign=20width=20count)=0A+=20=20=20=20=20=20=20(multiple-value-bind=20=
(arrangement=20partial-arrangement=20smaller-arrangement=20=
smaller-partial-arrangement=20larger-arrangement=20element)=0A+=20=20=20=20=
=20=20=20=20=20=20=20(ecase=20width=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20(8=20(values=20:16b=20:8b=20nil=20nil=20:8h=20:b))=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20(16=20(values=20:8h=20:4h=20:16b=20:8b=20:4s=20:h))=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20(32=20(values=20:4s=20:2s=20:8h=20=
:4h=20:2d=20:s))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20(64=20(values=20=
:2d=20nil=20:4s=20:2s=20nil=20:d)))=0A+=20=20=20=20=20=20=20=20=20(let=20=
((smaller-width=20(/=20width=202))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20(smaller-count=20(*=20count=202))=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20(scalar-reg=20(if=20(eql=20sign=20:s)=20'signed-reg=20=
'unsigned-reg)))=0A+=20=20=20=20=20=20=20=20=20=20=20(flet=20((name=20=
(format-control=20&rest=20format-arguments)=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20(intern=20(apply=20#'format=20nil=20=
format-control=20format-arguments)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(find-package=20=
:sb-simd-advsimd))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20`(progn=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(define-custom-vop=20=
,(name=20"~a~d.~d!-FROM-~a~a"=20sign=20width=20count=20sign=20width)=0A+=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:args=20(src=20:scs=20=
(,scalar-reg)=20:target=20dst))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20(:results=20(dst=20:scs=20(int-neon-reg)))=0A+=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:generator=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20(inst=20fmov=20(make-random-tn=20=
(sc-or-lose=20',(if=20(eql=20width=2064)=20'double-reg=20'single-reg))=20=
(tn-offset=20dst))=20src)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20(define-custom-vop=20,(name=20"~a~d.~d-DUP"=20sign=20width=20=
count)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:args=20=
(src=20:scs=20(int-neon-reg)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20(:info=20lane)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20(:results=20(dst=20:scs=20(int-neon-reg)))=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20(:generator=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20(inst=20dup=20dst=20src=20=
,arrangement=20lane)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(define-custom-vop=20,(name=20"~a~d.~d-LANE-EXTRACT"=20sign=20width=20=
count)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:args=20=
(src=20:scs=20(int-neon-reg)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20(:info=20lane)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20(:results=20(dst=20:scs=20(,scalar-reg)))=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20(:generator=0A+=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20(inst=20umov=20dst=20src=20lane=20=
,element)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(define-custom-vop=20,(name=20"~a~d.~d-LANE-INSERT"=20sign=20width=20=
count)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:args=20=
(src1=20:scs=20(int-neon-reg)=20:target=20dst)=0A+=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(src2=20:scs=20=
(,scalar-reg)=20:to=20:save))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20(:info=20lane)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20(:results=20(dst=20:scs=20(int-neon-reg)))=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20(:generator=0A+=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20(unless=20(location=3D=20dst=20src1)=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(inst=20=
mov=20dst=20src1=20:16b))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20(inst=20ins=20dst=20lane=20src2=20nil=20,element)))=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20(define-custom-vop=20,(name=20=
"~a~d.~d-INS"=20sign=20width=20count)=0A+=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20(:args=20(src1=20:scs=20(int-neon-reg)=20:target=20=
dst)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20(src2=20:scs=20(int-neon-reg)=20:to=20:save))=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20(:info=20idx1=20idx2)=0A+=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:results=20(dst=20:scs=20=
(int-neon-reg)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(:generator=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(unless=20(location=3D=20dst=20src1)=0A+=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20(inst=20mov=20dst=20src1=20:16b))=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(inst=20ins=20dst=20=
idx1=20src2=20idx2=20,element)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20;;=20Conversion=20from=20the=20smaller=20type.=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20,@(when=20smaller-arrangement=0A+=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20`((define-custom-vop=20=
,(name=20"~a~d.~d-FROM-~a~d.~d"=20sign=20width=20count=20sign=20=
smaller-width=20smaller-count)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20(:args=20(src=20:scs=20(int-neon-reg)))=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(:results=20(dst=20:scs=20(int-neon-reg)))=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:generator=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(inst=20,(if=20=
(eql=20sign=20:s)=20'sshll=20'ushll)=20dst=20,arrangement=20src=20=
,smaller-partial-arrangement)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20(define-custom-vop=20,(name=20=
"~a~d.~d-FROM-~a~d.~d-HI"=20sign=20width=20count=20sign=20smaller-width=20=
smaller-count)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20(:args=20(src=20:scs=20(int-neon-reg)))=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:results=20=
(dst=20:scs=20(int-neon-reg)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20(:generator=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(inst=20,(if=20(eql=20=
sign=20:s)=20'sshll2=20'ushll2)=20dst=20,arrangement=20src=20=
,smaller-arrangement)))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20(define-custom-vop=20,(name=20"~a~d.~d-SHIFTR"=20sign=20width=20=
count)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:args=20=
(src=20:scs=20(int-neon-reg)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20(:info=20shift)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20(:results=20(dst=20:scs=20(int-neon-reg)))=0A+=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:generator=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20(inst=20,(if=20(eql=20sign=20:s)=20=
'sshr=20'ushr)=20dst=20src=20shift=20,arrangement)))=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20(define-custom-vop=20,(name=20=
"~a~d.~d-SHIFTL"=20sign=20width=20count)=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20(:args=20(src=20:scs=20(int-neon-reg)))=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:info=20shift)=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:results=20(dst=20:scs=20=
(int-neon-reg)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(:generator=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(inst=20shl=20dst=20src=20shift=20,arrangement)))=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20,@(when=20larger-arrangement=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20`((define-custom-vop=20=
,(name=20"~a~d.~d-SHIFTL-LONG"=20sign=20width=20count)=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:args=20(src=20=
:scs=20(int-neon-reg)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20(:info=20shift)=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:results=20(dst=20:scs=20=
(int-neon-reg)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20(:generator=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20(inst=20,(if=20(eql=20sign=20:s)=20=
'sshll=20'ushll)=20dst=20,larger-arrangement=20src=20=
,partial-arrangement=20shift)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20(define-custom-vop=20,(name=20=
"~a~d.~d-SHIFTL-LONG-HI"=20sign=20width=20count)=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:args=20(src=20:scs=20=
(int-neon-reg)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20(:info=20shift)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20(:results=20(dst=20:scs=20=
(int-neon-reg)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20(:generator=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20(inst=20,(if=20(eql=20sign=20:s)=20=
'sshll2=20'ushll2)=20dst=20,larger-arrangement=20src=20,arrangement=20=
shift)))))))))))=0A+=20=20(def=20:u=208=2016)=0A+=20=20(def=20:u=2016=20=
8)=0A+=20=20(def=20:u=2032=204)=0A+=20=20(def=20:u=2064=202)=0A+=20=20=
(def=20:s=208=2016)=0A+=20=20(def=20:s=2016=208)=0A+=20=20(def=20:s=2032=20=
4)=0A+=20=20(def=20:s=2064=202))=0A+)=0Adiff=20--git=20=
a/contrib/sb-simd/code/define-fake-vops.lisp=20=
b/contrib/sb-simd/code/define-fake-vops.lisp=0Aindex=20=
b31f41f66..453a24d21=20100644=0A---=20=
a/contrib/sb-simd/code/define-fake-vops.lisp=0A+++=20=
b/contrib/sb-simd/code/define-fake-vops.lisp=0A@@=20-1739,3=20+1739,135=20=
@@=0A=20=0A=20(define-fake-vop=20f64.4-reverse=20(a)=0A=20=20=20=
(%f64.4-permute4x64=20a=20#b00011011))=0A+=0A+(in-package=20=
#:sb-simd-advsimd)=0A+=0A+(define-fake-vop=20f32.4-values=20(x)=0A+=20=20=
(values=20(%f32.4-lane-extract=20x=200)=0A+=20=20=20=20=20=20=20=20=20=20=
(%f32.4-lane-extract=20x=201)=0A+=20=20=20=20=20=20=20=20=20=20=
(%f32.4-lane-extract=20x=202)=0A+=20=20=20=20=20=20=20=20=20=20=
(%f32.4-lane-extract=20x=203)))=0A+=0A+(define-fake-vop=20make-f32.4=20=
(x=20y=20z=20w)=0A+=20=20(let*=20((t1=20(%f32.4!-from-f32=20x))=0A+=20=20=
=20=20=20=20=20=20=20(t2=20(%f32.4-lane-insert=20t1=20y=201))=0A+=20=20=20=
=20=20=20=20=20=20(t3=20(%f32.4-lane-insert=20t2=20z=202)))=0A+=20=20=20=20=
(%f32.4-lane-insert=20t3=20w=203)))=0A+=0A+(define-fake-vop=20=
two-arg-f32.4/=3D=20(a=20b)=0A+=20=20(%u32.4-not=0A+=20=20=20=
(%two-arg-f32.4=3D=20a=20b)))=0A+=0A+(define-fake-vop=20two-arg-f32.4<=20=
(a=20b)=0A+=20=20(%two-arg-f32.4>=20b=20a))=0A+=0A+(define-fake-vop=20=
two-arg-f32.4<=3D=20(a=20b)=0A+=20=20(%two-arg-f32.4>=3D=20b=20a))=0A+=0A=
+(define-fake-vop=20f32.4-horizontal+=20(x)=0A+=20=20(let=20((tmp=20=
(%f32.4-pair+=20x=20x)))=0A+=20=20=20=20;;=20TODO:=20This=20could=20use=20=
the=20scalar=20faddp=20instead,=20avoiding=20the=20extraction.=0A+=20=20=20=
=20(%f32.4-lane-extract=20(%f32.4-pair+=20tmp=20tmp)=200)))=0A+=0A=
+(define-fake-vop=20f32.4-andc1=20(a=20b)=0A+=20=20(%f32.4-andc2=20b=20=
a))=0A+=0A+(define-fake-vop=20f64.2-values=20(x)=0A+=20=20(values=20=
(%f64.2-lane-extract=20x=200)=0A+=20=20=20=20=20=20=20=20=20=20=
(%f64.2-lane-extract=20x=201)))=0A+=0A+(define-fake-vop=20make-f64.2=20=
(x=20y)=0A+=20=20(%f64.2-lane-insert=20(%f64.2!-from-f64=20x)=20y=201))=0A=
+=0A+(define-fake-vop=20two-arg-f64.2/=3D=20(a=20b)=0A+=20=20(%u64.2-not=0A=
+=20=20=20(%two-arg-f64.2=3D=20a=20b)))=0A+=0A+(define-fake-vop=20=
two-arg-f64.2<=20(a=20b)=0A+=20=20(%two-arg-f64.2>=20b=20a))=0A+=0A=
+(define-fake-vop=20two-arg-f64.2<=3D=20(a=20b)=0A+=20=20=
(%two-arg-f64.2>=3D=20b=20a))=0A+=0A+(define-fake-vop=20f64.2-andc1=20(a=20=
b)=0A+=20=20(%f64.2-andc2=20b=20a))=0A+=0A+(macrolet=0A+=20=20=20=20=
((def=20(sign=20width=20count)=0A+=20=20=20=20=20=20=20(flet=20((name=20=
(format-control=20&rest=20format-arguments)=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20(intern=20(apply=20#'format=20nil=20format-control=20=
format-arguments)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20(find-package=20:sb-simd-advsimd))))=0A+=20=20=20=20=20=
=20=20=20=20(let=20((make-args=20(loop=20for=20i=20from=200=20below=20=
count=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20collect=20(make-symbol=20(format=20nil=20=
"V~a"=20i))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(from=20=
(name=20"%~a~d.~d!-FROM-~a~d"=20sign=20width=20count=20sign=20width))=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(insert=20(name=20=
"%~a~d.~d-LANE-INSERT"=20sign=20width=20count))=0A+=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20(extract=20(name=20"%~a~d.~d-LANE-EXTRACT"=20sign=20=
width=20count)))=0A+=20=20=20=20=20=20=20=20=20=20=20`(progn=0A+=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20(define-fake-vop=20,(name=20=
"MAKE-~a~d.~d"=20sign=20width=20count)=20,make-args=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20,(loop=20with=20result=20=3D=20(list=20=
from=20(first=20make-args))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20for=20arg=20in=20(rest=20make-args)=0A+=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20for=20i=20=
from=201=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20do=20(setf=20result=20(list=20insert=20result=20arg=20i))=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20finally=20=
(return=20result)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(define-fake-vop=20,(name=20"~a~d.~d-VALUES"=20sign=20width=20count)=20=
(x)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(values=20,@(loop=20=
for=20i=20from=200=20below=20count=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20collect=20=
`(,extract=20x=20,i))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(define-fake-vop=20,(name=20"~a~d.~d-ANDC1"=20sign=20width=20count)=20(a=20=
b)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(,(name=20=
"%~a~d.~d-ANDC2"=20sign=20width=20count)=20b=20a))=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20(define-fake-vop=20,(name=20"TWO-ARG-~a~d.~d/=3D"=20=
sign=20width=20count)=20(a=20b)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20(,(name=20"%U~d.~d-NOT"=20width=20count)=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20(,(name=20"%TWO-ARG-~a~d.~d=3D"=20sign=20=
width=20count)=20a=20b)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(define-fake-vop=20,(name=20"TWO-ARG-~a~d.~d<"=20sign=20width=20count)=20=
(a=20b)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(,(name=20=
"%TWO-ARG-~a~d.~d>"=20sign=20width=20count)=20b=20a))=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20(define-fake-vop=20,(name=20"TWO-ARG-~a~d.~d<=3D"=20=
sign=20width=20count)=20(a=20b)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20(,(name=20"%TWO-ARG-~a~d.~d>=3D"=20sign=20width=20count)=20b=20=
a)))))))=0A+=20=20(def=20:u=208=2016)=0A+=20=20(def=20:u=2016=208)=0A+=20=
=20(def=20:u=2032=204)=0A+=20=20(def=20:u=2064=202)=0A+=20=20(def=20:s=20=
8=2016)=0A+=20=20(def=20:s=2016=208)=0A+=20=20(def=20:s=2032=204)=0A+=20=20=
(def=20:s=2064=202))=0A+=0A+(define-fake-vop=20u64.2-pair-min=20(a=20b)=0A=
+=20=20(%make-u64.2=20(sb-simd::%two-arg-u64-min=20(%u64.2-lane-extract=20=
a=200)=20(%u64.2-lane-extract=20a=201))=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20(sb-simd::%two-arg-u64-min=20(%u64.2-lane-extract=20b=20=
0)=20(%u64.2-lane-extract=20b=201))))=0A+=0A+(define-fake-vop=20=
u64.2-horizontal-min=20(a)=0A+=20=20(sb-simd::%two-arg-u64-min=20=
(%u64.2-lane-extract=20a=200)=20(%u64.2-lane-extract=20a=201)))=0A+=0A=
+(define-fake-vop=20u64.2-pair-max=20(a=20b)=0A+=20=20(%make-u64.2=20=
(sb-simd::%two-arg-u64-max=20(%u64.2-lane-extract=20a=200)=20=
(%u64.2-lane-extract=20a=201))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20(sb-simd::%two-arg-u64-max=20(%u64.2-lane-extract=20b=200)=20=
(%u64.2-lane-extract=20b=201))))=0A+=0A+(define-fake-vop=20=
u64.2-horizontal-max=20(a)=0A+=20=20(sb-simd::%two-arg-u64-max=20=
(%u64.2-lane-extract=20a=200)=20(%u64.2-lane-extract=20a=201)))=0A+=0A=
+(define-fake-vop=20u64.2-pair+=20(a=20b)=0A+=20=20(%make-u64.2=20=
(sb-simd::%two-arg-u64+=20(%u64.2-lane-extract=20a=200)=20=
(%u64.2-lane-extract=20a=201))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20(sb-simd::%two-arg-u64+=20(%u64.2-lane-extract=20b=200)=20=
(%u64.2-lane-extract=20b=201))))=0A+=0A+(define-fake-vop=20=
u64.2-horizontal+=20(a)=0A+=20=20(sb-simd::%two-arg-u64+=20=
(%u64.2-lane-extract=20a=200)=20(%u64.2-lane-extract=20a=201)))=0A+=0A=
+(define-fake-vop=20s64.2-pair-min=20(a=20b)=0A+=20=20(%make-s64.2=20=
(sb-simd::%two-arg-s64-min=20(%s64.2-lane-extract=20a=200)=20=
(%s64.2-lane-extract=20a=201))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20(sb-simd::%two-arg-s64-min=20(%s64.2-lane-extract=20b=200)=20=
(%s64.2-lane-extract=20b=201))))=0A+=0A+(define-fake-vop=20=
s64.2-horizontal-min=20(a)=0A+=20=20(sb-simd::%two-arg-s64-min=20=
(%s64.2-lane-extract=20a=200)=20(%s64.2-lane-extract=20a=201)))=0A+=0A=
+(define-fake-vop=20s64.2-pair-max=20(a=20b)=0A+=20=20(%make-s64.2=20=
(sb-simd::%two-arg-s64-max=20(%s64.2-lane-extract=20a=200)=20=
(%s64.2-lane-extract=20a=201))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20(sb-simd::%two-arg-s64-max=20(%s64.2-lane-extract=20b=200)=20=
(%s64.2-lane-extract=20b=201))))=0A+=0A+(define-fake-vop=20=
s64.2-horizontal-max=20(a)=0A+=20=20(sb-simd::%two-arg-s64-max=20=
(%s64.2-lane-extract=20a=200)=20(%s64.2-lane-extract=20a=201)))=0A+=0A=
+(define-fake-vop=20s64.2-pair+=20(a=20b)=0A+=20=20(%make-s64.2=20=
(sb-simd::%two-arg-s64+=20(%s64.2-lane-extract=20a=200)=20=
(%s64.2-lane-extract=20a=201))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20(sb-simd::%two-arg-s64+=20(%s64.2-lane-extract=20b=200)=20=
(%s64.2-lane-extract=20b=201))))=0A+=0A+(define-fake-vop=20=
s64.2-horizontal+=20(a)=0A+=20=20(sb-simd::%two-arg-s64+=20=
(%s64.2-lane-extract=20a=200)=20(%s64.2-lane-extract=20a=201)))=0Adiff=20=
--git=20a/contrib/sb-simd/code/define-instruction-vops.lisp=20=
b/contrib/sb-simd/code/define-instruction-vops.lisp=0Aindex=20=
f3944d0ec..b4530e70e=20100644=0A---=20=
a/contrib/sb-simd/code/define-instruction-vops.lisp=0A+++=20=
b/contrib/sb-simd/code/define-instruction-vops.lisp=0A@@=20-162,7=20=
+162,64=20@@=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20(t=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(move=20tmp=20,x)=0A=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20(inst=20,mnemonic=20,@prefix=20tmp=20,y=20,z=20,@rest=20=
,@suffix)=0A-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20(move=20,r=20tmp))))))))))))=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(move=20,r=20tmp))))))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
(:neon-rmw=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20(assert=20=
mnemonic)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20(let=20((x=20=
(first=20asyms))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20(y=20(second=20asyms))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20(rest=20(rest=20(rest=20asyms)))=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20(r=20(first=20rsyms)))=0A+=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20`(progn=0A+=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20,defknown=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20(define-vop=20(,vop)=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:translate=20,vop)=0A+=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:policy=20=
:fast-safe)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20(:args=20(,@(first=20args)=20:target=20,r)=20,@(loop=20for=20arg=20in=20=
(rest=20args)=20collect=20(append=20arg=20(list=20:to=20:save))))=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:temporary=20=
(:sc=20,(first=20(sb-simd-internals:value-record-scs=20(first=20=
argument-records))))=20tmp)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20(:info=20,@info)=0A+=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20(:results=20,@results)=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:arg-types=20,@arg-types)=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(:result-types=20,@result-types)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20(:generator=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20,cost=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20(cond=20((location=3D=20,x=20,r)=0A+=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20(inst=20,mnemonic=20,@prefix=20,r=20,y=20,@rest=20,@suffix))=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20((or=20(not=20(tn-p=20,y))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(not=20=
(location=3D=20,y=20,r)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20(inst=20mov=20,r=20,x=20:16b)=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20(inst=20,mnemonic=20,@prefix=20,r=20,y=20,@rest=20=
,@suffix))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20(t=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20(inst=20mov=20tmp=20,x=20:16b)=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20(inst=20,mnemonic=20,@prefix=20tmp=20,y=20,@rest=20=
,@suffix)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20(inst=20mov=20,r=20tmp=20:16b))))))))=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20(:neon-int-result=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20(assert=20mnemonic)=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20(let*=20((result-ty=20(sb-simd-internals:value-record-type=20=
(first=20result-records)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20(signedp=20(and=20(listp=20result-ty)=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20(eql=20(first=20result-ty)=20'signed-byte)))=0A+=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(width=20(ecase=20=
(sb-simd-internals:value-record-bits=20(first=20result-records))=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20(8=20:b)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20(16=20:h)=0A+=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(32=20=
:s)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20(64=20:d))))=0A+=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20`(progn=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20,defknown=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20(define-vop=20(,vop)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20(:translate=20,vop)=0A+=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20(:policy=20:fast-safe)=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:args=20,@args)=0A+=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:temporary=20(:sc=20=
,(first=20(sb-simd-internals:value-record-scs=20(first=20=
argument-records))))=20tmp)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20(:info=20,@info)=0A+=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20(:results=20,@results)=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:arg-types=20,@arg-types)=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(:result-types=20,@result-types)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20(:generator=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20,cost=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20(inst=20,mnemonic=20,@prefix=20tmp=20=
,@asyms=20,@suffix)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20,(cond=20((and=20signedp=20(not=20(eql=20width=20:d)))=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20`(inst=20smov=20,(first=20rsyms)=20tmp=200=20,width))=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20(t=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20`(inst=20umov=20,(first=20rsyms)=20=
tmp=200=20,width))))))))))))=0A=20=20=20=20=20=20=
(define-instruction-vops=20()=0A=20=20=20=20=20=20=20=20`(progn=0A=20=20=20=
=20=20=20=20=20=20=20=20,@(loop=20for=20instruction-record=0Adiff=20=
--git=20a/contrib/sb-simd/code/define-modify-macros.lisp=20=
b/contrib/sb-simd/code/define-modify-macros.lisp=0Aindex=20=
141a28532..0a97d39c5=20100644=0A---=20=
a/contrib/sb-simd/code/define-modify-macros.lisp=0A+++=20=
b/contrib/sb-simd/code/define-modify-macros.lisp=0A@@=20-140,3=20+140,34=20=
@@=0A=20(define-modify-macro=20s64.4-incf=20(&optional=20(num=201))=20=
two-arg-s64.4+)=0A=20(define-modify-macro=20s64.4-decf=20(&optional=20=
(num=201))=20two-arg-s64.4-)=0A=20=0A+(in-package=20#:sb-simd-advsimd)=0A=
+=0A+(define-modify-macro=20f32.4-incf=20(&optional=20(num=201f0))=20=
two-arg-f32.4+)=0A+(define-modify-macro=20f32.4-decf=20(&optional=20(num=20=
1f0))=20two-arg-f32.4-)=0A+=0A+(define-modify-macro=20f64.2-incf=20=
(&optional=20(num=201d0))=20two-arg-f64.2+)=0A+(define-modify-macro=20=
f64.2-decf=20(&optional=20(num=201d0))=20two-arg-f64.2-)=0A+=0A=
+(define-modify-macro=20u8.16-incf=20(&optional=20(num=201))=20=
two-arg-u8.16+)=0A+(define-modify-macro=20u8.16-decf=20(&optional=20(num=20=
1))=20two-arg-u8.16-)=0A+=0A+(define-modify-macro=20u16.8-incf=20=
(&optional=20(num=201))=20two-arg-u16.8+)=0A+(define-modify-macro=20=
u16.8-decf=20(&optional=20(num=201))=20two-arg-u16.8-)=0A+=0A=
+(define-modify-macro=20u32.4-incf=20(&optional=20(num=201))=20=
two-arg-u32.4+)=0A+(define-modify-macro=20u32.4-decf=20(&optional=20(num=20=
1))=20two-arg-u32.4-)=0A+=0A+(define-modify-macro=20u64.2-incf=20=
(&optional=20(num=201))=20two-arg-u64.2+)=0A+(define-modify-macro=20=
u64.2-decf=20(&optional=20(num=201))=20two-arg-u64.2-)=0A+=0A=
+(define-modify-macro=20s8.16-incf=20(&optional=20(num=201))=20=
two-arg-s8.16+)=0A+(define-modify-macro=20s8.16-decf=20(&optional=20(num=20=
1))=20two-arg-s8.16-)=0A+=0A+(define-modify-macro=20s16.8-incf=20=
(&optional=20(num=201))=20two-arg-s16.8+)=0A+(define-modify-macro=20=
s16.8-decf=20(&optional=20(num=201))=20two-arg-s16.8-)=0A+=0A=
+(define-modify-macro=20s32.4-incf=20(&optional=20(num=201))=20=
two-arg-s32.4+)=0A+(define-modify-macro=20s32.4-decf=20(&optional=20(num=20=
1))=20two-arg-s32.4-)=0A+=0A+(define-modify-macro=20s64.2-incf=20=
(&optional=20(num=201))=20two-arg-s64.2+)=0A+(define-modify-macro=20=
s64.2-decf=20(&optional=20(num=201))=20two-arg-s64.2-)=0Adiff=20--git=20=
a/contrib/sb-simd/code/define-simd-casts.lisp=20=
b/contrib/sb-simd/code/define-simd-casts.lisp=0Aindex=20=
acb1d9b49..d7a899ab7=20100644=0A---=20=
a/contrib/sb-simd/code/define-simd-casts.lisp=0A+++=20=
b/contrib/sb-simd/code/define-simd-casts.lisp=0A@@=20-16,6=20+16,7=20@@=0A=
=20(define-inline=20sb-simd-sse:p128=20(x)=20(the=20sb-simd-sse:p128=20=
x))=0A=20(define-inline=20sb-simd-avx:p128=20(x)=20(the=20=
sb-simd-avx:p128=20x))=0A=20(define-inline=20sb-simd-avx:p256=20(x)=20=
(the=20sb-simd-avx:p256=20x))=0A+(define-inline=20sb-simd-advsimd:p128=20=
(x)=20(the=20sb-simd-advsimd:p128=20x))=0A=20=0A=20(macrolet=0A=20=20=20=20=
=20(;;=20We=20cannot=20call=20known=20functions=20directly=20in=20the=20=
definition=20of=20a=0Adiff=20--git=20=
a/contrib/sb-simd/code/define-vref-vops.lisp=20=
b/contrib/sb-simd/code/define-vref-vops.lisp=0Aindex=20=
3a93fd41b..3f143b722=20100644=0A---=20=
a/contrib/sb-simd/code/define-vref-vops.lisp=0A+++=20=
b/contrib/sb-simd/code/define-vref-vops.lisp=0A@@=20-96,3=20+96,75=20@@=0A=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
#'sb-simd-internals:vref-record-p)=0A=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20collect=20`(define-vref-vop=20=
,(sb-simd-internals:vref-record-name=20vref-record))))))=0A=20=20=20=
(define-vref-vops))=0A+=0A+#+arm64=0A+(macrolet=0A+=20=20=20=20=
((define-vref-vop=20(vref-record-name)=0A+=20=20=20=20=20=20=20=
(with-accessors=20((name=20sb-simd-internals:vref-record-name)=0A+=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(vop=20=
sb-simd-internals:vref-record-vop)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20(vop-c=20=
sb-simd-internals:vref-record-vop-c)=0A+=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20(mnemonic=20=
sb-simd-internals:vref-record-mnemonic)=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20(value-record=20=
sb-simd-internals:vref-record-value-record)=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(vector-record=20=
sb-simd-internals:vref-record-vector-record)=0A+=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(store=20=
sb-simd-internals:store-record-p))=0A+=20=20=20=20=20=20=20=20=20=20=20=
(sb-simd-internals:find-function-record=20vref-record-name)=0A+=20=20=20=20=
=20=20=20=20=20(let*=20((vector-type=20=
(sb-simd-internals:value-record-type=20vector-record))=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20(vector-primitive-type=20=
(sb-simd-internals:value-record-primitive-type=20vector-record))=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20(value-scs=20=
(sb-simd-internals:value-record-scs=20value-record))=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20(value-type=20=
(sb-simd-internals:value-record-type=20value-record))=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20(value-primitive-type=20=
(sb-simd-internals:value-record-primitive-type=20value-record))=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20(scalar-record=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20(etypecase=20value-record=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(sb-simd-internals:simd-record=20=
(sb-simd-internals:simd-record-scalar-record=20value-record))=0A+=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(sb-simd-internals:value-record=20value-record)))=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20(bits-per-element=20=
(sb-simd-internals:value-record-bits=20scalar-record))=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20(bytes-per-element=20(ceiling=20=
bits-per-element=208))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(shift=20(1-=20(integer-length=20bytes-per-element))))=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20`(progn=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20(defknown=20,vop=20(,@(when=20store=20`(,value-type))=20=
,vector-type=20index=20(integer=200=200))=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20(values=20,value-type=20&optional)=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(always-translatable)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20:overwrite-fndb-silently=20t)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20(define-vop=20(,vop)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20(:translate=20,vop)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20(:policy=20:fast-safe)=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20(:args=20,@(when=20store=20`((value=20:scs=20=
(,@value-scs=20zero))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20(object=20:scs=20(descriptor-reg))=0A+=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(index=20=
:scs=20(any-reg=20unsigned-reg=20signed-reg=20immediate)))=0A+=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:arg-types=20,@(when=20store=20=
`(,value-primitive-type))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20,vector-primitive-type=0A+=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20tagged-num=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:constant=20(integer=200=20=
0)))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(:info=20=
addend)=20;=20always=20zero=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20,@(unless=20store=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20`((:results=20(value=20:scs=20,value-scs))=0A+=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(:result-types=20,value-primitive-type)))=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20(:generator=202=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20(let=20((addend=20addend))=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(declare=20(ignore=20=
addend))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20(sc-case=20index=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20(immediate=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20(inst=20,(if=20store=20'str=20'ldr)=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20value=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(@=20object=20=
(load-store-offset=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(+=20(ash=20(tn-value=20index)=20,shift)=0A+=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20(-=20(ash=20vector-data-offset=20=
word-shift)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20other-pointer-lowtag))))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20(t=0A+=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20(let=20((shift=20,shift))=0A+=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20(when=20(sc-is=20index=20any-reg)=0A+=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(decf=20shift=20=
n-fixnum-tag-bits))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20(inst=20add=20tmp-tn=20object=20(if=20=
(minusp=20shift)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20(asr=20index=20(-=20shift))=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20(lsl=20index=20shift))))=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20(inst=20,(if=20store=20'str=20=
'ldr)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20value=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20(@=20tmp-tn=20=
(load-store-offset=20(-=20(ash=20vector-data-offset=20word-shift)=0A+=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20other-pointer-lowtag)))))))))))))=0A+=20=
=20=20=20=20(define-vref-vops=20()=0A+=20=20=20=20=20=20=20`(progn=0A+=20=
=20=20=20=20=20=20=20=20=20,@(loop=20for=20vref-record=0A+=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20in=20=
(sb-simd-internals:filter-available-function-records=0A+=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
#'sb-simd-internals:vref-record-p)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20collect=20`(define-vref-vop=20=
,(sb-simd-internals:vref-record-name=20vref-record))))))=0A+=20=20=
(define-vref-vops))=0Adiff=20--git=20=
a/contrib/sb-simd/code/instruction-sets/advsimd.lisp=20=
b/contrib/sb-simd/code/instruction-sets/advsimd.lisp=0Anew=20file=20mode=20=
100644=0Aindex=20000000000..9b8e9a118=0A---=20/dev/null=0A+++=20=
b/contrib/sb-simd/code/instruction-sets/advsimd.lisp=0A@@=20-0,0=20=
+1,764=20@@=0A+(in-package=20#:sb-simd-advsimd)=0A+=0A=
+(define-instruction-set=20:advsimd=0A+=20=20(:test=20=
(advsimd-supported-p))=0A+=20=20(:include=20:arm64)=0A+=20=20=
(:simd-packs=0A+=20=20=20(p128=20=20nil=20128=20#:simd-pack=20=
(#:int-neon-reg=20#:double-neon-reg=20#:single-neon-reg))=0A+=20=20=20=
(f32.4=20f32=20128=20#:simd-pack-single=20(#:single-neon-reg))=0A+=20=20=20=
(f64.2=20f64=20128=20#:simd-pack-double=20(#:double-neon-reg))=0A+=20=20=20=
(u8.16=20u8=20=20128=20#:simd-pack-ub8=20(#:int-neon-reg))=0A+=20=20=20=
(u16.8=20u16=20128=20#:simd-pack-ub16=20(#:int-neon-reg))=0A+=20=20=20=
(u32.4=20u32=20128=20#:simd-pack-ub32=20(#:int-neon-reg))=0A+=20=20=20=
(u64.2=20u64=20128=20#:simd-pack-ub64=20(#:int-neon-reg))=0A+=20=20=20=
(s8.16=20s8=20=20128=20#:simd-pack-sb8=20(#:int-neon-reg))=0A+=20=20=20=
(s16.8=20s16=20128=20#:simd-pack-sb16=20(#:int-neon-reg))=0A+=20=20=20=
(s32.4=20s32=20128=20#:simd-pack-sb32=20(#:int-neon-reg))=0A+=20=20=20=
(s64.2=20s64=20128=20#:simd-pack-sb64=20(#:int-neon-reg)))=0A+=20=20=
(:simd-casts=0A+=20=20=20(f32.4=20f32.4-broadcast)=0A+=20=20=20(f64.2=20=
f64.2-broadcast)=0A+=20=20=20(u8.16=20u8.16-broadcast)=0A+=20=20=20=
(u16.8=20u16.8-broadcast)=0A+=20=20=20(u32.4=20u32.4-broadcast)=0A+=20=20=
=20(u64.2=20u64.2-broadcast)=0A+=20=20=20(s8.16=20s8.16-broadcast)=0A+=20=
=20=20(s16.8=20s16.8-broadcast)=0A+=20=20=20(s32.4=20s32.4-broadcast)=0A=
+=20=20=20(s64.2=20s64.2-broadcast))=0A+=20=20(:reinterpret-casts=0A+=20=20=
=20(f32!=20=20=20f32!-from-p128)=0A+=20=20=20(f64!=20=20=20=
f64!-from-p128)=0A+=20=20=20(u8!=20=20=20=20u8!-from-p128)=0A+=20=20=20=
(u16!=20=20=20u16!-from-p128)=0A+=20=20=20(u32!=20=20=20u32!-from-p128)=0A=
+=20=20=20(u64!=20=20=20u64!-from-p128)=0A+=20=20=20(s8!=20=20=20=20=
s8!-from-p128)=0A+=20=20=20(s16!=20=20=20s16!-from-p128)=0A+=20=20=20=
(s32!=20=20=20s32!-from-p128)=0A+=20=20=20(s64!=20=20=20s64!-from-p128)=0A=
+=20=20=20(f32.4!=20f32.4!-from-f32=20f32.4!-from-p128)=0A+=20=20=20=
(f64.2!=20f64.2!-from-f64=20f64.2!-from-p128)=0A+=20=20=20(u8.16!=20=
u8.16!-from-u8=20=20u8.16!-from-p128)=0A+=20=20=20(u16.8!=20=
u16.8!-from-u16=20u16.8!-from-p128)=0A+=20=20=20(u32.4!=20=
u32.4!-from-u32=20u32.4!-from-p128)=0A+=20=20=20(u64.2!=20=
u64.2!-from-u64=20u64.2!-from-p128)=0A+=20=20=20(s8.16!=20s8.16!-from-s8=20=
=20s8.16!-from-p128)=0A+=20=20=20(s16.8!=20s16.8!-from-s16=20=
s16.8!-from-p128)=0A+=20=20=20(s32.4!=20s32.4!-from-s32=20=
s32.4!-from-p128)=0A+=20=20=20(s64.2!=20s64.2!-from-s64=20=
s64.2!-from-p128))=0A+=20=20(:instructions=0A+=20=20=20;;=20f32=0A+=20=20=
=20(f32!-from-p128=20=20=20=20nil=20=20=20=20=20=20=20=20(f32)=20(p128)=20=
=20=20=20=20=20=20=20=20=20:cost=201=20:encoding=20:custom=20=
:always-translatable=20nil)=0A+=20=20=20;;=20f32.4=0A+=20=20=20=
(f32.4!-from-f32=20=20=20nil=20=20=20=20=20=20=20=20(f32.4)=20(f32)=20=20=
=20=20=20=20=20=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(f32.4!-from-p128=20=20#:mov=20=20=20=20=20=20(f32.4)=20(p128)=20=20=20=20=
=20=20=20=20:cost=201=20:encoding=20:move=20:always-translatable=20nil=20=
:suffix=20'(:16b))=0A+=20=20=20(f32.4-from-f64.2=20=20#:fcvtn=20=20=20=20=
(f32.4)=20(f64.2)=20=20=20=20=20=20=20:cost=201)=0A+=20=20=20=
(f32.4-from-f64.2-hi=20#:fcvtn2=20(f32.4)=20(f32.4=20f64.2)=20:cost=201=20=
:encoding=20:neon-rmw)=0A+=20=20=20(f32.4-from-s32.4=20=20#:scvtf=20=20=20=
=20(f32.4)=20(s32.4)=20=20=20=20=20=20=20:cost=205=20:suffix=20'(:4s))=0A=
+=20=20=20(f32.4-from-u32.4=20=20#:ucvtf=20=20=20=20(f32.4)=20(u32.4)=20=20=
=20=20=20=20=20:cost=205=20:suffix=20'(:4s))=0A+=20=20=20(make-f32.4=20=20=
=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(f32.4)=20(f32=20f32=20f32=20=
f32)=20:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20(f32.4-values=20=20=
=20=20=20=20nil=20=20=20=20=20=20=20=20(f32=20f32=20f32=20f32)=20(f32.4)=20=
:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20(f32.4-broadcast=20=20=20=
#:dup=20=20=20=20=20=20(f32.4)=20(f32)=20=20=20=20=20=20=20=20=20:cost=20=
1=20:suffix=20'(:4s))=0A+=20=20=20(two-arg-f32.4-and=20#:and=20=20=20=20=20=
=20(f32.4)=20(f32.4=20f32.4)=20:cost=201=20:associative=20t=20:suffix=20=
'(:16b))=0A+=20=20=20(two-arg-f32.4-or=20=20#:orr=20=20=20=20=20=20=
(f32.4)=20(f32.4=20f32.4)=20:cost=201=20:associative=20t=20:suffix=20=
'(:16b))=0A+=20=20=20(two-arg-f32.4-xor=20#:eor=20=20=20=20=20=20(f32.4)=20=
(f32.4=20f32.4)=20:cost=201=20:associative=20t=20:suffix=20'(:16b))=0A+=20=
=20=20(two-arg-f32.4-max=20#:fmax=20=20=20=20=20(f32.4)=20(f32.4=20=
f32.4)=20:cost=203=20:associative=20t=20:suffix=20'(:4s))=0A+=20=20=20=
(two-arg-f32.4-min=20#:fmin=20=20=20=20=20(f32.4)=20(f32.4=20f32.4)=20=
:cost=203=20:associative=20t=20:suffix=20'(:4s))=0A+=20=20=20=
(two-arg-f32.4+=20=20=20=20#:fadd=20=20=20=20=20(f32.4)=20(f32.4=20=
f32.4)=20:cost=202=20:associative=20t=20:suffix=20'(:4s))=0A+=20=20=20=
(two-arg-f32.4-=20=20=20=20#:fsub=20=20=20=20=20(f32.4)=20(f32.4=20=
f32.4)=20:cost=202=20:suffix=20'(:4s))=0A+=20=20=20(two-arg-f32.4*=20=20=20=
=20#:fmul=20=20=20=20=20(f32.4)=20(f32.4=20f32.4)=20:cost=202=20=
:associative=20t=20:suffix=20'(:4s))=0A+=20=20=20(two-arg-f32.4/=20=20=20=
=20#:fdiv=20=20=20=20=20(f32.4)=20(f32.4=20f32.4)=20:cost=208=20:suffix=20=
'(:4s))=0A+=20=20=20(two-arg-f32.4=3D=20=20=20=20#:fcmeq=20=20=20=20=
(u32.4)=20(f32.4=20f32.4)=20:cost=204=20:associative=20t=20:suffix=20=
'(:4s))=0A+=20=20=20(two-arg-f32.4/=3D=20=20=20nil=20=20=20=20=20=20=20=20=
(u32.4)=20(f32.4=20f32.4)=20:cost=204=20:encoding=20:fake-vop)=0A+=20=20=20=
(two-arg-f32.4<=20=20=20=20nil=20=20=20=20=20=20=20=20(u32.4)=20(f32.4=20=
f32.4)=20:cost=204=20:encoding=20:fake-vop)=0A+=20=20=20(two-arg-f32.4<=3D=
=20=20=20nil=20=20=20=20=20=20=20=20(u32.4)=20(f32.4=20f32.4)=20:cost=20=
4=20:encoding=20:fake-vop)=0A+=20=20=20(two-arg-f32.4>=20=20=20=20=
#:fcmgt=20=20=20=20(u32.4)=20(f32.4=20f32.4)=20:cost=204=20:suffix=20=
'(:4s))=0A+=20=20=20(two-arg-f32.4>=3D=20=20=20#:fcmge=20=20=20=20=
(u32.4)=20(f32.4=20f32.4)=20:cost=204=20:suffix=20'(:4s))=0A+=20=20=20=
(f32.4-pair-min=20=20=20=20#:fminp=20=20=20=20(f32.4)=20(f32.4=20f32.4)=20=
:cost=202=20:suffix=20'(:4s)=20:associative=20t)=0A+=20=20=20=
(f32.4-horizontal-min=20#:fminv=20(f32)=20(f32.4)=20=20=20=20=20=20=20=20=
=20:cost=202=20:associative=20t)=0A+=20=20=20(f32.4-pair-max=20=20=20=20=
#:fmaxp=20=20=20=20(f32.4)=20(f32.4=20f32.4)=20:cost=202=20:suffix=20=
'(:4s)=20:associative=20t)=0A+=20=20=20(f32.4-horizontal-max=20#:fmaxv=20=
(f32)=20(f32.4)=20=20=20=20=20=20=20=20=20:cost=202=20:associative=20t)=0A=
+=20=20=20(f32.4-pair+=20=20=20=20=20=20=20#:faddp=20=20=20=20(f32.4)=20=
(f32.4=20f32.4)=20:cost=202=20:suffix=20'(:4s)=20:associative=20t)=0A+=20=
=20=20(f32.4-horizontal+=20nil=20=20=20=20=20=20=20=20(f32)=20(f32.4)=20=20=
=20=20=20=20=20=20=20:cost=202=20:encoding=20:fake-vop)=0A+=20=20=20=
(f32.4-andc1=20=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(f32.4)=20=
(f32.4=20f32.4)=20:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20=
(f32.4-andc2=20=20=20=20=20=20=20#:bic=20=20=20=20=20=20(f32.4)=20(f32.4=20=
f32.4)=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20(f32.4-not=20=20=20=20=
=20=20=20=20=20#:not=20=20=20=20=20=20(f32.4)=20(f32.4)=20=20=20=20=20=20=
=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20(f32.4-sqrt=20=20=20=20=20=20=
=20=20#:fsqrt=20=20=20=20(f32.4)=20(f32.4)=20=20=20=20=20=20=20:cost=20=
15=20:suffix=20'(:4s))=0A+=20=20=20(f32.4-bit-select=20=20#:bsl=20=20=20=20=
=20=20(f32.4)=20(u32.4=20f32.4=20f32.4)=20:cost=201=20:encoding=20=
:neon-rmw=20:suffix=20'(:16b))=0A+=20=20=20(f32.4-lane-extract=20nil=20=20=
=20=20=20=20=20(f32)=20(f32.4=20imm2)=20:cost=201=20:encoding=20:custom)=0A=
+=20=20=20(f32.4-lane-insert=20nil=20=20=20=20=20=20=20=20(f32.4)=20=
(f32.4=20f32=20imm2)=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(f32.4-dup=20=20=20=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(f32.4)=20=
(f32.4=20imm2)=20:cost=201=20:encoding=20:custom)=0A+=20=20=20(f32.4-ins=20=
=20=20=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(f32.4)=20(f32.4=20=
f32.4=20imm2=20imm2)=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(f32.4-transpose-even=20#:trn1=20=20(f32.4)=20(f32.4=20f32.4)=20:cost=20=
1=20:suffix=20'(:4s))=0A+=20=20=20(f32.4-transpose-odd=20#:trn2=20=20=20=
(f32.4)=20(f32.4=20f32.4)=20:cost=201=20:suffix=20'(:4s))=0A+=20=20=20=
(f32.4-unzip-even=20=20#:uzp1=20=20=20=20=20(f32.4)=20(f32.4=20f32.4)=20=
:cost=201=20:suffix=20'(:4s))=0A+=20=20=20(f32.4-unzip-odd=20=20=20=
#:uzp2=20=20=20=20=20(f32.4)=20(f32.4=20f32.4)=20:cost=201=20:suffix=20=
'(:4s))=0A+=20=20=20(f32.4-zip-even=20=20=20=20#:zip1=20=20=20=20=20=
(f32.4)=20(f32.4=20f32.4)=20:cost=201=20:suffix=20'(:4s))=0A+=20=20=20=
(f32.4-zip-odd=20=20=20=20=20#:zip2=20=20=20=20=20(f32.4)=20(f32.4=20=
f32.4)=20:cost=201=20:suffix=20'(:4s))=0A+=20=20=20;;=20f64=0A+=20=20=20=
(f64!-from-p128=20=20=20=20nil=20=20=20=20=20=20=20=20(f64)=20(p128)=20=20=
=20=20=20=20=20=20=20=20:cost=201=20:encoding=20:custom=20=
:always-translatable=20nil)=0A+=20=20=20;;=20f64.2=0A+=20=20=20=
(f64.2!-from-f64=20=20=20nil=20=20=20=20=20=20=20=20(f64.2)=20(f64)=20=20=
=20=20=20=20=20=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(f64.2!-from-p128=20=20#:mov=20=20=20=20=20=20(f64.2)=20(p128)=20=20=20=20=
=20=20=20=20:cost=201=20:encoding=20:move=20:always-translatable=20nil=20=
:suffix=20'(:16b))=0A+=20=20=20(f64.2-from-f32.4=20=20#:fcvtl=20=20=20=20=
(f64.2)=20(f32.4)=20=20=20=20=20=20=20:cost=201)=0A+=20=20=20=
(f64.2-from-f32.4-hi=20#:fcvtl2=20(f64.2)=20(f32.4)=20=20=20=20=20=20=20=
:cost=201)=0A+=20=20=20(f64.2-from-s64.2=20=20#:scvtf=20=20=20=20(f64.2)=20=
(s64.2)=20=20=20=20=20=20=20:cost=205=20:suffix=20'(:2d))=0A+=20=20=20=
(f64.2-from-u64.2=20=20#:ucvtf=20=20=20=20(f64.2)=20(u64.2)=20=20=20=20=20=
=20=20:cost=205=20:suffix=20'(:2d))=0A+=20=20=20(make-f64.2=20=20=20=20=20=
=20=20=20nil=20=20=20=20=20=20=20=20(f64.2)=20(f64=20f64)=20=20=20=20=20=
:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20(f64.2-values=20=20=20=20=20=
=20nil=20=20=20=20=20=20=20=20(f64=20f64)=20(f64.2)=20=20=20=20=20:cost=20=
1=20:encoding=20:fake-vop)=0A+=20=20=20(f64.2-broadcast=20=20=20#:dup=20=20=
=20=20=20=20(f64.2)=20(f64)=20=20=20=20=20=20=20=20=20:cost=201=20=
:suffix=20'(:2d))=0A+=20=20=20(two-arg-f64.2-and=20#:and=20=20=20=20=20=20=
(f64.2)=20(f64.2=20f64.2)=20:cost=201=20:associative=20t=20:suffix=20=
'(:16b))=0A+=20=20=20(two-arg-f64.2-or=20=20#:orr=20=20=20=20=20=20=
(f64.2)=20(f64.2=20f64.2)=20:cost=201=20:associative=20t=20:suffix=20=
'(:16b))=0A+=20=20=20(two-arg-f64.2-xor=20#:eor=20=20=20=20=20=20(f64.2)=20=
(f64.2=20f64.2)=20:cost=201=20:associative=20t=20:suffix=20'(:16b))=0A+=20=
=20=20(two-arg-f64.2-max=20#:fmax=20=20=20=20=20(f64.2)=20(f64.2=20=
f64.2)=20:cost=203=20:associative=20t=20:suffix=20'(:2d))=0A+=20=20=20=
(two-arg-f64.2-min=20#:fmin=20=20=20=20=20(f64.2)=20(f64.2=20f64.2)=20=
:cost=203=20:associative=20t=20:suffix=20'(:2d))=0A+=20=20=20=
(two-arg-f64.2+=20=20=20=20#:fadd=20=20=20=20=20(f64.2)=20(f64.2=20=
f64.2)=20:cost=202=20:associative=20t=20:suffix=20'(:2d))=0A+=20=20=20=
(two-arg-f64.2-=20=20=20=20#:fsub=20=20=20=20=20(f64.2)=20(f64.2=20=
f64.2)=20:cost=202=20:suffix=20'(:2d))=0A+=20=20=20(two-arg-f64.2*=20=20=20=
=20#:fmul=20=20=20=20=20(f64.2)=20(f64.2=20f64.2)=20:cost=202=20=
:associative=20t=20:suffix=20'(:2d))=0A+=20=20=20(two-arg-f64.2/=20=20=20=
=20#:fdiv=20=20=20=20=20(f64.2)=20(f64.2=20f64.2)=20:cost=208=20:suffix=20=
'(:2d))=0A+=20=20=20(two-arg-f64.2=3D=20=20=20=20#:fcmeq=20=20=20=20=
(u64.2)=20(f64.2=20f64.2)=20:cost=204=20:associative=20t=20:suffix=20=
'(:2d))=0A+=20=20=20(two-arg-f64.2/=3D=20=20=20nil=20=20=20=20=20=20=20=20=
(u64.2)=20(f64.2=20f64.2)=20:cost=204=20:encoding=20:fake-vop)=0A+=20=20=20=
(two-arg-f64.2<=20=20=20=20nil=20=20=20=20=20=20=20=20(u64.2)=20(f64.2=20=
f64.2)=20:cost=204=20:encoding=20:fake-vop)=0A+=20=20=20(two-arg-f64.2<=3D=
=20=20=20nil=20=20=20=20=20=20=20=20(u64.2)=20(f64.2=20f64.2)=20:cost=20=
4=20:encoding=20:fake-vop)=0A+=20=20=20(two-arg-f64.2>=20=20=20=20=
#:fcmgt=20=20=20=20(u64.2)=20(f64.2=20f64.2)=20:cost=204=20:suffix=20=
'(:2d))=0A+=20=20=20(two-arg-f64.2>=3D=20=20=20#:fcmge=20=20=20=20=
(u64.2)=20(f64.2=20f64.2)=20:cost=204=20:suffix=20'(:2d))=0A+=20=20=20=
(f64.2-pair-min=20=20=20=20#:fminp=20=20=20=20(f64.2)=20(f64.2=20f64.2)=20=
:cost=202=20:suffix=20'(:2d)=20:associative=20t)=0A+=20=20=20=
(f64.2-horizontal-min=20#:fminp=20(f64)=20(f64.2)=20=20=20=20=20=20=20=20=
=20:cost=202=20:suffix=20'(:2d))=0A+=20=20=20(f64.2-pair-max=20=20=20=20=
#:fmaxp=20=20=20=20(f64.2)=20(f64.2=20f64.2)=20:cost=202=20:suffix=20=
'(:2d)=20:associative=20t)=0A+=20=20=20(f64.2-horizontal-max=20#:fmaxp=20=
(f64)=20(f64.2)=20=20=20=20=20=20=20=20=20:cost=202=20:suffix=20'(:2d))=0A=
+=20=20=20(f64.2-pair+=20=20=20=20=20=20=20#:faddp=20=20=20=20(f64.2)=20=
(f64.2=20f64.2)=20:cost=202=20:suffix=20'(:2d)=20:associative=20t)=0A+=20=
=20=20(f64.2-horizontal+=20#:faddp=20=20=20=20(f64)=20(f64.2)=20=20=20=20=
=20=20=20=20=20:cost=202=20:suffix=20'(:2d))=0A+=20=20=20(f64.2-andc1=20=20=
=20=20=20=20=20nil=20=20=20=20=20=20=20=20(f64.2)=20(f64.2=20f64.2)=20=
:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20(f64.2-andc2=20=20=20=20=20=
=20=20#:bic=20=20=20=20=20=20(f64.2)=20(f64.2=20f64.2)=20:cost=201=20=
:suffix=20'(:16b))=0A+=20=20=20(f64.2-not=20=20=20=20=20=20=20=20=20=
#:not=20=20=20=20=20=20(f64.2)=20(f64.2)=20=20=20=20=20=20=20:cost=201=20=
:suffix=20'(:16b))=0A+=20=20=20(f64.2-sqrt=20=20=20=20=20=20=20=20=
#:fsqrt=20=20=20=20(f64.2)=20(f64.2)=20=20=20=20=20=20=20:cost=2015=20=
:suffix=20'(:2d))=0A+=20=20=20(f64.2-bit-select=20=20#:bsl=20=20=20=20=20=
=20(f64.2)=20(u64.2=20f64.2=20f64.2)=20:cost=201=20:encoding=20:neon-rmw=20=
:suffix=20'(:16b))=0A+=20=20=20(f64.2-lane-extract=20nil=20=20=20=20=20=20=
=20(f64)=20(f64.2=20imm1)=20=20=20=20:cost=201=20:encoding=20:custom)=0A=
+=20=20=20(f64.2-lane-insert=20nil=20=20=20=20=20=20=20=20(f64.2)=20=
(f64.2=20f64=20imm1)=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(f64.2-dup=20=20=20=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(f64.2)=20=
(f64.2=20imm1)=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(f64.2-ins=20=20=20=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(f64.2)=20=
(f64.2=20f64.2=20imm1=20imm1)=20:cost=201=20:encoding=20:custom)=0A+=20=20=
=20(f64.2-transpose-even=20#:trn1=20=20(f64.2)=20(f64.2=20f64.2)=20:cost=20=
1=20:suffix=20'(:2d))=0A+=20=20=20(f64.2-transpose-odd=20#:trn2=20=20=20=
(f64.2)=20(f64.2=20f64.2)=20:cost=201=20:suffix=20'(:2d))=0A+=20=20=20=
(f64.2-unzip-even=20=20#:uzp1=20=20=20=20=20(f64.2)=20(f64.2=20f64.2)=20=
:cost=201=20:suffix=20'(:2d))=0A+=20=20=20(f64.2-unzip-odd=20=20=20=
#:uzp2=20=20=20=20=20(f64.2)=20(f64.2=20f64.2)=20:cost=201=20:suffix=20=
'(:2d))=0A+=20=20=20(f64.2-zip-even=20=20=20=20#:zip1=20=20=20=20=20=
(f64.2)=20(f64.2=20f64.2)=20:cost=201=20:suffix=20'(:2d))=0A+=20=20=20=
(f64.2-zip-odd=20=20=20=20=20#:zip2=20=20=20=20=20(f64.2)=20(f64.2=20=
f64.2)=20:cost=201=20:suffix=20'(:2d))=0A+=20=20=20;;=20u8=0A+=20=20=20=
(u8!-from-p128=20=20=20=20=20#:umov=20=20=20=20=20(u8)=20(p128)=20=20=20=20=
=20=20=20=20=20=20=20:cost=201=20:encoding=20:move=20:suffix=20'(0=20:b)=20=
:always-translatable=20nil)=0A+=20=20=20;;=20u8.16=0A+=20=20=20=
(u8.16!-from-u8=20=20=20=20nil=20=20=20=20=20=20=20=20(u8.16)=20(u8)=20=20=
=20=20=20=20=20=20=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(u8.16!-from-p128=20=20#:mov=20=20=20=20=20=20(u8.16)=20(p128)=20=20=20=20=
=20=20=20=20:cost=201=20:encoding=20:move=20:always-translatable=20nil=20=
:suffix=20'(:16b))=0A+=20=20=20(u8.16-from-u16.8=20=20#:xtn=20=20=20=20=20=
=20(u8.16)=20(u16.8)=20=20=20=20=20=20=20:cost=201=20:suffix=20'(:8b))=0A=
+=20=20=20(u8.16-from-u16.8-hi=20#:xtn2=20=20=20(u8.16)=20(u8.16=20=
u16.8)=20:cost=201=20:encoding=20:neon-rmw=20:suffix=20'(:16b))=0A+=20=20=
=20(u8.16-from-u16.8-saturating=20#:uqxtn=20(u8.16)=20(u16.8)=20=20:cost=20=
1=20:suffix=20'(:8b))=0A+=20=20=20(u8.16-from-u16.8-saturating-hi=20=
#:uqxtn2=20(u8.16)=20(u8.16=20u16.8)=20:cost=201=20:encoding=20:neon-rmw=20=
:suffix=20'(:16b))=0A+=20=20=20(make-u8.16=20=20=20=20=20=20=20=20nil=20=20=
=20=20=20=20=20=20(u8.16)=20(u8=20u8=20u8=20u8=20u8=20u8=20u8=20u8=20u8=20=
u8=20u8=20u8=20u8=20u8=20u8=20u8)=20:cost=201=20:encoding=20:fake-vop)=0A=
+=20=20=20(u8.16-values=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(u8=20=
u8=20u8=20u8=20u8=20u8=20u8=20u8=20u8=20u8=20u8=20u8=20u8=20u8=20u8=20=
u8)=20(u8.16)=20:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20=
(u8.16-broadcast=20=20=20#:dup=20=20=20=20=20=20(u8.16)=20(u8)=20=20=20=20=
=20=20=20=20=20=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20=
(two-arg-u8.16-and=20#:and=20=20=20=20=20=20(u8.16)=20(u8.16=20u8.16)=20=
:cost=201=20:associative=20t=20:suffix=20'(:16b))=0A+=20=20=20=
(two-arg-u8.16-or=20=20#:orr=20=20=20=20=20=20(u8.16)=20(u8.16=20u8.16)=20=
:cost=201=20:associative=20t=20:suffix=20'(:16b))=0A+=20=20=20=
(two-arg-u8.16-xor=20#:eor=20=20=20=20=20=20(u8.16)=20(u8.16=20u8.16)=20=
:cost=201=20:associative=20t=20:suffix=20'(:16b))=0A+=20=20=20=
(two-arg-u8.16-max=20#:umax=20=20=20=20=20(u8.16)=20(u8.16=20u8.16)=20=
:cost=203=20:associative=20t=20:suffix=20'(:16b))=0A+=20=20=20=
(two-arg-u8.16-min=20#:umin=20=20=20=20=20(u8.16)=20(u8.16=20u8.16)=20=
:cost=203=20:associative=20t=20:suffix=20'(:16b))=0A+=20=20=20=
(u8.16-andc1=20=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(u8.16)=20=
(u8.16=20u8.16)=20:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20=
(u8.16-andc2=20=20=20=20=20=20=20#:bic=20=20=20=20=20=20(u8.16)=20(u8.16=20=
u8.16)=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20(u8.16-not=20=20=20=20=
=20=20=20=20=20#:not=20=20=20=20=20=20(u8.16)=20(u8.16)=20=20=20=20=20=20=
=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20(two-arg-u8.16+=20=20=20=20=
#:add=20=20=20=20=20=20(u8.16)=20(u8.16=20u8.16)=20:cost=202=20:suffix=20=
'(:16b)=20:associative=20t)=0A+=20=20=20(two-arg-u8.16+-saturating=20=
#:uqadd=20(u8.16)=20(u8.16=20u8.16)=20:cost=202=20:suffix=20'(:16b)=20=
:associative=20t)=0A+=20=20=20(two-arg-u8.16-=20=20=20=20#:sub=20=20=20=20=
=20=20(u8.16)=20(u8.16=20u8.16)=20:cost=202=20:suffix=20'(:16b))=0A+=20=20=
=20(two-arg-u8.16--saturating=20#:uqsub=20(u8.16)=20(u8.16=20u8.16)=20=
:cost=202=20:suffix=20'(:16b)=20:associative=20t)=0A+=20=20=20=
(two-arg-u8.16*=20=20=20=20#:mul=20=20=20=20=20=20(u8.16)=20(u8.16=20=
u8.16)=20:cost=202=20:suffix=20'(:16b)=20:associative=20t)=0A+=20=20=20=
(u8.16*-long=20=20=20=20=20=20=20#:umull=20=20=20=20(u16.8)=20(u8.16=20=
u8.16)=20:cost=202=20:suffix=20'(:8b)=20:associative=20t)=0A+=20=20=20=
(u8.16*-long-hi=20=20=20=20#:umull2=20=20=20(u16.8)=20(u8.16=20u8.16)=20=
:cost=202=20:suffix=20'(:16b)=20:associative=20t)=0A+=20=20=20=
(two-arg-u8.16=3D=20=20=20=20#:cmeq=20=20=20=20=20(u8.16)=20(u8.16=20=
u8.16)=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20(two-arg-u8.16/=3D=20=
=20=20nil=20=20=20=20=20=20=20=20(u8.16)=20(u8.16=20u8.16)=20:cost=202=20=
:associative=20t=20:encoding=20:fake-vop)=0A+=20=20=20(two-arg-u8.16>=20=20=
=20=20#:cmhi=20=20=20=20=20(u8.16)=20(u8.16=20u8.16)=20:cost=201=20=
:suffix=20'(:16b))=0A+=20=20=20(two-arg-u8.16<=20=20=20=20nil=20=20=20=20=
=20=20=20=20(u8.16)=20(u8.16=20u8.16)=20:cost=201=20:encoding=20=
:fake-vop)=0A+=20=20=20(two-arg-u8.16>=3D=20=20=20#:cmhs=20=20=20=20=20=
(u8.16)=20(u8.16=20u8.16)=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20=
(two-arg-u8.16<=3D=20=20=20nil=20=20=20=20=20=20=20=20(u8.16)=20(u8.16=20=
u8.16)=20:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20(u8.16-pair-min=20=
=20=20=20#:uminp=20=20=20=20(u8.16)=20(u8.16=20u8.16)=20:cost=202=20=
:suffix=20'(:16b)=20:associative=20t)=0A+=20=20=20(u8.16-horizontal-min=20=
#:uminv=20(u8)=20(u8.16)=20=20=20=20=20=20=20=20=20=20:cost=202=20=
:encoding=20:neon-int-result=20:suffix=20'(:16b)=20:associative=20t)=0A+=20=
=20=20(u8.16-pair-max=20=20=20=20#:umaxp=20=20=20=20(u8.16)=20(u8.16=20=
u8.16)=20:cost=202=20:suffix=20'(:16b)=20:associative=20t)=0A+=20=20=20=
(u8.16-horizontal-max=20#:umaxv=20(u8)=20(u8.16)=20=20=20=20=20=20=20=20=20=
=20:cost=202=20:encoding=20:neon-int-result=20:suffix=20'(:16b)=20=
:associative=20t)=0A+=20=20=20(u8.16-pair+=20=20=20=20=20=20=20#:addp=20=20=
=20=20=20(u8.16)=20(u8.16=20u8.16)=20:cost=202=20:suffix=20'(:16b)=20=
:associative=20t)=0A+=20=20=20(u8.16-horizontal+=20#:addv=20=20=20=20=20=
(u8)=20(u8.16)=20=20=20=20=20=20=20=20=20=20:cost=202=20:encoding=20=
:neon-int-result=20:suffix=20'(:16b)=20:associative=20t)=0A+=20=20=20=
(u8.16-shiftr=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(u8.16)=20=
(u8.16=20imm3)=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(u8.16-shiftl=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(u8.16)=20=
(u8.16=20imm3)=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(u8.16-shiftl-long=20nil=20=20=20=20=20=20=20=20(u16.8)=20(u8.16=20imm3)=20=
=20:cost=201=20:encoding=20:custom)=0A+=20=20=20(u8.16-shiftl-long-hi=20=
nil=20=20=20=20=20(u16.8)=20(u8.16=20imm3)=20=20:cost=201=20:encoding=20=
:custom)=0A+=20=20=20(u8.16-rev16=20=20=20=20=20=20=20#:rev16=20=20=20=20=
(u8.16)=20(u8.16)=20=20=20=20=20=20=20:cost=201=20:suffix=20'(:16b))=0A+=20=
=20=20(u8.16-rev32=20=20=20=20=20=20=20#:rev32=20=20=20=20(u8.16)=20=
(u8.16)=20=20=20=20=20=20=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20=
(u8.16-rev64=20=20=20=20=20=20=20#:rev64=20=20=20=20(u8.16)=20(u8.16)=20=20=
=20=20=20=20=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20=
(u8.16-bit-select=20=20#:bsl=20=20=20=20=20=20(u8.16)=20(u8.16=20u8.16=20=
u8.16)=20:cost=201=20:encoding=20:neon-rmw=20:suffix=20'(:16b))=0A+=20=20=
=20(u8.16-lane-extract=20nil=20=20=20=20=20=20=20(u8)=20(u8.16=20imm4)=20=
=20=20=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(u8.16-lane-insert=20nil=20=20=20=20=20=20=20=20(u8.16)=20(u8.16=20u8=20=
imm4)=20:cost=201=20:encoding=20:custom)=0A+=20=20=20(u8.16-dup=20=20=20=20=
=20=20=20=20=20nil=20=20=20=20=20=20=20=20(u8.16)=20(u8.16=20imm4)=20=20=
:cost=201=20:encoding=20:custom)=0A+=20=20=20(u8.16-ins=20=20=20=20=20=20=
=20=20=20nil=20=20=20=20=20=20=20=20(u8.16)=20(u8.16=20u8.16=20imm4=20=
imm4)=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(u8.16-transpose-even=20#:trn1=20=20(u8.16)=20(u8.16=20u8.16)=20:cost=20=
1=20:suffix=20'(:16b))=0A+=20=20=20(u8.16-transpose-odd=20#:trn2=20=20=20=
(u8.16)=20(u8.16=20u8.16)=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20=
(u8.16-unzip-even=20=20#:uzp1=20=20=20=20=20(u8.16)=20(u8.16=20u8.16)=20=
:cost=201=20:suffix=20'(:16b))=0A+=20=20=20(u8.16-unzip-odd=20=20=20=
#:uzp2=20=20=20=20=20(u8.16)=20(u8.16=20u8.16)=20:cost=201=20:suffix=20=
'(:16b))=0A+=20=20=20(u8.16-zip-even=20=20=20=20#:zip1=20=20=20=20=20=
(u8.16)=20(u8.16=20u8.16)=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20=
(u8.16-zip-odd=20=20=20=20=20#:zip2=20=20=20=20=20(u8.16)=20(u8.16=20=
u8.16)=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20(u8.16-shuffle=20=20=20=
=20=20nil=20=20=20=20=20=20=20=20(u8.16)=20(u8.16=20u8.16)=20:cost=201=20=
:encoding=20:custom)=0A+=20=20=20;;=20u16=0A+=20=20=20(u16!-from-p128=20=20=
=20=20#:umov=20=20=20=20=20(u16)=20(p128)=20=20=20=20=20=20=20=20=20=20=
:cost=201=20:encoding=20:move=20:suffix=20'(0=20:h)=20=
:always-translatable=20nil)=0A+=20=20=20;;=20u16.8=0A+=20=20=20=
(u16.8!-from-u16=20=20=20nil=20=20=20=20=20=20=20=20(u16.8)=20(u16)=20=20=
=20=20=20=20=20=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(u16.8!-from-p128=20=20#:mov=20=20=20=20=20=20(u16.8)=20(p128)=20=20=20=20=
=20=20=20=20:cost=201=20:encoding=20:move=20:always-translatable=20nil=20=
:suffix=20'(:16b))=0A+=20=20=20(u16.8-from-u8.16=20=20nil=20=20=20=20=20=20=
=20=20(u16.8)=20(u8.16)=20=20=20=20=20=20=20:cost=201=20:encoding=20=
:custom)=0A+=20=20=20(u16.8-from-u8.16-hi=20nil=20=20=20=20=20=20(u16.8)=20=
(u8.16)=20=20=20=20=20=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(u16.8-from-u32.4=20=20#:xtn=20=20=20=20=20=20(u16.8)=20(u32.4)=20=20=20=20=
=20=20=20:cost=201=20:suffix=20'(:4h))=0A+=20=20=20(u16.8-from-u32.4-hi=20=
#:xtn2=20=20=20(u16.8)=20(u16.8=20u32.4)=20:cost=201=20:encoding=20=
:neon-rmw=20:suffix=20'(:8h))=0A+=20=20=20(u16.8-from-u32.4-saturating=20=
#:uqxtn=20(u16.8)=20(u32.4)=20=20:cost=201=20:suffix=20'(:4h))=0A+=20=20=20=
(u16.8-from-u32.4-saturating-hi=20#:uqxtn2=20(u16.8)=20(u16.8=20u32.4)=20=
:cost=201=20:encoding=20:neon-rmw=20:suffix=20'(:8h))=0A+=20=20=20=
(make-u16.8=20=20=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(u16.8)=20=
(u16=20u16=20u16=20u16=20u16=20u16=20u16=20u16)=20:cost=201=20:encoding=20=
:fake-vop)=0A+=20=20=20(u16.8-values=20=20=20=20=20=20nil=20=20=20=20=20=20=
=20=20(u16=20u16=20u16=20u16=20u16=20u16=20u16=20u16)=20(u16.8)=20:cost=20=
1=20:encoding=20:fake-vop)=0A+=20=20=20(u16.8-broadcast=20=20=20#:dup=20=20=
=20=20=20=20(u16.8)=20(u16)=20=20=20=20=20=20=20=20=20:cost=201=20=
:suffix=20'(:8h))=0A+=20=20=20(two-arg-u16.8-and=20#:and=20=20=20=20=20=20=
(u16.8)=20(u16.8=20u16.8)=20:cost=201=20:associative=20t=20:suffix=20=
'(:16b))=0A+=20=20=20(two-arg-u16.8-or=20=20#:orr=20=20=20=20=20=20=
(u16.8)=20(u16.8=20u16.8)=20:cost=201=20:associative=20t=20:suffix=20=
'(:16b))=0A+=20=20=20(two-arg-u16.8-xor=20#:eor=20=20=20=20=20=20(u16.8)=20=
(u16.8=20u16.8)=20:cost=201=20:associative=20t=20:suffix=20'(:16b))=0A+=20=
=20=20(two-arg-u16.8-max=20#:umax=20=20=20=20=20(u16.8)=20(u16.8=20=
u16.8)=20:cost=203=20:associative=20t=20:suffix=20'(:8h))=0A+=20=20=20=
(two-arg-u16.8-min=20#:umin=20=20=20=20=20(u16.8)=20(u16.8=20u16.8)=20=
:cost=203=20:associative=20t=20:suffix=20'(:8h))=0A+=20=20=20=
(u16.8-andc1=20=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(u16.8)=20=
(u16.8=20u16.8)=20:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20=
(u16.8-andc2=20=20=20=20=20=20=20#:bic=20=20=20=20=20=20(u16.8)=20(u16.8=20=
u16.8)=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20(u16.8-not=20=20=20=20=
=20=20=20=20=20#:not=20=20=20=20=20=20(u16.8)=20(u16.8)=20=20=20=20=20=20=
=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20(two-arg-u16.8+=20=20=20=20=
#:add=20=20=20=20=20=20(u16.8)=20(u16.8=20u16.8)=20:cost=202=20:suffix=20=
'(:8h)=20:associative=20t)=0A+=20=20=20(two-arg-u16.8+-saturating=20=
#:uqadd=20(u16.8)=20(u16.8=20u16.8)=20:cost=202=20:suffix=20'(:8h)=20=
:associative=20t)=0A+=20=20=20(two-arg-u16.8-=20=20=20=20#:sub=20=20=20=20=
=20=20(u16.8)=20(u16.8=20u16.8)=20:cost=202=20:suffix=20'(:8h))=0A+=20=20=
=20(two-arg-u16.8--saturating=20#:uqsub=20(u16.8)=20(u16.8=20u16.8)=20=
:cost=202=20:suffix=20'(:8h))=0A+=20=20=20(two-arg-u16.8*=20=20=20=20=
#:mul=20=20=20=20=20=20(u16.8)=20(u16.8=20u16.8)=20:cost=202=20:suffix=20=
'(:8h)=20:associative=20t)=0A+=20=20=20(u16.8*-long=20=20=20=20=20=20=20=
#:umull=20=20=20=20(u32.4)=20(u16.8=20u16.8)=20:cost=202=20:suffix=20=
'(:4h)=20:associative=20t)=0A+=20=20=20(u16.8*-long-hi=20=20=20=20=
#:umull2=20=20=20(u32.4)=20(u16.8=20u16.8)=20:cost=202=20:suffix=20=
'(:8h)=20:associative=20t)=0A+=20=20=20(two-arg-u16.8=3D=20=20=20=20=
#:cmeq=20=20=20=20=20(u16.8)=20(u16.8=20u16.8)=20:cost=201=20:suffix=20=
'(:8h))=0A+=20=20=20(two-arg-u16.8/=3D=20=20=20nil=20=20=20=20=20=20=20=20=
(u16.8)=20(u16.8=20u16.8)=20:cost=202=20:associative=20t=20:encoding=20=
:fake-vop)=0A+=20=20=20(two-arg-u16.8>=20=20=20=20#:cmhi=20=20=20=20=20=
(u16.8)=20(u16.8=20u16.8)=20:cost=201=20:suffix=20'(:8h))=0A+=20=20=20=
(two-arg-u16.8<=20=20=20=20nil=20=20=20=20=20=20=20=20(u16.8)=20(u16.8=20=
u16.8)=20:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20(two-arg-u16.8>=3D=
=20=20=20#:cmhs=20=20=20=20=20(u16.8)=20(u16.8=20u16.8)=20:cost=201=20=
:suffix=20'(:8h))=0A+=20=20=20(two-arg-u16.8<=3D=20=20=20nil=20=20=20=20=20=
=20=20=20(u16.8)=20(u16.8=20u16.8)=20:cost=201=20:encoding=20:fake-vop)=0A=
+=20=20=20(u16.8-pair-min=20=20=20=20#:uminp=20=20=20=20(u16.8)=20(u16.8=20=
u16.8)=20:cost=202=20:suffix=20'(:8h)=20:associative=20t)=0A+=20=20=20=
(u16.8-horizontal-min=20#:uminv=20(u16)=20(u16.8)=20=20=20=20=20=20=20=20=
=20:cost=202=20:encoding=20:neon-int-result=20:suffix=20'(:8h)=20=
:associative=20t)=0A+=20=20=20(u16.8-pair-max=20=20=20=20#:umaxp=20=20=20=
=20(u16.8)=20(u16.8=20u16.8)=20:cost=202=20:suffix=20'(:8h)=20=
:associative=20t)=0A+=20=20=20(u16.8-horizontal-max=20#:umaxv=20(u16)=20=
(u16.8)=20=20=20=20=20=20=20=20=20:cost=202=20:encoding=20=
:neon-int-result=20:suffix=20'(:8h)=20:associative=20t)=0A+=20=20=20=
(u16.8-pair+=20=20=20=20=20=20=20#:addp=20=20=20=20=20(u16.8)=20(u16.8=20=
u16.8)=20:cost=202=20:suffix=20'(:8h)=20:associative=20t)=0A+=20=20=20=
(u16.8-horizontal+=20#:addv=20=20=20=20=20(u16)=20(u16.8)=20=20=20=20=20=20=
=20=20=20:cost=202=20:encoding=20:neon-int-result=20:suffix=20'(:8h)=20=
:associative=20t)=0A+=20=20=20(u16.8-shiftr=20=20=20=20=20=20nil=20=20=20=
=20=20=20=20=20(u16.8)=20(u16.8=20imm4)=20=20:cost=201=20:encoding=20=
:custom)=0A+=20=20=20(u16.8-shiftl=20=20=20=20=20=20nil=20=20=20=20=20=20=
=20=20(u16.8)=20(u16.8=20imm4)=20=20:cost=201=20:encoding=20:custom)=0A+=20=
=20=20(u16.8-shiftl-long=20nil=20=20=20=20=20=20=20=20(u32.4)=20(u16.8=20=
imm4)=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(u16.8-shiftl-long-hi=20nil=20=20=20=20=20(u32.4)=20(u16.8=20imm4)=20=20=
:cost=201=20:encoding=20:custom)=0A+=20=20=20(u16.8-bit-select=20=20=
#:bsl=20=20=20=20=20=20(u16.8)=20(u16.8=20u16.8=20u16.8)=20:cost=201=20=
:encoding=20:neon-rmw=20:suffix=20'(:16b))=0A+=20=20=20=
(u16.8-lane-extract=20nil=20=20=20=20=20=20=20(u16)=20(u16.8=20imm3)=20=20=
=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20(u16.8-lane-insert=20=
nil=20=20=20=20=20=20=20=20(u16.8)=20(u16.8=20u16=20imm3)=20:cost=201=20=
:encoding=20:custom)=0A+=20=20=20(u16.8-dup=20=20=20=20=20=20=20=20=20=
nil=20=20=20=20=20=20=20=20(u16.8)=20(u16.8=20imm3)=20=20:cost=201=20=
:encoding=20:custom)=0A+=20=20=20(u16.8-ins=20=20=20=20=20=20=20=20=20=
nil=20=20=20=20=20=20=20=20(u16.8)=20(u16.8=20u16.8=20imm3=20imm3)=20=
:cost=201=20:encoding=20:custom)=0A+=20=20=20(u16.8-transpose-even=20=
#:trn1=20=20(u16.8)=20(u16.8=20u16.8)=20:cost=201=20:suffix=20'(:8h))=0A=
+=20=20=20(u16.8-transpose-odd=20#:trn2=20=20=20(u16.8)=20(u16.8=20=
u16.8)=20:cost=201=20:suffix=20'(:8h))=0A+=20=20=20(u16.8-unzip-even=20=20=
#:uzp1=20=20=20=20=20(u16.8)=20(u16.8=20u16.8)=20:cost=201=20:suffix=20=
'(:8h))=0A+=20=20=20(u16.8-unzip-odd=20=20=20#:uzp2=20=20=20=20=20=
(u16.8)=20(u16.8=20u16.8)=20:cost=201=20:suffix=20'(:8h))=0A+=20=20=20=
(u16.8-zip-even=20=20=20=20#:zip1=20=20=20=20=20(u16.8)=20(u16.8=20=
u16.8)=20:cost=201=20:suffix=20'(:8h))=0A+=20=20=20(u16.8-zip-odd=20=20=20=
=20=20#:zip2=20=20=20=20=20(u16.8)=20(u16.8=20u16.8)=20:cost=201=20=
:suffix=20'(:8h))=0A+=20=20=20;;=20u32=0A+=20=20=20(u32!-from-p128=20=20=20=
=20#:umov=20=20=20=20=20(u32)=20(p128)=20=20=20=20=20=20=20=20=20=20=
:cost=201=20:encoding=20:move=20:suffix=20'(0=20:s)=20=
:always-translatable=20nil)=0A+=20=20=20;;=20u32.4=0A+=20=20=20=
(u32.4!-from-u32=20=20=20nil=20=20=20=20=20=20=20=20(u32.4)=20(u32)=20=20=
=20=20=20=20=20=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(u32.4!-from-p128=20=20#:mov=20=20=20=20=20=20(u32.4)=20(p128)=20=20=20=20=
=20=20=20=20:cost=201=20:encoding=20:move=20:always-translatable=20nil=20=
:suffix=20'(:16b))=0A+=20=20=20(u32.4-from-f32.4=20=20#:fcvtnu=20=20=20=
(u32.4)=20(f32.4)=20=20=20=20=20=20=20:cost=205=20:suffix=20'(:4s))=0A+=20=
=20=20(u32.4-from-u16.8=20=20nil=20=20=20=20=20=20=20=20(u32.4)=20=
(u16.8)=20=20=20=20=20=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(u32.4-from-u16.8-hi=20nil=20=20=20=20=20=20(u32.4)=20(u16.8)=20=20=20=20=
=20=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20(u32.4-from-u64.2=20=
=20#:xtn=20=20=20=20=20=20(u32.4)=20(u64.2)=20=20=20=20=20=20=20:cost=20=
1=20:suffix=20'(:4h))=0A+=20=20=20(u32.4-from-u64.2-hi=20#:xtn2=20=20=20=
(u32.4)=20(u32.4=20u64.2)=20:cost=201=20:encoding=20:neon-rmw=20:suffix=20=
'(:8h))=0A+=20=20=20(u32.4-from-u64.2-saturating=20#:uqxtn=20(u32.4)=20=
(u64.2)=20=20:cost=201=20:suffix=20'(:4h))=0A+=20=20=20=
(u32.4-from-u64.2-saturating-hi=20#:uqxtn2=20(u32.4)=20(u32.4=20u64.2)=20=
:cost=201=20:encoding=20:neon-rmw=20:suffix=20'(:8h))=0A+=20=20=20=
(make-u32.4=20=20=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(u32.4)=20=
(u32=20u32=20u32=20u32)=20:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20=
(u32.4-values=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(u32=20u32=20=
u32=20u32)=20(u32.4)=20:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20=
(u32.4-broadcast=20=20=20#:dup=20=20=20=20=20=20(u32.4)=20(u32)=20=20=20=20=
=20=20=20=20=20:cost=201=20:suffix=20'(:4s))=0A+=20=20=20=
(two-arg-u32.4-and=20#:and=20=20=20=20=20=20(u32.4)=20(u32.4=20u32.4)=20=
:cost=201=20:associative=20t=20:suffix=20'(:16b))=0A+=20=20=20=
(two-arg-u32.4-or=20=20#:orr=20=20=20=20=20=20(u32.4)=20(u32.4=20u32.4)=20=
:cost=201=20:associative=20t=20:suffix=20'(:16b))=0A+=20=20=20=
(two-arg-u32.4-xor=20#:eor=20=20=20=20=20=20(u32.4)=20(u32.4=20u32.4)=20=
:cost=201=20:associative=20t=20:suffix=20'(:16b))=0A+=20=20=20=
(two-arg-u32.4-max=20#:umax=20=20=20=20=20(u32.4)=20(u32.4=20u32.4)=20=
:cost=203=20:associative=20t=20:suffix=20'(:4s))=0A+=20=20=20=
(two-arg-u32.4-min=20#:umin=20=20=20=20=20(u32.4)=20(u32.4=20u32.4)=20=
:cost=203=20:associative=20t=20:suffix=20'(:4s))=0A+=20=20=20=
(u32.4-andc1=20=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(u32.4)=20=
(u32.4=20u32.4)=20:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20=
(u32.4-andc2=20=20=20=20=20=20=20#:bic=20=20=20=20=20=20(u32.4)=20(u32.4=20=
u32.4)=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20(u32.4-not=20=20=20=20=
=20=20=20=20=20#:not=20=20=20=20=20=20(u32.4)=20(u32.4)=20=20=20=20=20=20=
=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20(two-arg-u32.4+=20=20=20=20=
#:add=20=20=20=20=20=20(u32.4)=20(u32.4=20u32.4)=20:cost=202=20:suffix=20=
'(:4s)=20:associative=20t)=0A+=20=20=20(two-arg-u32.4+-saturating=20=
#:uqadd=20(u32.4)=20(u32.4=20u32.4)=20:cost=202=20:suffix=20'(:4s)=20=
:associative=20t)=0A+=20=20=20(two-arg-u32.4-=20=20=20=20#:sub=20=20=20=20=
=20=20(u32.4)=20(u32.4=20u32.4)=20:cost=202=20:suffix=20'(:4s))=0A+=20=20=
=20(two-arg-u32.4--saturating=20#:uqsub=20(u32.4)=20(u32.4=20u32.4)=20=
:cost=202=20:suffix=20'(:4s))=0A+=20=20=20(two-arg-u32.4*=20=20=20=20=
#:mul=20=20=20=20=20=20(u32.4)=20(u32.4=20u32.4)=20:cost=202=20:suffix=20=
'(:4s)=20:associative=20t)=0A+=20=20=20(u32.4*-long=20=20=20=20=20=20=20=
#:umull=20=20=20=20(u64.2)=20(u32.4=20u32.4)=20:cost=202=20:suffix=20=
'(:2s)=20:associative=20t)=0A+=20=20=20(u32.4*-long-hi=20=20=20=20=
#:umull2=20=20=20(u64.2)=20(u32.4=20u32.4)=20:cost=202=20:suffix=20=
'(:4s)=20:associative=20t)=0A+=20=20=20(two-arg-u32.4=3D=20=20=20=20=
#:cmeq=20=20=20=20=20(u32.4)=20(u32.4=20u32.4)=20:cost=201=20:suffix=20=
'(:4s))=0A+=20=20=20(two-arg-u32.4/=3D=20=20=20nil=20=20=20=20=20=20=20=20=
(u32.4)=20(u32.4=20u32.4)=20:cost=202=20:associative=20t=20:encoding=20=
:fake-vop)=0A+=20=20=20(two-arg-u32.4>=20=20=20=20#:cmhi=20=20=20=20=20=
(u32.4)=20(u32.4=20u32.4)=20:cost=201=20:suffix=20'(:4s))=0A+=20=20=20=
(two-arg-u32.4<=20=20=20=20nil=20=20=20=20=20=20=20=20(u32.4)=20(u32.4=20=
u32.4)=20:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20(two-arg-u32.4>=3D=
=20=20=20#:cmhs=20=20=20=20=20(u32.4)=20(u32.4=20u32.4)=20:cost=201=20=
:suffix=20'(:4s))=0A+=20=20=20(two-arg-u32.4<=3D=20=20=20nil=20=20=20=20=20=
=20=20=20(u32.4)=20(u32.4=20u32.4)=20:cost=201=20:encoding=20:fake-vop)=0A=
+=20=20=20(u32.4-pair-min=20=20=20=20#:uminp=20=20=20=20(u32.4)=20(u32.4=20=
u32.4)=20:cost=202=20:suffix=20'(:4s)=20:associative=20t)=0A+=20=20=20=
(u32.4-horizontal-min=20#:uminv=20(u32)=20(u32.4)=20=20=20=20=20=20=20=20=
=20:cost=202=20:encoding=20:neon-int-result=20:suffix=20'(:4s)=20=
:associative=20t)=0A+=20=20=20(u32.4-pair-max=20=20=20=20#:umaxp=20=20=20=
=20(u32.4)=20(u32.4=20u32.4)=20:cost=202=20:suffix=20'(:4s)=20=
:associative=20t)=0A+=20=20=20(u32.4-horizontal-max=20#:umaxv=20(u32)=20=
(u32.4)=20=20=20=20=20=20=20=20=20:cost=202=20:encoding=20=
:neon-int-result=20:suffix=20'(:4s)=20:associative=20t)=0A+=20=20=20=
(u32.4-pair+=20=20=20=20=20=20=20#:addp=20=20=20=20=20(u32.4)=20(u32.4=20=
u32.4)=20:cost=202=20:suffix=20'(:4s)=20:associative=20t)=0A+=20=20=20=
(u32.4-horizontal+=20#:addv=20=20=20=20=20(u32)=20(u32.4)=20=20=20=20=20=20=
=20=20=20:cost=202=20:encoding=20:neon-int-result=20:suffix=20'(:4s)=20=
:associative=20t)=0A+=20=20=20(u32.4-shiftr=20=20=20=20=20=20nil=20=20=20=
=20=20=20=20=20(u32.4)=20(u32.4=20imm5)=20=20:cost=201=20:encoding=20=
:custom)=0A+=20=20=20(u32.4-shiftl=20=20=20=20=20=20nil=20=20=20=20=20=20=
=20=20(u32.4)=20(u32.4=20imm5)=20=20:cost=201=20:encoding=20:custom)=0A+=20=
=20=20(u32.4-shiftl-long=20nil=20=20=20=20=20=20=20=20(u64.2)=20(u32.4=20=
imm5)=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(u32.4-shiftl-long-hi=20nil=20=20=20=20=20(u64.2)=20(u32.4=20imm5)=20=20=
:cost=201=20:encoding=20:custom)=0A+=20=20=20(u32.4-bit-select=20=20=
#:bsl=20=20=20=20=20=20(u32.4)=20(u32.4=20u32.4=20u32.4)=20:cost=201=20=
:encoding=20:neon-rmw=20:suffix=20'(:16b))=0A+=20=20=20=
(u32.4-lane-extract=20nil=20=20=20=20=20=20=20(u32)=20(u32.4=20imm2)=20=20=
=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20(u32.4-lane-insert=20=
nil=20=20=20=20=20=20=20=20(u32.4)=20(u32.4=20u32=20imm2)=20:cost=201=20=
:encoding=20:custom)=0A+=20=20=20(u32.4-dup=20=20=20=20=20=20=20=20=20=
nil=20=20=20=20=20=20=20=20(u32.4)=20(u32.4=20imm2)=20=20:cost=201=20=
:encoding=20:custom)=0A+=20=20=20(u32.4-ins=20=20=20=20=20=20=20=20=20=
nil=20=20=20=20=20=20=20=20(u32.4)=20(u32.4=20u32.4=20imm2=20imm2)=20=
:cost=201=20:encoding=20:custom)=0A+=20=20=20(u32.4-transpose-even=20=
#:trn1=20=20(u32.4)=20(u32.4=20u32.4)=20:cost=201=20:suffix=20'(:4s))=0A=
+=20=20=20(u32.4-transpose-odd=20#:trn2=20=20=20(u32.4)=20(u32.4=20=
u32.4)=20:cost=201=20:suffix=20'(:4s))=0A+=20=20=20(u32.4-unzip-even=20=20=
#:uzp1=20=20=20=20=20(u32.4)=20(u32.4=20u32.4)=20:cost=201=20:suffix=20=
'(:4s))=0A+=20=20=20(u32.4-unzip-odd=20=20=20#:uzp2=20=20=20=20=20=
(u32.4)=20(u32.4=20u32.4)=20:cost=201=20:suffix=20'(:4s))=0A+=20=20=20=
(u32.4-zip-even=20=20=20=20#:zip1=20=20=20=20=20(u32.4)=20(u32.4=20=
u32.4)=20:cost=201=20:suffix=20'(:4s))=0A+=20=20=20(u32.4-zip-odd=20=20=20=
=20=20#:zip2=20=20=20=20=20(u32.4)=20(u32.4=20u32.4)=20:cost=201=20=
:suffix=20'(:4s))=0A+=20=20=20;;=20u64=0A+=20=20=20(u64!-from-p128=20=20=20=
=20#:umov=20=20=20=20=20(u64)=20(p128)=20=20=20=20=20=20=20=20=20=20=
:cost=201=20:encoding=20:move=20:suffix=20'(0=20:d)=20=
:always-translatable=20nil)=0A+=20=20=20;;=20u64.2=0A+=20=20=20=
(u64.2!-from-u64=20=20=20nil=20=20=20=20=20=20=20=20(u64.2)=20(u64)=20=20=
=20=20=20=20=20=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(u64.2!-from-p128=20=20#:mov=20=20=20=20=20=20(u64.2)=20(p128)=20=20=20=20=
=20=20=20=20:cost=201=20:encoding=20:move=20:always-translatable=20nil=20=
:suffix=20'(:16b))=0A+=20=20=20(u64.2-from-f64.2=20=20#:fcvtnu=20=20=20=
(u64.2)=20(f64.2)=20=20=20=20=20=20=20:cost=205=20:suffix=20'(:2d))=0A+=20=
=20=20(u64.2-from-u32.4=20=20nil=20=20=20=20=20=20=20=20(u64.2)=20=
(u32.4)=20=20=20=20=20=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(u64.2-from-u32.4-hi=20nil=20=20=20=20=20=20(u64.2)=20(u32.4)=20=20=20=20=
=20=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20(make-u64.2=20=20=20=
=20=20=20=20=20nil=20=20=20=20=20=20=20=20(u64.2)=20(u64=20u64)=20=20=20=20=
=20:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20(u64.2-values=20=20=20=20=
=20=20nil=20=20=20=20=20=20=20=20(u64=20u64)=20(u64.2)=20=20=20=20=20=
:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20(u64.2-broadcast=20=20=20=
#:dup=20=20=20=20=20=20(u64.2)=20(u64)=20=20=20=20=20=20=20=20=20:cost=20=
1=20:suffix=20'(:2d))=0A+=20=20=20(two-arg-u64.2-and=20#:and=20=20=20=20=20=
=20(u64.2)=20(u64.2=20u64.2)=20:cost=201=20:associative=20t=20:suffix=20=
'(:16b))=0A+=20=20=20(two-arg-u64.2-or=20=20#:orr=20=20=20=20=20=20=
(u64.2)=20(u64.2=20u64.2)=20:cost=201=20:associative=20t=20:suffix=20=
'(:16b))=0A+=20=20=20(two-arg-u64.2-xor=20#:eor=20=20=20=20=20=20(u64.2)=20=
(u64.2=20u64.2)=20:cost=201=20:associative=20t=20:suffix=20'(:16b))=0A+=20=
=20=20(two-arg-u64.2-max=20#:umax=20=20=20=20=20(u64.2)=20(u64.2=20=
u64.2)=20:cost=203=20:associative=20t=20:suffix=20'(:2d))=0A+=20=20=20=
(two-arg-u64.2-min=20#:umin=20=20=20=20=20(u64.2)=20(u64.2=20u64.2)=20=
:cost=203=20:associative=20t=20:suffix=20'(:2d))=0A+=20=20=20=
(u64.2-andc1=20=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(u64.2)=20=
(u64.2=20u64.2)=20:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20=
(u64.2-andc2=20=20=20=20=20=20=20#:bic=20=20=20=20=20=20(u64.2)=20(u64.2=20=
u64.2)=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20(u64.2-not=20=20=20=20=
=20=20=20=20=20#:not=20=20=20=20=20=20(u64.2)=20(u64.2)=20=20=20=20=20=20=
=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20(two-arg-u64.2+=20=20=20=20=
#:add=20=20=20=20=20=20(u64.2)=20(u64.2=20u64.2)=20:cost=202=20:suffix=20=
'(:2d)=20:associative=20t)=0A+=20=20=20(two-arg-u64.2+-saturating=20=
#:uqadd=20(u64.2)=20(u64.2=20u64.2)=20:cost=202=20:suffix=20'(:2d)=20=
:associative=20t)=0A+=20=20=20(two-arg-u64.2-=20=20=20=20#:sub=20=20=20=20=
=20=20(u64.2)=20(u64.2=20u64.2)=20:cost=202=20:suffix=20'(:2d))=0A+=20=20=
=20(two-arg-u64.2--saturating=20#:uqsub=20(u64.2)=20(u64.2=20u64.2)=20=
:cost=202=20:suffix=20'(:2d))=0A+=20=20=20(two-arg-u64.2*=20=20=20=20=
#:mul=20=20=20=20=20=20(u64.2)=20(u64.2=20u64.2)=20:cost=202=20:suffix=20=
'(:2d)=20:associative=20t)=0A+=20=20=20(two-arg-u64.2=3D=20=20=20=20=
#:cmeq=20=20=20=20=20(u64.2)=20(u64.2=20u64.2)=20:cost=201=20:suffix=20=
'(:2d))=0A+=20=20=20(two-arg-u64.2/=3D=20=20=20nil=20=20=20=20=20=20=20=20=
(u64.2)=20(u64.2=20u64.2)=20:cost=202=20:associative=20t=20:encoding=20=
:fake-vop)=0A+=20=20=20(two-arg-u64.2>=20=20=20=20#:cmhi=20=20=20=20=20=
(u64.2)=20(u64.2=20u64.2)=20:cost=201=20:suffix=20'(:2d))=0A+=20=20=20=
(two-arg-u64.2<=20=20=20=20nil=20=20=20=20=20=20=20=20(u64.2)=20(u64.2=20=
u64.2)=20:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20(two-arg-u64.2>=3D=
=20=20=20#:cmhs=20=20=20=20=20(u64.2)=20(u64.2=20u64.2)=20:cost=201=20=
:suffix=20'(:2d))=0A+=20=20=20(two-arg-u64.2<=3D=20=20=20nil=20=20=20=20=20=
=20=20=20(u64.2)=20(u64.2=20u64.2)=20:cost=201=20:encoding=20:fake-vop)=0A=
+=20=20=20(u64.2-pair-min=20=20=20=20nil=20=20=20=20=20=20=20=20(u64.2)=20=
(u64.2=20u64.2)=20:cost=202=20:encoding=20:fake-vop=20:associative=20t)=0A=
+=20=20=20(u64.2-horizontal-min=20nil=20=20=20=20=20(u64)=20(u64.2)=20=20=
=20=20=20=20=20=20=20:cost=202=20:encoding=20:fake-vop=20:associative=20=
t)=0A+=20=20=20(u64.2-pair-max=20=20=20=20nil=20=20=20=20=20=20=20=20=
(u64.2)=20(u64.2=20u64.2)=20:cost=202=20:encoding=20:fake-vop=20=
:associative=20t)=0A+=20=20=20(u64.2-horizontal-max=20nil=20=20=20=20=20=
(u64)=20(u64.2)=20=20=20=20=20=20=20=20=20:cost=202=20:encoding=20=
:fake-vop=20:associative=20t)=0A+=20=20=20(u64.2-pair+=20=20=20=20=20=20=20=
nil=20=20=20=20=20=20=20=20(u64.2)=20(u64.2=20u64.2)=20:cost=202=20=
:encoding=20:fake-vop=20:associative=20t)=0A+=20=20=20(u64.2-horizontal+=20=
nil=20=20=20=20=20=20=20=20(u64)=20(u64.2)=20=20=20=20=20=20=20=20=20=
:cost=202=20:encoding=20:fake-vop=20:associative=20t)=0A+=20=20=20=
(u64.2-shiftr=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(u64.2)=20=
(u64.2=20imm6)=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(u64.2-shiftl=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(u64.2)=20=
(u64.2=20imm6)=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(u64.2-bit-select=20=20#:bsl=20=20=20=20=20=20(u64.2)=20(u64.2=20u64.2=20=
u64.2)=20:cost=201=20:encoding=20:neon-rmw=20:suffix=20'(:16b))=0A+=20=20=
=20(u64.2-lane-extract=20nil=20=20=20=20=20=20=20(u64)=20(u64.2=20imm1)=20=
=20=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20(u64.2-lane-insert=20=
nil=20=20=20=20=20=20=20=20(u64.2)=20(u64.2=20u64=20imm1)=20:cost=201=20=
:encoding=20:custom)=0A+=20=20=20(u64.2-dup=20=20=20=20=20=20=20=20=20=
nil=20=20=20=20=20=20=20=20(u64.2)=20(u64.2=20imm1)=20=20:cost=201=20=
:encoding=20:custom)=0A+=20=20=20(u64.2-ins=20=20=20=20=20=20=20=20=20=
nil=20=20=20=20=20=20=20=20(u64.2)=20(u64.2=20u64.2=20imm1=20imm1)=20=
:cost=201=20:encoding=20:custom)=0A+=20=20=20(u64.2-transpose-even=20=
#:trn1=20=20(u64.2)=20(u64.2=20u64.2)=20:cost=201=20:suffix=20'(:2d))=0A=
+=20=20=20(u64.2-transpose-odd=20#:trn2=20=20=20(u64.2)=20(u64.2=20=
u64.2)=20:cost=201=20:suffix=20'(:2d))=0A+=20=20=20(u64.2-unzip-even=20=20=
#:uzp1=20=20=20=20=20(u64.2)=20(u64.2=20u64.2)=20:cost=201=20:suffix=20=
'(:2d))=0A+=20=20=20(u64.2-unzip-odd=20=20=20#:uzp2=20=20=20=20=20=
(u64.2)=20(u64.2=20u64.2)=20:cost=201=20:suffix=20'(:2d))=0A+=20=20=20=
(u64.2-zip-even=20=20=20=20#:zip1=20=20=20=20=20(u64.2)=20(u64.2=20=
u64.2)=20:cost=201=20:suffix=20'(:2d))=0A+=20=20=20(u64.2-zip-odd=20=20=20=
=20=20#:zip2=20=20=20=20=20(u64.2)=20(u64.2=20u64.2)=20:cost=201=20=
:suffix=20'(:2d))=0A+=20=20=20;;=20s8=0A+=20=20=20(s8!-from-p128=20=20=20=
=20=20#:smov=20=20=20=20=20(s8)=20(p128)=20=20=20=20=20=20=20=20=20=20=20=
:cost=201=20:encoding=20:move=20:suffix=20'(0=20:b)=20=
:always-translatable=20nil)=0A+=20=20=20;;=20s8.16=0A+=20=20=20=
(s8.16!-from-s8=20=20=20=20nil=20=20=20=20=20=20=20=20(s8.16)=20(s8)=20=20=
=20=20=20=20=20=20=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(s8.16!-from-p128=20=20#:mov=20=20=20=20=20=20(s8.16)=20(p128)=20=20=20=20=
=20=20=20=20:cost=201=20:encoding=20:move=20:always-translatable=20nil=20=
:suffix=20'(:16b))=0A+=20=20=20(s8.16-from-s16.8=20=20#:xtn=20=20=20=20=20=
=20(s8.16)=20(s16.8)=20=20=20=20=20=20=20:cost=201=20:suffix=20'(:8b))=0A=
+=20=20=20(s8.16-from-s16.8-hi=20#:xtn2=20=20=20(s8.16)=20(s8.16=20=
s16.8)=20:cost=201=20:encoding=20:neon-rmw=20:suffix=20'(:16b))=0A+=20=20=
=20(s8.16-from-s16.8-saturating=20#:sqxtn=20(s8.16)=20(s16.8)=20=20:cost=20=
1=20:suffix=20'(:8b))=0A+=20=20=20(s8.16-from-s16.8-saturating-hi=20=
#:sqxtn2=20(s8.16)=20(s8.16=20s16.8)=20:cost=201=20:encoding=20:neon-rmw=20=
:suffix=20'(:16b))=0A+=20=20=20(make-s8.16=20=20=20=20=20=20=20=20nil=20=20=
=20=20=20=20=20=20(s8.16)=20(s8=20s8=20s8=20s8=20s8=20s8=20s8=20s8=20s8=20=
s8=20s8=20s8=20s8=20s8=20s8=20s8)=20:cost=201=20:encoding=20:fake-vop)=0A=
+=20=20=20(s8.16-values=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(s8=20=
s8=20s8=20s8=20s8=20s8=20s8=20s8=20s8=20s8=20s8=20s8=20s8=20s8=20s8=20=
s8)=20(s8.16)=20:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20=
(s8.16-broadcast=20=20=20#:dup=20=20=20=20=20=20(s8.16)=20(s8)=20=20=20=20=
=20=20=20=20=20=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20=
(two-arg-s8.16-and=20#:and=20=20=20=20=20=20(s8.16)=20(s8.16=20s8.16)=20=
:cost=201=20:associative=20t=20:suffix=20'(:16b))=0A+=20=20=20=
(two-arg-s8.16-or=20=20#:orr=20=20=20=20=20=20(s8.16)=20(s8.16=20s8.16)=20=
:cost=201=20:associative=20t=20:suffix=20'(:16b))=0A+=20=20=20=
(two-arg-s8.16-xor=20#:eor=20=20=20=20=20=20(s8.16)=20(s8.16=20s8.16)=20=
:cost=201=20:associative=20t=20:suffix=20'(:16b))=0A+=20=20=20=
(two-arg-s8.16-max=20#:smax=20=20=20=20=20(s8.16)=20(s8.16=20s8.16)=20=
:cost=203=20:associative=20t=20:suffix=20'(:16b))=0A+=20=20=20=
(two-arg-s8.16-min=20#:smin=20=20=20=20=20(s8.16)=20(s8.16=20s8.16)=20=
:cost=203=20:associative=20t=20:suffix=20'(:16b))=0A+=20=20=20=
(s8.16-andc1=20=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(s8.16)=20=
(s8.16=20s8.16)=20:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20=
(s8.16-andc2=20=20=20=20=20=20=20#:bic=20=20=20=20=20=20(s8.16)=20(s8.16=20=
s8.16)=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20(s8.16-not=20=20=20=20=
=20=20=20=20=20#:not=20=20=20=20=20=20(s8.16)=20(s8.16)=20=20=20=20=20=20=
=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20(two-arg-s8.16+=20=20=20=20=
#:add=20=20=20=20=20=20(s8.16)=20(s8.16=20s8.16)=20:cost=202=20:suffix=20=
'(:16b)=20:associative=20t)=0A+=20=20=20(two-arg-s8.16+-saturating=20=
#:sqadd=20(s8.16)=20(s8.16=20s8.16)=20:cost=202=20:suffix=20'(:16b)=20=
:associative=20t)=0A+=20=20=20(two-arg-s8.16-=20=20=20=20#:sub=20=20=20=20=
=20=20(s8.16)=20(s8.16=20s8.16)=20:cost=202=20:suffix=20'(:16b))=0A+=20=20=
=20(two-arg-s8.16--saturating=20#:sqsub=20(s8.16)=20(s8.16=20s8.16)=20=
:cost=202=20:suffix=20'(:16b))=0A+=20=20=20(two-arg-s8.16*=20=20=20=20=
#:mul=20=20=20=20=20=20(s8.16)=20(s8.16=20s8.16)=20:cost=202=20:suffix=20=
'(:16b)=20:associative=20t)=0A+=20=20=20(two-arg-s8.16=3D=20=20=20=20=
#:cmeq=20=20=20=20=20(u8.16)=20(s8.16=20s8.16)=20:cost=201=20:suffix=20=
'(:16b))=0A+=20=20=20(two-arg-s8.16/=3D=20=20=20nil=20=20=20=20=20=20=20=20=
(u8.16)=20(s8.16=20s8.16)=20:cost=202=20:associative=20t=20:encoding=20=
:fake-vop)=0A+=20=20=20(two-arg-s8.16>=20=20=20=20#:cmgt=20=20=20=20=20=
(u8.16)=20(s8.16=20s8.16)=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20=
(two-arg-s8.16<=20=20=20=20nil=20=20=20=20=20=20=20=20(u8.16)=20(s8.16=20=
s8.16)=20:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20(two-arg-s8.16>=3D=
=20=20=20#:cmge=20=20=20=20=20(u8.16)=20(s8.16=20s8.16)=20:cost=201=20=
:suffix=20'(:16b))=0A+=20=20=20(two-arg-s8.16<=3D=20=20=20nil=20=20=20=20=
=20=20=20=20(u8.16)=20(s8.16=20s8.16)=20:cost=201=20:encoding=20=
:fake-vop)=0A+=20=20=20(s8.16-pair-min=20=20=20=20#:sminp=20=20=20=20=
(s8.16)=20(s8.16=20s8.16)=20:cost=202=20:suffix=20'(:16b)=20:associative=20=
t)=0A+=20=20=20(s8.16-horizontal-min=20#:sminv=20(s8)=20(s8.16)=20=20=20=20=
=20=20=20=20=20=20:cost=202=20:encoding=20:neon-int-result=20:suffix=20=
'(:16b)=20:associative=20t)=0A+=20=20=20(s8.16-pair-max=20=20=20=20=
#:smaxp=20=20=20=20(s8.16)=20(s8.16=20s8.16)=20:cost=202=20:suffix=20=
'(:16b)=20:associative=20t)=0A+=20=20=20(s8.16-horizontal-max=20#:smaxv=20=
(s8)=20(s8.16)=20=20=20=20=20=20=20=20=20=20:cost=202=20:encoding=20=
:neon-int-result=20:suffix=20'(:16b)=20:associative=20t)=0A+=20=20=20=
(s8.16-pair+=20=20=20=20=20=20=20#:addp=20=20=20=20=20(s8.16)=20(s8.16=20=
s8.16)=20:cost=202=20:suffix=20'(:16b)=20:associative=20t)=0A+=20=20=20=
(s8.16-horizontal+=20#:addv=20=20=20=20=20(s8)=20(s8.16)=20=20=20=20=20=20=
=20=20=20=20:cost=202=20:encoding=20:neon-int-result=20:suffix=20'(:16b)=20=
:associative=20t)=0A+=20=20=20(s8.16-shiftr=20=20=20=20=20=20nil=20=20=20=
=20=20=20=20=20(s8.16)=20(s8.16=20imm3)=20=20:cost=201=20:encoding=20=
:custom)=0A+=20=20=20(s8.16-shiftl=20=20=20=20=20=20nil=20=20=20=20=20=20=
=20=20(s8.16)=20(s8.16=20imm3)=20=20:cost=201=20:encoding=20:custom)=0A+=20=
=20=20(s8.16-shiftl-long=20nil=20=20=20=20=20=20=20=20(s16.8)=20(s8.16=20=
imm3)=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(s8.16-shiftl-long-hi=20nil=20=20=20=20=20(s16.8)=20(s8.16=20imm3)=20=20=
:cost=201=20:encoding=20:custom)=0A+=20=20=20(s8.16-bit-select=20=20=
#:bsl=20=20=20=20=20=20(s8.16)=20(u8.16=20s8.16=20s8.16)=20:cost=201=20=
:encoding=20:neon-rmw=20:suffix=20'(:16b))=0A+=20=20=20=
(s8.16-lane-extract=20nil=20=20=20=20=20=20=20(s8)=20(s8.16=20imm4)=20=20=
=20=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20(s8.16-lane-insert=20=
nil=20=20=20=20=20=20=20=20(s8.16)=20(s8.16=20s8=20imm4)=20:cost=201=20=
:encoding=20:custom)=0A+=20=20=20(s8.16-dup=20=20=20=20=20=20=20=20=20=
nil=20=20=20=20=20=20=20=20(s8.16)=20(s8.16=20imm4)=20=20:cost=201=20=
:encoding=20:custom)=0A+=20=20=20(s8.16-ins=20=20=20=20=20=20=20=20=20=
nil=20=20=20=20=20=20=20=20(s8.16)=20(s8.16=20s8.16=20imm4=20imm4)=20=
:cost=201=20:encoding=20:custom)=0A+=20=20=20(s8.16-transpose-even=20=
#:trn1=20=20(s8.16)=20(s8.16=20s8.16)=20:cost=201=20:suffix=20'(:16b))=0A=
+=20=20=20(s8.16-transpose-odd=20#:trn2=20=20=20(s8.16)=20(s8.16=20=
s8.16)=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20(s8.16-unzip-even=20=20=
#:uzp1=20=20=20=20=20(s8.16)=20(s8.16=20s8.16)=20:cost=201=20:suffix=20=
'(:16b))=0A+=20=20=20(s8.16-unzip-odd=20=20=20#:uzp2=20=20=20=20=20=
(s8.16)=20(s8.16=20s8.16)=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20=
(s8.16-zip-even=20=20=20=20#:zip1=20=20=20=20=20(s8.16)=20(s8.16=20=
s8.16)=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20(s8.16-zip-odd=20=20=20=
=20=20#:zip2=20=20=20=20=20(s8.16)=20(s8.16=20s8.16)=20:cost=201=20=
:suffix=20'(:16b))=0A+=20=20=20;;=20s16=0A+=20=20=20(s16!-from-p128=20=20=
=20=20#:smov=20=20=20=20=20(s16)=20(p128)=20=20=20=20=20=20=20=20=20=20=
:cost=201=20:encoding=20:move=20:suffix=20'(0=20:h)=20=
:always-translatable=20nil)=0A+=20=20=20;;=20s16.8=0A+=20=20=20=
(s16.8!-from-s16=20=20=20nil=20=20=20=20=20=20=20=20(s16.8)=20(s16)=20=20=
=20=20=20=20=20=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(s16.8!-from-p128=20=20#:mov=20=20=20=20=20=20(s16.8)=20(p128)=20=20=20=20=
=20=20=20=20:cost=201=20:encoding=20:move=20:always-translatable=20nil=20=
:suffix=20'(:16b))=0A+=20=20=20(s16.8-from-s8.16=20=20nil=20=20=20=20=20=20=
=20=20(s16.8)=20(s8.16)=20=20=20=20=20=20=20:cost=201=20:encoding=20=
:custom)=0A+=20=20=20(s16.8-from-s8.16-hi=20nil=20=20=20=20=20=20(s16.8)=20=
(s8.16)=20=20=20=20=20=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(s16.8-from-s32.4=20=20#:xtn=20=20=20=20=20=20(s16.8)=20(s32.4)=20=20=20=20=
=20=20=20:cost=201=20:suffix=20'(:4h))=0A+=20=20=20(s16.8-from-s32.4-hi=20=
#:xtn2=20=20=20(s16.8)=20(s16.8=20s32.4)=20:cost=201=20:encoding=20=
:neon-rmw=20:suffix=20'(:8h))=0A+=20=20=20(s16.8-from-s32.4-saturating=20=
#:sqxtn=20(s16.8)=20(s32.4)=20=20:cost=201=20:suffix=20'(:4h))=0A+=20=20=20=
(s16.8-from-s32.4-saturating-hi=20#:sqxtn2=20(s16.8)=20(s16.8=20s32.4)=20=
:cost=201=20:encoding=20:neon-rmw=20:suffix=20'(:8h))=0A+=20=20=20=
(make-s16.8=20=20=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(s16.8)=20=
(s16=20s16=20s16=20s16=20s16=20s16=20s16=20s16)=20:cost=201=20:encoding=20=
:fake-vop)=0A+=20=20=20(s16.8-values=20=20=20=20=20=20nil=20=20=20=20=20=20=
=20=20(s16=20s16=20s16=20s16=20s16=20s16=20s16=20s16)=20(s16.8)=20:cost=20=
1=20:encoding=20:fake-vop)=0A+=20=20=20(s16.8-broadcast=20=20=20#:dup=20=20=
=20=20=20=20(s16.8)=20(s16)=20=20=20=20=20=20=20=20=20:cost=201=20=
:suffix=20'(:8h))=0A+=20=20=20(two-arg-s16.8-and=20#:and=20=20=20=20=20=20=
(s16.8)=20(s16.8=20s16.8)=20:cost=201=20:associative=20t=20:suffix=20=
'(:16b))=0A+=20=20=20(two-arg-s16.8-or=20=20#:orr=20=20=20=20=20=20=
(s16.8)=20(s16.8=20s16.8)=20:cost=201=20:associative=20t=20:suffix=20=
'(:16b))=0A+=20=20=20(two-arg-s16.8-xor=20#:eor=20=20=20=20=20=20(s16.8)=20=
(s16.8=20s16.8)=20:cost=201=20:associative=20t=20:suffix=20'(:16b))=0A+=20=
=20=20(two-arg-s16.8-max=20#:smax=20=20=20=20=20(s16.8)=20(s16.8=20=
s16.8)=20:cost=203=20:associative=20t=20:suffix=20'(:8h))=0A+=20=20=20=
(two-arg-s16.8-min=20#:smin=20=20=20=20=20(s16.8)=20(s16.8=20s16.8)=20=
:cost=203=20:associative=20t=20:suffix=20'(:8h))=0A+=20=20=20=
(s16.8-andc1=20=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(s16.8)=20=
(s16.8=20s16.8)=20:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20=
(s16.8-andc2=20=20=20=20=20=20=20#:bic=20=20=20=20=20=20(s16.8)=20(s16.8=20=
s16.8)=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20(s16.8-not=20=20=20=20=
=20=20=20=20=20#:not=20=20=20=20=20=20(s16.8)=20(s16.8)=20=20=20=20=20=20=
=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20(two-arg-s16.8+=20=20=20=20=
#:add=20=20=20=20=20=20(s16.8)=20(s16.8=20s16.8)=20:cost=202=20:suffix=20=
'(:8h)=20:associative=20t)=0A+=20=20=20(two-arg-s16.8+-saturating=20=
#:sqadd=20(s16.8)=20(s16.8=20s16.8)=20:cost=202=20:suffix=20'(:8h)=20=
:associative=20t)=0A+=20=20=20(two-arg-s16.8-=20=20=20=20#:sub=20=20=20=20=
=20=20(s16.8)=20(s16.8=20s16.8)=20:cost=202=20:suffix=20'(:8h))=0A+=20=20=
=20(two-arg-s16.8--saturating=20#:sqsub=20(s16.8)=20(s16.8=20s16.8)=20=
:cost=202=20:suffix=20'(:8h))=0A+=20=20=20(two-arg-s16.8*=20=20=20=20=
#:mul=20=20=20=20=20=20(s16.8)=20(s16.8=20s16.8)=20:cost=202=20:suffix=20=
'(:8h)=20:associative=20t)=0A+=20=20=20(two-arg-s16.8=3D=20=20=20=20=
#:cmeq=20=20=20=20=20(u16.8)=20(s16.8=20s16.8)=20:cost=201=20:suffix=20=
'(:8h))=0A+=20=20=20(two-arg-s16.8/=3D=20=20=20nil=20=20=20=20=20=20=20=20=
(u16.8)=20(s16.8=20s16.8)=20:cost=202=20:associative=20t=20:encoding=20=
:fake-vop)=0A+=20=20=20(two-arg-s16.8>=20=20=20=20#:cmgt=20=20=20=20=20=
(u16.8)=20(s16.8=20s16.8)=20:cost=201=20:suffix=20'(:8h))=0A+=20=20=20=
(two-arg-s16.8<=20=20=20=20nil=20=20=20=20=20=20=20=20(u16.8)=20(s16.8=20=
s16.8)=20:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20(two-arg-s16.8>=3D=
=20=20=20#:cmge=20=20=20=20=20(u16.8)=20(s16.8=20s16.8)=20:cost=201=20=
:suffix=20'(:8h))=0A+=20=20=20(two-arg-s16.8<=3D=20=20=20nil=20=20=20=20=20=
=20=20=20(u16.8)=20(s16.8=20s16.8)=20:cost=201=20:encoding=20:fake-vop)=0A=
+=20=20=20(s16.8-pair-min=20=20=20=20#:sminp=20=20=20=20(s16.8)=20(s16.8=20=
s16.8)=20:cost=202=20:suffix=20'(:8h)=20:associative=20t)=0A+=20=20=20=
(s16.8-horizontal-min=20#:sminv=20(s16)=20(s16.8)=20=20=20=20=20=20=20=20=
=20:cost=202=20:encoding=20:neon-int-result=20:suffix=20'(:8h)=20=
:associative=20t)=0A+=20=20=20(s16.8-pair-max=20=20=20=20#:smaxp=20=20=20=
=20(s16.8)=20(s16.8=20s16.8)=20:cost=202=20:suffix=20'(:8h)=20=
:associative=20t)=0A+=20=20=20(s16.8-horizontal-max=20#:smaxv=20(s16)=20=
(s16.8)=20=20=20=20=20=20=20=20=20:cost=202=20:encoding=20=
:neon-int-result=20:suffix=20'(:8h)=20:associative=20t)=0A+=20=20=20=
(s16.8-pair+=20=20=20=20=20=20=20#:addp=20=20=20=20=20(s16.8)=20(s16.8=20=
s16.8)=20:cost=202=20:suffix=20'(:8h)=20:associative=20t)=0A+=20=20=20=
(s16.8-horizontal+=20#:addv=20=20=20=20=20(s16)=20(s16.8)=20=20=20=20=20=20=
=20=20=20:cost=202=20:encoding=20:neon-int-result=20:suffix=20'(:8h)=20=
:associative=20t)=0A+=20=20=20(s16.8-shiftr=20=20=20=20=20=20nil=20=20=20=
=20=20=20=20=20(s16.8)=20(s16.8=20imm4)=20=20:cost=201=20:encoding=20=
:custom)=0A+=20=20=20(s16.8-shiftl=20=20=20=20=20=20nil=20=20=20=20=20=20=
=20=20(s16.8)=20(s16.8=20imm4)=20=20:cost=201=20:encoding=20:custom)=0A+=20=
=20=20(s16.8-shiftl-long=20nil=20=20=20=20=20=20=20=20(s32.4)=20(s16.8=20=
imm4)=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(s16.8-shiftl-long-hi=20nil=20=20=20=20=20(s32.4)=20(s16.8=20imm4)=20=20=
:cost=201=20:encoding=20:custom)=0A+=20=20=20(s16.8-bit-select=20=20=
#:bsl=20=20=20=20=20=20(s16.8)=20(u16.8=20s16.8=20s16.8)=20:cost=201=20=
:encoding=20:neon-rmw=20:suffix=20'(:16b))=0A+=20=20=20=
(s16.8-lane-extract=20nil=20=20=20=20=20=20=20(s16)=20(s16.8=20imm3)=20=20=
=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20(s16.8-lane-insert=20=
nil=20=20=20=20=20=20=20=20(s16.8)=20(s16.8=20s16=20imm3)=20:cost=201=20=
:encoding=20:custom)=0A+=20=20=20(s16.8-dup=20=20=20=20=20=20=20=20=20=
nil=20=20=20=20=20=20=20=20(s16.8)=20(s16.8=20imm3)=20=20:cost=201=20=
:encoding=20:custom)=0A+=20=20=20(s16.8-ins=20=20=20=20=20=20=20=20=20=
nil=20=20=20=20=20=20=20=20(s16.8)=20(s16.8=20s16.8=20imm3=20imm3)=20=
:cost=201=20:encoding=20:custom)=0A+=20=20=20(s16.8-transpose-even=20=
#:trn1=20=20(s16.8)=20(s16.8=20s16.8)=20:cost=201=20:suffix=20'(:8h))=0A=
+=20=20=20(s16.8-transpose-odd=20#:trn2=20=20=20(s16.8)=20(s16.8=20=
s16.8)=20:cost=201=20:suffix=20'(:8h))=0A+=20=20=20(s16.8-unzip-even=20=20=
#:uzp1=20=20=20=20=20(s16.8)=20(s16.8=20s16.8)=20:cost=201=20:suffix=20=
'(:8h))=0A+=20=20=20(s16.8-unzip-odd=20=20=20#:uzp2=20=20=20=20=20=
(s16.8)=20(s16.8=20s16.8)=20:cost=201=20:suffix=20'(:8h))=0A+=20=20=20=
(s16.8-zip-even=20=20=20=20#:zip1=20=20=20=20=20(s16.8)=20(s16.8=20=
s16.8)=20:cost=201=20:suffix=20'(:8h))=0A+=20=20=20(s16.8-zip-odd=20=20=20=
=20=20#:zip2=20=20=20=20=20(s16.8)=20(s16.8=20s16.8)=20:cost=201=20=
:suffix=20'(:8h))=0A+=20=20=20;;=20s32=0A+=20=20=20(s32!-from-p128=20=20=20=
=20#:smov=20=20=20=20=20(s32)=20(p128)=20=20=20=20=20=20=20=20=20=20=
:cost=201=20:encoding=20:move=20:suffix=20'(0=20:s)=20=
:always-translatable=20nil)=0A+=20=20=20;;=20s32.4=0A+=20=20=20=
(s32.4!-from-s32=20=20=20nil=20=20=20=20=20=20=20=20(s32.4)=20(s32)=20=20=
=20=20=20=20=20=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(s32.4!-from-p128=20=20#:mov=20=20=20=20=20=20(s32.4)=20(p128)=20=20=20=20=
=20=20=20=20:cost=201=20:encoding=20:move=20:always-translatable=20nil=20=
:suffix=20'(:16b))=0A+=20=20=20(s32.4-from-f32.4=20=20#:fcvtns=20=20=20=
(s32.4)=20(f32.4)=20=20=20=20=20=20=20:cost=205=20:suffix=20'(:4s))=0A+=20=
=20=20(s32.4-from-s16.8=20=20nil=20=20=20=20=20=20=20=20(s32.4)=20=
(s16.8)=20=20=20=20=20=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(s32.4-from-s16.8-hi=20nil=20=20=20=20=20=20(s32.4)=20(s16.8)=20=20=20=20=
=20=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20(s32.4-from-s64.2=20=
=20#:xtn=20=20=20=20=20=20(s32.4)=20(s64.2)=20=20=20=20=20=20=20:cost=20=
1=20:suffix=20'(:4h))=0A+=20=20=20(s32.4-from-s64.2-hi=20#:xtn2=20=20=20=
(s32.4)=20(s32.4=20s64.2)=20:cost=201=20:encoding=20:neon-rmw=20:suffix=20=
'(:8h))=0A+=20=20=20(s32.4-from-s64.2-saturating=20#:sqxtn=20(s32.4)=20=
(s64.2)=20:cost=201=20:suffix=20'(:4h))=0A+=20=20=20=
(s32.4-from-s64.2-saturating-hi=20#:sqxtn2=20(s32.4)=20(s32.4=20s64.2)=20=
:cost=201=20:encoding=20:neon-rmw=20:suffix=20'(:8h))=0A+=20=20=20=
(make-s32.4=20=20=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(s32.4)=20=
(s32=20s32=20s32=20s32)=20:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20=
(s32.4-values=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(s32=20s32=20=
s32=20s32)=20(s32.4)=20:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20=
(s32.4-broadcast=20=20=20#:dup=20=20=20=20=20=20(s32.4)=20(s32)=20=20=20=20=
=20=20=20=20=20:cost=201=20:suffix=20'(:4s))=0A+=20=20=20=
(two-arg-s32.4-and=20#:and=20=20=20=20=20=20(s32.4)=20(s32.4=20s32.4)=20=
:cost=201=20:associative=20t=20:suffix=20'(:16b))=0A+=20=20=20=
(two-arg-s32.4-or=20=20#:orr=20=20=20=20=20=20(s32.4)=20(s32.4=20s32.4)=20=
:cost=201=20:associative=20t=20:suffix=20'(:16b))=0A+=20=20=20=
(two-arg-s32.4-xor=20#:eor=20=20=20=20=20=20(s32.4)=20(s32.4=20s32.4)=20=
:cost=201=20:associative=20t=20:suffix=20'(:16b))=0A+=20=20=20=
(two-arg-s32.4-max=20#:smax=20=20=20=20=20(s32.4)=20(s32.4=20s32.4)=20=
:cost=203=20:associative=20t=20:suffix=20'(:4s))=0A+=20=20=20=
(two-arg-s32.4-min=20#:smin=20=20=20=20=20(s32.4)=20(s32.4=20s32.4)=20=
:cost=203=20:associative=20t=20:suffix=20'(:4s))=0A+=20=20=20=
(s32.4-andc1=20=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(s32.4)=20=
(s32.4=20s32.4)=20:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20=
(s32.4-andc2=20=20=20=20=20=20=20#:bic=20=20=20=20=20=20(s32.4)=20(s32.4=20=
s32.4)=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20(s32.4-not=20=20=20=20=
=20=20=20=20=20#:not=20=20=20=20=20=20(s32.4)=20(s32.4)=20=20=20=20=20=20=
=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20(two-arg-s32.4+=20=20=20=20=
#:add=20=20=20=20=20=20(s32.4)=20(s32.4=20s32.4)=20:cost=202=20:suffix=20=
'(:4s)=20:associative=20t)=0A+=20=20=20(two-arg-s32.4+-saturating=20=
#:sqadd=20(s32.4)=20(s32.4=20s32.4)=20:cost=202=20:suffix=20'(:4s)=20=
:associative=20t)=0A+=20=20=20(two-arg-s32.4-=20=20=20=20#:sub=20=20=20=20=
=20=20(s32.4)=20(s32.4=20s32.4)=20:cost=202=20:suffix=20'(:4s))=0A+=20=20=
=20(two-arg-s32.4--saturating=20#:sqsub=20(s32.4)=20(s32.4=20s32.4)=20=
:cost=202=20:suffix=20'(:4s))=0A+=20=20=20(two-arg-s32.4*=20=20=20=20=
#:mul=20=20=20=20=20=20(s32.4)=20(s32.4=20s32.4)=20:cost=202=20:suffix=20=
'(:4s)=20:associative=20t)=0A+=20=20=20(two-arg-s32.4=3D=20=20=20=20=
#:cmeq=20=20=20=20=20(u32.4)=20(s32.4=20s32.4)=20:cost=201=20:suffix=20=
'(:4s))=0A+=20=20=20(two-arg-s32.4/=3D=20=20=20nil=20=20=20=20=20=20=20=20=
(u32.4)=20(s32.4=20s32.4)=20:cost=202=20:associative=20t=20:encoding=20=
:fake-vop)=0A+=20=20=20(two-arg-s32.4>=20=20=20=20#:cmgt=20=20=20=20=20=
(u32.4)=20(s32.4=20s32.4)=20:cost=201=20:suffix=20'(:4s))=0A+=20=20=20=
(two-arg-s32.4<=20=20=20=20nil=20=20=20=20=20=20=20=20(u32.4)=20(s32.4=20=
s32.4)=20:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20(two-arg-s32.4>=3D=
=20=20=20#:cmge=20=20=20=20=20(u32.4)=20(s32.4=20s32.4)=20:cost=201=20=
:suffix=20'(:4s))=0A+=20=20=20(two-arg-s32.4<=3D=20=20=20nil=20=20=20=20=20=
=20=20=20(u32.4)=20(s32.4=20s32.4)=20:cost=201=20:encoding=20:fake-vop)=0A=
+=20=20=20(s32.4-pair-min=20=20=20=20#:sminp=20=20=20=20(s32.4)=20(s32.4=20=
s32.4)=20:cost=202=20:suffix=20'(:4s)=20:associative=20t)=0A+=20=20=20=
(s32.4-horizontal-min=20#:sminv=20(s32)=20(s32.4)=20=20=20=20=20=20=20=20=
=20:cost=202=20:encoding=20:neon-int-result=20:suffix=20'(:4s)=20=
:associative=20t)=0A+=20=20=20(s32.4-pair-max=20=20=20=20#:smaxp=20=20=20=
=20(s32.4)=20(s32.4=20s32.4)=20:cost=202=20:suffix=20'(:4s)=20=
:associative=20t)=0A+=20=20=20(s32.4-horizontal-max=20#:smaxv=20(s32)=20=
(s32.4)=20=20=20=20=20=20=20=20=20:cost=202=20:encoding=20=
:neon-int-result=20:suffix=20'(:4s)=20:associative=20t)=0A+=20=20=20=
(s32.4-pair+=20=20=20=20=20=20=20#:addp=20=20=20=20=20(s32.4)=20(s32.4=20=
s32.4)=20:cost=202=20:suffix=20'(:4s)=20:associative=20t)=0A+=20=20=20=
(s32.4-horizontal+=20#:addv=20=20=20=20=20(s32)=20(s32.4)=20=20=20=20=20=20=
=20=20=20:cost=202=20:encoding=20:neon-int-result=20:suffix=20'(:4s)=20=
:associative=20t)=0A+=20=20=20(s32.4-shiftr=20=20=20=20=20=20nil=20=20=20=
=20=20=20=20=20(s32.4)=20(s32.4=20imm5)=20=20:cost=201=20:encoding=20=
:custom)=0A+=20=20=20(s32.4-shiftl=20=20=20=20=20=20nil=20=20=20=20=20=20=
=20=20(s32.4)=20(s32.4=20imm5)=20=20:cost=201=20:encoding=20:custom)=0A+=20=
=20=20(s32.4-shiftl-long=20nil=20=20=20=20=20=20=20=20(s64.2)=20(s32.4=20=
imm5)=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(s32.4-shiftl-long-hi=20nil=20=20=20=20=20(s64.2)=20(s32.4=20imm5)=20=20=
:cost=201=20:encoding=20:custom)=0A+=20=20=20(s32.4-bit-select=20=20=
#:bsl=20=20=20=20=20=20(s32.4)=20(u32.4=20s32.4=20s32.4)=20:cost=201=20=
:encoding=20:neon-rmw=20:suffix=20'(:16b))=0A+=20=20=20=
(s32.4-lane-extract=20nil=20=20=20=20=20=20=20(s32)=20(s32.4=20imm2)=20=20=
=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20(s32.4-lane-insert=20=
nil=20=20=20=20=20=20=20=20(s32.4)=20(s32.4=20s32=20imm2)=20:cost=201=20=
:encoding=20:custom)=0A+=20=20=20(s32.4-dup=20=20=20=20=20=20=20=20=20=
nil=20=20=20=20=20=20=20=20(s32.4)=20(s32.4=20imm2)=20=20:cost=201=20=
:encoding=20:custom)=0A+=20=20=20(s32.4-ins=20=20=20=20=20=20=20=20=20=
nil=20=20=20=20=20=20=20=20(s32.4)=20(s32.4=20s32.4=20imm2=20imm2)=20=
:cost=201=20:encoding=20:custom)=0A+=20=20=20(s32.4-transpose-even=20=
#:trn1=20=20(s32.4)=20(s32.4=20s32.4)=20:cost=201=20:suffix=20'(:4s))=0A=
+=20=20=20(s32.4-transpose-odd=20#:trn2=20=20=20(s32.4)=20(s32.4=20=
s32.4)=20:cost=201=20:suffix=20'(:4s))=0A+=20=20=20(s32.4-unzip-even=20=20=
#:uzp1=20=20=20=20=20(s32.4)=20(s32.4=20s32.4)=20:cost=201=20:suffix=20=
'(:4s))=0A+=20=20=20(s32.4-unzip-odd=20=20=20#:uzp2=20=20=20=20=20=
(s32.4)=20(s32.4=20s32.4)=20:cost=201=20:suffix=20'(:4s))=0A+=20=20=20=
(s32.4-zip-even=20=20=20=20#:zip1=20=20=20=20=20(s32.4)=20(s32.4=20=
s32.4)=20:cost=201=20:suffix=20'(:4s))=0A+=20=20=20(s32.4-zip-odd=20=20=20=
=20=20#:zip2=20=20=20=20=20(s32.4)=20(s32.4=20s32.4)=20:cost=201=20=
:suffix=20'(:4s))=0A+=20=20=20;;=20s64=0A+=20=20=20(s64!-from-p128=20=20=20=
=20#:umov=20=20=20=20=20(s64)=20(p128)=20=20=20=20=20=20=20=20=20=20=
:cost=201=20:encoding=20:move=20:suffix=20'(0=20:d)=20=
:always-translatable=20nil)=0A+=20=20=20;;=20s64.2=0A+=20=20=20=
(s64.2!-from-s64=20=20=20nil=20=20=20=20=20=20=20=20(s64.2)=20(s64)=20=20=
=20=20=20=20=20=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(s64.2!-from-p128=20=20#:mov=20=20=20=20=20=20(s64.2)=20(p128)=20=20=20=20=
=20=20=20=20:cost=201=20:encoding=20:move=20:always-translatable=20nil=20=
:suffix=20'(:16b))=0A+=20=20=20(s64.2-from-f64.2=20=20#:fcvtns=20=20=20=
(s64.2)=20(f64.2)=20=20=20=20=20=20=20:cost=205=20:suffix=20'(:2d))=0A+=20=
=20=20(s64.2-from-s32.4=20=20nil=20=20=20=20=20=20=20=20(s64.2)=20=
(s32.4)=20=20=20=20=20=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(s64.2-from-s32.4-hi=20nil=20=20=20=20=20=20(s64.2)=20(s32.4)=20=20=20=20=
=20=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20(make-s64.2=20=20=20=
=20=20=20=20=20nil=20=20=20=20=20=20=20=20(s64.2)=20(s64=20s64)=20=20=20=20=
=20:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20(s64.2-values=20=20=20=20=
=20=20nil=20=20=20=20=20=20=20=20(s64=20s64)=20(s64.2)=20=20=20=20=20=
:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20(s64.2-broadcast=20=20=20=
#:dup=20=20=20=20=20=20(s64.2)=20(s64)=20=20=20=20=20=20=20=20=20:cost=20=
1=20:suffix=20'(:2d))=0A+=20=20=20(two-arg-s64.2-and=20#:and=20=20=20=20=20=
=20(s64.2)=20(s64.2=20s64.2)=20:cost=201=20:associative=20t=20:suffix=20=
'(:16b))=0A+=20=20=20(two-arg-s64.2-or=20=20#:orr=20=20=20=20=20=20=
(s64.2)=20(s64.2=20s64.2)=20:cost=201=20:associative=20t=20:suffix=20=
'(:16b))=0A+=20=20=20(two-arg-s64.2-xor=20#:eor=20=20=20=20=20=20(s64.2)=20=
(s64.2=20s64.2)=20:cost=201=20:associative=20t=20:suffix=20'(:16b))=0A+=20=
=20=20(two-arg-s64.2-max=20#:smax=20=20=20=20=20(s64.2)=20(s64.2=20=
s64.2)=20:cost=203=20:associative=20t=20:suffix=20'(:2d))=0A+=20=20=20=
(two-arg-s64.2-min=20#:smin=20=20=20=20=20(s64.2)=20(s64.2=20s64.2)=20=
:cost=203=20:associative=20t=20:suffix=20'(:2d))=0A+=20=20=20=
(s64.2-andc1=20=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(s64.2)=20=
(s64.2=20s64.2)=20:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20=
(s64.2-andc2=20=20=20=20=20=20=20#:bic=20=20=20=20=20=20(s64.2)=20(s64.2=20=
s64.2)=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20(s64.2-not=20=20=20=20=
=20=20=20=20=20#:not=20=20=20=20=20=20(s64.2)=20(s64.2)=20=20=20=20=20=20=
=20:cost=201=20:suffix=20'(:16b))=0A+=20=20=20(two-arg-s64.2+=20=20=20=20=
#:add=20=20=20=20=20=20(s64.2)=20(s64.2=20s64.2)=20:cost=202=20:suffix=20=
'(:2d)=20:associative=20t)=0A+=20=20=20(two-arg-s64.2+-saturating=20=
#:sqadd=20(s64.2)=20(s64.2=20s64.2)=20:cost=202=20:suffix=20'(:2d)=20=
:associative=20t)=0A+=20=20=20(two-arg-s64.2-=20=20=20=20#:sub=20=20=20=20=
=20=20(s64.2)=20(s64.2=20s64.2)=20:cost=202=20:suffix=20'(:2d))=0A+=20=20=
=20(two-arg-s64.2--saturating=20#:sqsub=20(s64.2)=20(s64.2=20s64.2)=20=
:cost=202=20:suffix=20'(:2d))=0A+=20=20=20(two-arg-s64.2*=20=20=20=20=
#:mul=20=20=20=20=20=20(s64.2)=20(s64.2=20s64.2)=20:cost=202=20:suffix=20=
'(:2d)=20:associative=20t)=0A+=20=20=20(two-arg-s64.2=3D=20=20=20=20=
#:cmeq=20=20=20=20=20(u64.2)=20(s64.2=20s64.2)=20:cost=201=20:suffix=20=
'(:2d))=0A+=20=20=20(two-arg-s64.2/=3D=20=20=20nil=20=20=20=20=20=20=20=20=
(u64.2)=20(s64.2=20s64.2)=20:cost=202=20:associative=20t=20:encoding=20=
:fake-vop)=0A+=20=20=20(two-arg-s64.2>=20=20=20=20#:cmgt=20=20=20=20=20=
(u64.2)=20(s64.2=20s64.2)=20:cost=201=20:suffix=20'(:2d))=0A+=20=20=20=
(two-arg-s64.2<=20=20=20=20nil=20=20=20=20=20=20=20=20(u64.2)=20(s64.2=20=
s64.2)=20:cost=201=20:encoding=20:fake-vop)=0A+=20=20=20(two-arg-s64.2>=3D=
=20=20=20#:cmge=20=20=20=20=20(u64.2)=20(s64.2=20s64.2)=20:cost=201=20=
:suffix=20'(:2d))=0A+=20=20=20(two-arg-s64.2<=3D=20=20=20nil=20=20=20=20=20=
=20=20=20(u64.2)=20(s64.2=20s64.2)=20:cost=201=20:encoding=20:fake-vop)=0A=
+=20=20=20(s64.2-pair-min=20=20=20=20nil=20=20=20=20=20=20=20=20(s64.2)=20=
(s64.2=20s64.2)=20:cost=202=20:encoding=20:fake-vop=20:associative=20t)=0A=
+=20=20=20(s64.2-horizontal-min=20nil=20=20=20=20=20(s64)=20(s64.2)=20=20=
=20=20=20=20=20=20=20:cost=202=20:encoding=20:fake-vop=20:associative=20=
t)=0A+=20=20=20(s64.2-pair-max=20=20=20=20nil=20=20=20=20=20=20=20=20=
(s64.2)=20(s64.2=20s64.2)=20:cost=202=20:encoding=20:fake-vop=20=
:associative=20t)=0A+=20=20=20(s64.2-horizontal-max=20nil=20=20=20=20=20=
(s64)=20(s64.2)=20=20=20=20=20=20=20=20=20:cost=202=20:encoding=20=
:fake-vop=20:associative=20t)=0A+=20=20=20(s64.2-pair+=20=20=20=20=20=20=20=
nil=20=20=20=20=20=20=20=20(s64.2)=20(s64.2=20s64.2)=20:cost=202=20=
:encoding=20:fake-vop=20:associative=20t)=0A+=20=20=20(s64.2-horizontal+=20=
nil=20=20=20=20=20=20=20=20(s64)=20(s64.2)=20=20=20=20=20=20=20=20=20=
:cost=202=20:encoding=20:fake-vop=20:associative=20t)=0A+=20=20=20=
(s64.2-shiftr=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(s64.2)=20=
(s64.2=20imm6)=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(s64.2-shiftl=20=20=20=20=20=20nil=20=20=20=20=20=20=20=20(s64.2)=20=
(s64.2=20imm6)=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20=
(s64.2-bit-select=20=20#:bsl=20=20=20=20=20=20(s64.2)=20(u64.2=20s64.2=20=
s64.2)=20:cost=201=20:encoding=20:neon-rmw=20:suffix=20'(:16b))=0A+=20=20=
=20(s64.2-lane-extract=20nil=20=20=20=20=20=20=20(s64)=20(s64.2=20imm1)=20=
=20=20=20:cost=201=20:encoding=20:custom)=0A+=20=20=20(s64.2-lane-insert=20=
nil=20=20=20=20=20=20=20=20(s64.2)=20(s64.2=20s64=20imm1)=20:cost=201=20=
:encoding=20:custom)=0A+=20=20=20(s64.2-dup=20=20=20=20=20=20=20=20=20=
nil=20=20=20=20=20=20=20=20(s64.2)=20(s64.2=20imm1)=20=20:cost=201=20=
:encoding=20:custom)=0A+=20=20=20(s64.2-ins=20=20=20=20=20=20=20=20=20=
nil=20=20=20=20=20=20=20=20(s64.2)=20(s64.2=20s64.2=20imm1=20imm1)=20=
:cost=201=20:encoding=20:custom)=0A+=20=20=20(s64.2-transpose-even=20=
#:trn1=20=20(s64.2)=20(s64.2=20s64.2)=20:cost=201=20:suffix=20'(:2d))=0A=
+=20=20=20(s64.2-transpose-odd=20#:trn2=20=20=20(s64.2)=20(s64.2=20=
s64.2)=20:cost=201=20:suffix=20'(:2d))=0A+=20=20=20(s64.2-unzip-even=20=20=
#:uzp1=20=20=20=20=20(s64.2)=20(s64.2=20s64.2)=20:cost=201=20:suffix=20=
'(:2d))=0A+=20=20=20(s64.2-unzip-odd=20=20=20#:uzp2=20=20=20=20=20=
(s64.2)=20(s64.2=20s64.2)=20:cost=201=20:suffix=20'(:2d))=0A+=20=20=20=
(s64.2-zip-even=20=20=20=20#:zip1=20=20=20=20=20(s64.2)=20(s64.2=20=
s64.2)=20:cost=201=20:suffix=20'(:2d))=0A+=20=20=20(s64.2-zip-odd=20=20=20=
=20=20#:zip2=20=20=20=20=20(s64.2)=20(s64.2=20s64.2)=20:cost=201=20=
:suffix=20'(:2d)))=0A+=20=20(:loads=0A+=20=20=20#+sb-unicode=0A+=20=20=20=
(u32.4-load-from-string=20#:ldr=20u32.4=20charvec=20char-array=20=
u32.4-string-ref=20u32.4-row-major-string-ref)=0A+=20=20=20(f32.4-load=20=
=20=20=20=20=20=20=20#:ldr=20=20f32.4=20f32vec=20f32-array=20f32.4-aref=20=
f32.4-row-major-aref)=0A+=20=20=20(f64.2-load=20=20=20=20=20=20=20=20=
#:ldr=20=20f64.2=20f64vec=20f64-array=20f64.2-aref=20=
f64.2-row-major-aref)=0A+=20=20=20(u8.16-load=20=20=20=20=20=20=20=20=
#:ldr=20=20u8.16=20u8vec=20=20u8-array=20=20u8.16-aref=20=
u8.16-row-major-aref)=0A+=20=20=20(u16.8-load=20=20=20=20=20=20=20=20=
#:ldr=20=20u16.8=20u16vec=20u16-array=20u16.8-aref=20=
u16.8-row-major-aref)=0A+=20=20=20(u32.4-load=20=20=20=20=20=20=20=20=
#:ldr=20=20u32.4=20u32vec=20u32-array=20u32.4-aref=20=
u32.4-row-major-aref)=0A+=20=20=20(u64.2-load=20=20=20=20=20=20=20=20=
#:ldr=20=20u64.2=20u64vec=20u64-array=20u64.2-aref=20=
u64.2-row-major-aref)=0A+=20=20=20(s8.16-load=20=20=20=20=20=20=20=20=
#:ldr=20=20s8.16=20s8vec=20=20s8-array=20=20s8.16-aref=20=
s8.16-row-major-aref)=0A+=20=20=20(s16.8-load=20=20=20=20=20=20=20=20=
#:ldr=20=20s16.8=20s16vec=20s16-array=20s16.8-aref=20=
s16.8-row-major-aref)=0A+=20=20=20(s32.4-load=20=20=20=20=20=20=20=20=
#:ldr=20=20s32.4=20s32vec=20s32-array=20s32.4-aref=20=
s32.4-row-major-aref)=0A+=20=20=20(s64.2-load=20=20=20=20=20=20=20=20=
#:ldr=20=20s64.2=20s64vec=20s64-array=20s64.2-aref=20=
s64.2-row-major-aref))=0A+=20=20(:stores=0A+=20=20=20#+sb-unicode=0A+=20=20=
=20(u32.4-store-into-string=20#:str=20u32.4=20charvec=20char-array=20=
u32.4-string-ref=20u32.4-row-major-string-ref)=0A+=20=20=20(f32.4-store=20=
=20=20=20=20=20=20#:str=20=20f32.4=20f32vec=20f32-array=20f32.4-aref=20=
f32.4-row-major-aref)=0A+=20=20=20(f64.2-store=20=20=20=20=20=20=20#:str=20=
=20f64.2=20f64vec=20f64-array=20f64.2-aref=20f64.2-row-major-aref)=0A+=20=
=20=20(u8.16-store=20=20=20=20=20=20=20#:str=20=20u8.16=20u8vec=20=20=
u8-array=20=20u8.16-aref=20u8.16-row-major-aref)=0A+=20=20=20=
(u16.8-store=20=20=20=20=20=20=20#:str=20=20u16.8=20u16vec=20u16-array=20=
u16.8-aref=20u16.8-row-major-aref)=0A+=20=20=20(u32.4-store=20=20=20=20=20=
=20=20#:str=20=20u32.4=20u32vec=20u32-array=20u32.4-aref=20=
u32.4-row-major-aref)=0A+=20=20=20(u64.2-store=20=20=20=20=20=20=20#:str=20=
=20u64.2=20u64vec=20u64-array=20u64.2-aref=20u64.2-row-major-aref)=0A+=20=
=20=20(s8.16-store=20=20=20=20=20=20=20#:str=20=20s8.16=20s8vec=20=20=
s8-array=20=20s8.16-aref=20s8.16-row-major-aref)=0A+=20=20=20=
(s16.8-store=20=20=20=20=20=20=20#:str=20=20s16.8=20s16vec=20s16-array=20=
s16.8-aref=20s16.8-row-major-aref)=0A+=20=20=20(s32.4-store=20=20=20=20=20=
=20=20#:str=20=20s32.4=20s32vec=20s32-array=20s32.4-aref=20=
s32.4-row-major-aref)=0A+=20=20=20(s64.2-store=20=20=20=20=20=20=20#:str=20=
=20s64.2=20s64vec=20s64-array=20s64.2-aref=20s64.2-row-major-aref))=0A+=20=
=20(:associatives=0A+=20=20=20(f32.4-and=20two-arg-f32.4-and=20=
+f32-true+)=0A+=20=20=20(f32.4-or=20=20two-arg-f32.4-or=20=20=
+f32-false+)=0A+=20=20=20(f32.4-xor=20two-arg-f32.4-xor=20+f32-false+)=0A=
+=20=20=20(f32.4-max=20two-arg-f32.4-max=20nil)=0A+=20=20=20(f32.4-min=20=
two-arg-f32.4-min=20nil)=0A+=20=20=20(f32.4+=20=20=20=20two-arg-f32.4+=20=
0f0)=0A+=20=20=20(f32.4*=20=20=20=20two-arg-f32.4*=201f0)=0A+=20=20=20=
(f64.2-and=20two-arg-f64.2-and=20+f64-true+)=0A+=20=20=20(f64.2-or=20=20=
two-arg-f64.2-or=20=20+f64-false+)=0A+=20=20=20(f64.2-xor=20=
two-arg-f64.2-xor=20+f64-false+)=0A+=20=20=20(f64.2-max=20=
two-arg-f64.2-max=20nil)=0A+=20=20=20(f64.2-min=20two-arg-f64.2-min=20=
nil)=0A+=20=20=20(f64.2+=20=20=20=20two-arg-f64.2+=200f0)=0A+=20=20=20=
(f64.2*=20=20=20=20two-arg-f64.2*=201f0)=0A+=20=20=20(u8.16-and=20=
two-arg-u8.16-and=20+u8-true+)=0A+=20=20=20(u8.16-or=20=20=
two-arg-u8.16-or=20=20+u8-false+)=0A+=20=20=20(u8.16-xor=20=
two-arg-u8.16-xor=20+u8-false+)=0A+=20=20=20(u8.16-max=20=
two-arg-u8.16-max=20nil)=0A+=20=20=20(u8.16-min=20two-arg-u8.16-min=20=
nil)=0A+=20=20=20(u8.16+=20=20=20=20two-arg-u8.16+=200)=0A+=20=20=20=
(u8.16+-saturating=20two-arg-u8.16+-saturating=200)=0A+=20=20=20(u8.16*=20=
=20=20=20two-arg-u8.16*=201)=0A+=20=20=20(u16.8-and=20two-arg-u16.8-and=20=
+u16-true+)=0A+=20=20=20(u16.8-or=20=20two-arg-u16.8-or=20=20=
+u16-false+)=0A+=20=20=20(u16.8-xor=20two-arg-u16.8-xor=20+u16-false+)=0A=
+=20=20=20(u16.8-max=20two-arg-u16.8-max=20nil)=0A+=20=20=20(u16.8-min=20=
two-arg-u16.8-min=20nil)=0A+=20=20=20(u16.8+=20=20=20=20two-arg-u16.8+=20=
0)=0A+=20=20=20(u16.8+-saturating=20two-arg-u16.8+-saturating=200)=0A+=20=
=20=20(u16.8*=20=20=20=20two-arg-u16.8*=201)=0A+=20=20=20(u32.4-and=20=
two-arg-u32.4-and=20+u32-true+)=0A+=20=20=20(u32.4-or=20=20=
two-arg-u32.4-or=20=20+u32-false+)=0A+=20=20=20(u32.4-xor=20=
two-arg-u32.4-xor=20+u32-false+)=0A+=20=20=20(u32.4-max=20=
two-arg-u32.4-max=20nil)=0A+=20=20=20(u32.4-min=20two-arg-u32.4-min=20=
nil)=0A+=20=20=20(u32.4+=20=20=20=20two-arg-u32.4+=200)=0A+=20=20=20=
(u32.4+-saturating=20two-arg-u32.4+-saturating=200)=0A+=20=20=20(u32.4*=20=
=20=20=20two-arg-u32.4*=201)=0A+=20=20=20(u64.2-and=20two-arg-u64.2-and=20=
+u64-true+)=0A+=20=20=20(u64.2-or=20=20two-arg-u64.2-or=20=20=
+u64-false+)=0A+=20=20=20(u64.2-xor=20two-arg-u64.2-xor=20+u64-false+)=0A=
+=20=20=20(u64.2-max=20two-arg-u64.2-max=20nil)=0A+=20=20=20(u64.2-min=20=
two-arg-u64.2-min=20nil)=0A+=20=20=20(u64.2+=20=20=20=20two-arg-u64.2+=20=
0)=0A+=20=20=20(u64.2+-saturating=20two-arg-u64.2+-saturating=200)=0A+=20=
=20=20(u64.2*=20=20=20=20two-arg-u64.2*=201)=0A+=20=20=20(s8.16-and=20=
two-arg-s8.16-and=20+s8-true+)=0A+=20=20=20(s8.16-or=20=20=
two-arg-s8.16-or=20=20+s8-false+)=0A+=20=20=20(s8.16-xor=20=
two-arg-s8.16-xor=20+s8-false+)=0A+=20=20=20(s8.16-max=20=
two-arg-s8.16-max=20nil)=0A+=20=20=20(s8.16-min=20two-arg-s8.16-min=20=
nil)=0A+=20=20=20(s8.16+=20=20=20=20two-arg-s8.16+=200)=0A+=20=20=20=
(s8.16+-saturating=20two-arg-s8.16+-saturating=200)=0A+=20=20=20(s8.16*=20=
=20=20=20two-arg-s8.16*=201)=0A+=20=20=20(s16.8-and=20two-arg-s16.8-and=20=
+s16-true+)=0A+=20=20=20(s16.8-or=20=20two-arg-s16.8-or=20=20=
+s16-false+)=0A+=20=20=20(s16.8-xor=20two-arg-s16.8-xor=20+s16-false+)=0A=
+=20=20=20(s16.8-max=20two-arg-s16.8-max=20nil)=0A+=20=20=20(s16.8-min=20=
two-arg-s16.8-min=20nil)=0A+=20=20=20(s16.8+=20=20=20=20two-arg-s16.8+=20=
0)=0A+=20=20=20(s16.8+-saturating=20two-arg-s16.8+-saturating=200)=0A+=20=
=20=20(s16.8*=20=20=20=20two-arg-s16.8*=201)=0A+=20=20=20(s32.4-and=20=
two-arg-s32.4-and=20+s32-true+)=0A+=20=20=20(s32.4-or=20=20=
two-arg-s32.4-or=20=20+s32-false+)=0A+=20=20=20(s32.4-xor=20=
two-arg-s32.4-xor=20+s32-false+)=0A+=20=20=20(s32.4-max=20=
two-arg-s32.4-max=20nil)=0A+=20=20=20(s32.4-min=20two-arg-s32.4-min=20=
nil)=0A+=20=20=20(s32.4+=20=20=20=20two-arg-s32.4+=200)=0A+=20=20=20=
(s32.4+-saturating=20two-arg-s32.4+-saturating=200)=0A+=20=20=20(s32.4*=20=
=20=20=20two-arg-s32.4*=201)=0A+=20=20=20(s64.2-and=20two-arg-s64.2-and=20=
+s64-true+)=0A+=20=20=20(s64.2-or=20=20two-arg-s64.2-or=20=20=
+s64-false+)=0A+=20=20=20(s64.2-xor=20two-arg-s64.2-xor=20+s64-false+)=0A=
+=20=20=20(s64.2-max=20two-arg-s64.2-max=20nil)=0A+=20=20=20(s64.2-min=20=
two-arg-s64.2-min=20nil)=0A+=20=20=20(s64.2+=20=20=20=20two-arg-s64.2+=20=
0)=0A+=20=20=20(s64.2+-saturating=20two-arg-s64.2+-saturating=200)=0A+=20=
=20=20(s64.2*=20=20=20=20two-arg-s64.2*=201))=0A+=20=20(:comparisons=0A+=20=
=20=20(f32.4=3D=20=20two-arg-f32.4=3D=20=20u32.4-and=20+u32-true+)=0A+=20=
=20=20(f32.4<=20=20two-arg-f32.4<=20=20u32.4-and=20+u32-true+)=0A+=20=20=20=
(f32.4<=3D=20two-arg-f32.4<=3D=20u32.4-and=20+u32-true+)=0A+=20=20=20=
(f32.4>=20=20two-arg-f32.4>=20=20u32.4-and=20+u32-true+)=0A+=20=20=20=
(f32.4>=3D=20two-arg-f32.4>=3D=20u32.4-and=20+u32-true+)=0A+=20=20=20=
(f64.2=3D=20=20two-arg-f64.2=3D=20=20u64.2-and=20+u64-true+)=0A+=20=20=20=
(f64.2<=20=20two-arg-f64.2<=20=20u64.2-and=20+u64-true+)=0A+=20=20=20=
(f64.2<=3D=20two-arg-f64.2<=3D=20u64.2-and=20+u64-true+)=0A+=20=20=20=
(f64.2>=20=20two-arg-f64.2>=20=20u64.2-and=20+u64-true+)=0A+=20=20=20=
(f64.2>=3D=20two-arg-f64.2>=3D=20u64.2-and=20+u64-true+)=0A+=20=20=20=
(u8.16=3D=20=20two-arg-u8.16=3D=20=20u8.16-and=20+u8-true+)=0A+=20=20=20=
(u8.16<=20=20two-arg-u8.16<=20=20u8.16-and=20+u8-true+)=0A+=20=20=20=
(u8.16<=3D=20two-arg-u8.16<=3D=20u8.16-and=20+u8-true+)=0A+=20=20=20=
(u8.16>=20=20two-arg-u8.16>=20=20u8.16-and=20+u8-true+)=0A+=20=20=20=
(u8.16>=3D=20two-arg-u8.16>=3D=20u8.16-and=20+u8-true+)=0A+=20=20=20=
(u16.8=3D=20=20two-arg-u16.8=3D=20=20u16.8-and=20+u16-true+)=0A+=20=20=20=
(u16.8<=20=20two-arg-u16.8<=20=20u16.8-and=20+u16-true+)=0A+=20=20=20=
(u16.8<=3D=20two-arg-u16.8<=3D=20u16.8-and=20+u16-true+)=0A+=20=20=20=
(u16.8>=20=20two-arg-u16.8>=20=20u16.8-and=20+u16-true+)=0A+=20=20=20=
(u16.8>=3D=20two-arg-u16.8>=3D=20u16.8-and=20+u16-true+)=0A+=20=20=20=
(u32.4=3D=20=20two-arg-u32.4=3D=20=20u32.4-and=20+u32-true+)=0A+=20=20=20=
(u32.4<=20=20two-arg-u32.4<=20=20u32.4-and=20+u32-true+)=0A+=20=20=20=
(u32.4<=3D=20two-arg-u32.4<=3D=20u32.4-and=20+u32-true+)=0A+=20=20=20=
(u32.4>=20=20two-arg-u32.4>=20=20u32.4-and=20+u32-true+)=0A+=20=20=20=
(u32.4>=3D=20two-arg-u32.4>=3D=20u32.4-and=20+u32-true+)=0A+=20=20=20=
(u64.2=3D=20=20two-arg-u64.2=3D=20=20u64.2-and=20+u64-true+)=0A+=20=20=20=
(u64.2<=20=20two-arg-u64.2<=20=20u64.2-and=20+u64-true+)=0A+=20=20=20=
(u64.2<=3D=20two-arg-u64.2<=3D=20u64.2-and=20+u64-true+)=0A+=20=20=20=
(u64.2>=20=20two-arg-u64.2>=20=20u64.2-and=20+u64-true+)=0A+=20=20=20=
(u64.2>=3D=20two-arg-u64.2>=3D=20u64.2-and=20+u64-true+)=0A+=20=20=20=
(s8.16=3D=20=20two-arg-s8.16=3D=20=20u8.16-and=20+u8-true+)=0A+=20=20=20=
(s8.16<=20=20two-arg-s8.16<=20=20u8.16-and=20+u8-true+)=0A+=20=20=20=
(s8.16<=3D=20two-arg-s8.16<=3D=20u8.16-and=20+u8-true+)=0A+=20=20=20=
(s8.16>=20=20two-arg-s8.16>=20=20u8.16-and=20+u8-true+)=0A+=20=20=20=
(s8.16>=3D=20two-arg-s8.16>=3D=20u8.16-and=20+u8-true+)=0A+=20=20=20=
(s16.8=3D=20=20two-arg-s16.8=3D=20=20u16.8-and=20+u16-true+)=0A+=20=20=20=
(s16.8<=20=20two-arg-s16.8<=20=20u16.8-and=20+u16-true+)=0A+=20=20=20=
(s16.8<=3D=20two-arg-s16.8<=3D=20u16.8-and=20+u16-true+)=0A+=20=20=20=
(s16.8>=20=20two-arg-s16.8>=20=20u16.8-and=20+u16-true+)=0A+=20=20=20=
(s16.8>=3D=20two-arg-s16.8>=3D=20u16.8-and=20+u16-true+)=0A+=20=20=20=
(s32.4=3D=20=20two-arg-s32.4=3D=20=20u32.4-and=20+u32-true+)=0A+=20=20=20=
(s32.4<=20=20two-arg-s32.4<=20=20u32.4-and=20+u32-true+)=0A+=20=20=20=
(s32.4<=3D=20two-arg-s32.4<=3D=20u32.4-and=20+u32-true+)=0A+=20=20=20=
(s32.4>=20=20two-arg-s32.4>=20=20u32.4-and=20+u32-true+)=0A+=20=20=20=
(s32.4>=3D=20two-arg-s32.4>=3D=20u32.4-and=20+u32-true+)=0A+=20=20=20=
(s64.2=3D=20=20two-arg-s64.2=3D=20=20u64.2-and=20+u64-true+)=0A+=20=20=20=
(s64.2<=20=20two-arg-s64.2<=20=20u64.2-and=20+u64-true+)=0A+=20=20=20=
(s64.2<=3D=20two-arg-s64.2<=3D=20u64.2-and=20+u64-true+)=0A+=20=20=20=
(s64.2>=20=20two-arg-s64.2>=20=20u64.2-and=20+u64-true+)=0A+=20=20=20=
(s64.2>=3D=20two-arg-s64.2>=3D=20u64.2-and=20+u64-true+))=0A+=20=20=
(:reducers=0A+=20=20=20(f32.4-=20two-arg-f32.4-=200f0)=0A+=20=20=20=
(f32.4/=20two-arg-f32.4/=201f0)=0A+=20=20=20(f64.2-=20two-arg-f64.2-=20=
0d0)=0A+=20=20=20(f64.2/=20two-arg-f64.2/=201d0)=0A+=20=20=20(u8.16-=20=
two-arg-u8.16-=200)=0A+=20=20=20(u8.16--saturating=20=
two-arg-u8.16--saturating=200)=0A+=20=20=20(u16.8-=20two-arg-u16.8-=200)=0A=
+=20=20=20(u16.8--saturating=20two-arg-u16.8--saturating=200)=0A+=20=20=20=
(u32.4-=20two-arg-u32.4-=200)=0A+=20=20=20(u32.4--saturating=20=
two-arg-u32.4--saturating=200)=0A+=20=20=20(u64.2-=20two-arg-u64.2-=200)=0A=
+=20=20=20(u64.2--saturating=20two-arg-u64.2--saturating=200)=0A+=20=20=20=
(s8.16-=20two-arg-s8.16-=200)=0A+=20=20=20(s8.16--saturating=20=
two-arg-s8.16--saturating=200)=0A+=20=20=20(s16.8-=20two-arg-s16.8-=200)=0A=
+=20=20=20(s16.8--saturating=20two-arg-s16.8--saturating=200)=0A+=20=20=20=
(s32.4-=20two-arg-s32.4-=200)=0A+=20=20=20(s32.4--saturating=20=
two-arg-s32.4--saturating=200)=0A+=20=20=20(s64.2-=20two-arg-s64.2-=200)=0A=
+=20=20=20(s64.2--saturating=20two-arg-s64.2--saturating=200))=0A+=20=20=
(:unequals=0A+=20=20=20(f32.4/=3D=20two-arg-f32.4/=3D=20u32.4-and=20=
+u32-true+)=0A+=20=20=20(f64.2/=3D=20two-arg-f64.2/=3D=20u64.2-and=20=
+u64-true+)=0A+=20=20=20(u8.16/=3D=20two-arg-u8.16/=3D=20u8.16-and=20=
+u8-true+)=0A+=20=20=20(u16.8/=3D=20two-arg-u16.8/=3D=20u16.8-and=20=
+u16-true+)=0A+=20=20=20(u32.4/=3D=20two-arg-u32.4/=3D=20u32.4-and=20=
+u32-true+)=0A+=20=20=20(u64.2/=3D=20two-arg-u64.2/=3D=20u64.2-and=20=
+u64-true+)=0A+=20=20=20(s8.16/=3D=20two-arg-s8.16/=3D=20u8.16-and=20=
+u8-true+)=0A+=20=20=20(s16.8/=3D=20two-arg-s16.8/=3D=20u16.8-and=20=
+u16-true+)=0A+=20=20=20(s32.4/=3D=20two-arg-s32.4/=3D=20u32.4-and=20=
+u32-true+)=0A+=20=20=20(s64.2/=3D=20two-arg-s64.2/=3D=20u64.2-and=20=
+u64-true+)))=0Adiff=20--git=20=
a/contrib/sb-simd/code/instruction-sets/arm64.lisp=20=
b/contrib/sb-simd/code/instruction-sets/arm64.lisp=0Anew=20file=20mode=20=
100644=0Aindex=20000000000..d6090c17e=0A---=20/dev/null=0A+++=20=
b/contrib/sb-simd/code/instruction-sets/arm64.lisp=0A@@=20-0,0=20+1,13=20=
@@=0A+(in-package=20#:sb-simd-arm64)=0A+=0A+(define-instruction-set=20=
:arm64=0A+=20=20(:include=20:sb-simd)=0A+=20=20(:scalars=0A+=20=20=20=
(imm1=201=20(unsigned-byte=201)=20(:constant=20(unsigned-byte=201)))=0A+=20=
=20=20(imm2=202=20(unsigned-byte=202)=20(:constant=20(unsigned-byte=20=
2)))=0A+=20=20=20(imm3=203=20(unsigned-byte=203)=20(:constant=20=
(unsigned-byte=203)))=0A+=20=20=20(imm4=204=20(unsigned-byte=204)=20=
(:constant=20(unsigned-byte=204)))=0A+=20=20=20(imm5=205=20=
(unsigned-byte=205)=20(:constant=20(unsigned-byte=205)))=0A+=20=20=20=
(imm6=206=20(unsigned-byte=206)=20(:constant=20(unsigned-byte=206)))=0A+=20=
=20=20(imm7=207=20(unsigned-byte=207)=20(:constant=20(unsigned-byte=20=
7)))=0A+=20=20=20(imm8=208=20(unsigned-byte=208)=20(:constant=20=
(unsigned-byte=208)))))=0Adiff=20--git=20=
a/contrib/sb-simd/code/packages.lisp=20=
b/contrib/sb-simd/code/packages.lisp=0Aindex=209e8d38aa0..d95b80ca8=20=
100644=0A---=20a/contrib/sb-simd/code/packages.lisp=0A+++=20=
b/contrib/sb-simd/code/packages.lisp=0A@@=20-244,7=20+244,8=20@@=0A=20=20=
=20=20#:sse4.2-supported-p=0A=20=20=20=20#:avx-supported-p=0A=20=20=20=20=
#:avx2-supported-p=0A-=20=20=20#:fma-supported-p))=0A+=20=20=20=
#:fma-supported-p=0A+=20=20=20#:advsimd-supported-p))=0A=20=0A=20(progn=0A=
=20=20=20(defpackage=20#:sb-simd=0A@@=20-2079,9=20+2080,567=20@@=0A=20=20=
=20=20=20=20#:f64.4-fnmadd=0A=20=20=20=20=20=20#:f64.4-fmsub=0A=20=20=20=20=
=20=20#:f64.4-fmaddsub=0A-=20=20=20=20=20#:f64.4-fmsubadd)))=0A+=20=20=20=
=20=20#:f64.4-fmsubadd))=0A=20=0A-(dolist=20(p=20'("SB-SIMD"=20=
"SB-SIMD-AVX"=20"SB-SIMD-AVX2"=20"SB-SIMD-FMA"=0A+=20=20(defpackage=20=
#:sb-simd-arm64=0A+=20=20=20=20(:use=20#:common-lisp=20=
#:sb-simd-internals=20#:sb-simd)=0A+=20=20=20=20#0#=0A+=20=20=20=20#11=3D=0A=
+=20=20=20=20(:export=20#:imm1=20#:imm2=20#:imm3=20#:imm4=20#:imm5=20=
#:imm6=20#:imm7=20#:imm8))=0A+=0A+=20=20(defpackage=20#:sb-simd-advsimd=0A=
+=20=20=20=20(:use=20#:common-lisp=20#:sb-simd-internals=20=
#:sb-simd-arm64)=0A+=20=20=20=20#0#=0A+=20=20=20=20#11#=0A+=20=20=20=20=
(:export=0A+=20=20=20=20=20#:p128=0A+=20=20=20=20=20#:f32!=0A+=20=20=20=20=
=20#:f64!=0A+=20=20=20=20=20#:u8!=0A+=20=20=20=20=20#:u16!=0A+=20=20=20=20=
=20#:u32!=0A+=20=20=20=20=20#:u64!=0A+=20=20=20=20=20;;=20f32.4=0A+=20=20=
=20=20=20#:make-f32.4=0A+=20=20=20=20=20#:f32.4=0A+=20=20=20=20=20=
#:f32.4!=0A+=20=20=20=20=20#:f32.4-values=0A+=20=20=20=20=20=
#:f32.4-broadcast=0A+=20=20=20=20=20#:f32.4-bit-select=0A+=20=20=20=20=20=
#:f32.4-lane-extract=0A+=20=20=20=20=20#:f32.4-lane-insert=0A+=20=20=20=20=
=20#:f32.4-dup=0A+=20=20=20=20=20#:f32.4-ins=0A+=20=20=20=20=20=
#:f32.4-transpose-even=0A+=20=20=20=20=20#:f32.4-transpose-odd=0A+=20=20=20=
=20=20#:f32.4-unzip-even=0A+=20=20=20=20=20#:f32.4-unzip-odd=0A+=20=20=20=
=20=20#:f32.4-zip-even=0A+=20=20=20=20=20#:f32.4-zip-odd=0A+=20=20=20=20=20=
#:f32.4-from-f64.2=0A+=20=20=20=20=20#:f32.4-from-f64.2-hi=0A+=20=20=20=20=
=20#:f32.4-from-s32.4=0A+=20=20=20=20=20#:f32.4-from-u32.4=0A+=20=20=20=20=
=20#:f32.4-and=0A+=20=20=20=20=20#:f32.4-or=0A+=20=20=20=20=20=
#:f32.4-xor=0A+=20=20=20=20=20#:f32.4-andc1=0A+=20=20=20=20=20=
#:f32.4-andc2=0A+=20=20=20=20=20#:f32.4-not=0A+=20=20=20=20=20=
#:f32.4-max=0A+=20=20=20=20=20#:f32.4-min=0A+=20=20=20=20=20#:f32.4-sqrt=0A=
+=20=20=20=20=20#:f32.4+=0A+=20=20=20=20=20#:f32.4-=0A+=20=20=20=20=20=
#:f32.4*=0A+=20=20=20=20=20#:f32.4/=0A+=20=20=20=20=20#:f32.4=3D=0A+=20=20=
=20=20=20#:f32.4/=3D=0A+=20=20=20=20=20#:f32.4<=0A+=20=20=20=20=20=
#:f32.4<=3D=0A+=20=20=20=20=20#:f32.4>=0A+=20=20=20=20=20#:f32.4>=3D=0A+=20=
=20=20=20=20#:f32.4-pair-min=0A+=20=20=20=20=20#:f32.4-horizontal-min=0A=
+=20=20=20=20=20#:f32.4-pair-max=0A+=20=20=20=20=20=
#:f32.4-horizontal-max=0A+=20=20=20=20=20#:f32.4-pair+=0A+=20=20=20=20=20=
#:f32.4-horizontal+=0A+=20=20=20=20=20#:f32.4-incf=0A+=20=20=20=20=20=
#:f32.4-decf=0A+=20=20=20=20=20#:f32.4-aref=0A+=20=20=20=20=20=
#:f32.4-row-major-aref=0A+=20=20=20=20=20;;=20f64.2=0A+=20=20=20=20=20=
#:make-f64.2=0A+=20=20=20=20=20#:f64.2=0A+=20=20=20=20=20#:f64.2!=0A+=20=20=
=20=20=20#:f64.2-values=0A+=20=20=20=20=20#:f64.2-broadcast=0A+=20=20=20=20=
=20#:f64.2-bit-select=0A+=20=20=20=20=20#:f64.2-lane-extract=0A+=20=20=20=
=20=20#:f64.2-lane-insert=0A+=20=20=20=20=20#:f64.2-dup=0A+=20=20=20=20=20=
#:f64.2-ins=0A+=20=20=20=20=20#:f64.2-transpose-even=0A+=20=20=20=20=20=
#:f64.2-transpose-odd=0A+=20=20=20=20=20#:f64.2-unzip-even=0A+=20=20=20=20=
=20#:f64.2-unzip-odd=0A+=20=20=20=20=20#:f64.2-zip-even=0A+=20=20=20=20=20=
#:f64.2-zip-odd=0A+=20=20=20=20=20#:f64.2-from-f32.4=0A+=20=20=20=20=20=
#:f64.2-from-f32.4-hi=0A+=20=20=20=20=20#:f64.2-from-s64.2=0A+=20=20=20=20=
=20#:f64.2-from-u64.2=0A+=20=20=20=20=20#:f64.2-and=0A+=20=20=20=20=20=
#:f64.2-or=0A+=20=20=20=20=20#:f64.2-xor=0A+=20=20=20=20=20#:f64.2-andc1=0A=
+=20=20=20=20=20#:f64.2-andc2=0A+=20=20=20=20=20#:f64.2-not=0A+=20=20=20=20=
=20#:f64.2-max=0A+=20=20=20=20=20#:f64.2-min=0A+=20=20=20=20=20=
#:f64.2-sqrt=0A+=20=20=20=20=20#:f64.2+=0A+=20=20=20=20=20#:f64.2-=0A+=20=
=20=20=20=20#:f64.2*=0A+=20=20=20=20=20#:f64.2/=0A+=20=20=20=20=20=
#:f64.2=3D=0A+=20=20=20=20=20#:f64.2/=3D=0A+=20=20=20=20=20#:f64.2<=0A+=20=
=20=20=20=20#:f64.2<=3D=0A+=20=20=20=20=20#:f64.2>=0A+=20=20=20=20=20=
#:f64.2>=3D=0A+=20=20=20=20=20#:f64.2-pair-min=0A+=20=20=20=20=20=
#:f64.2-horizontal-min=0A+=20=20=20=20=20#:f64.2-pair-max=0A+=20=20=20=20=
=20#:f64.2-horizontal-max=0A+=20=20=20=20=20#:f64.2-pair+=0A+=20=20=20=20=
=20#:f64.2-horizontal+=0A+=20=20=20=20=20#:f64.2-incf=0A+=20=20=20=20=20=
#:f64.2-decf=0A+=20=20=20=20=20#:f64.2-aref=0A+=20=20=20=20=20=
#:f64.2-row-major-aref=0A+=20=20=20=20=20;;=20u8.16=0A+=20=20=20=20=20=
#:make-u8.16=0A+=20=20=20=20=20#:u8.16=0A+=20=20=20=20=20#:u8.16!=0A+=20=20=
=20=20=20#:u8.16-from-u16.8=0A+=20=20=20=20=20#:u8.16-from-u16.8-hi=0A+=20=
=20=20=20=20#:u8.16-from-u16.8-saturating=0A+=20=20=20=20=20=
#:u8.16-from-u16.8-saturating-hi=0A+=20=20=20=20=20#:u8.16-values=0A+=20=20=
=20=20=20#:u8.16-broadcast=0A+=20=20=20=20=20#:u8.16-bit-select=0A+=20=20=
=20=20=20#:u8.16-lane-extract=0A+=20=20=20=20=20#:u8.16-lane-insert=0A+=20=
=20=20=20=20#:u8.16-dup=0A+=20=20=20=20=20#:u8.16-ins=0A+=20=20=20=20=20=
#:u8.16-transpose-even=0A+=20=20=20=20=20#:u8.16-transpose-odd=0A+=20=20=20=
=20=20#:u8.16-unzip-even=0A+=20=20=20=20=20#:u8.16-unzip-odd=0A+=20=20=20=
=20=20#:u8.16-zip-even=0A+=20=20=20=20=20#:u8.16-zip-odd=0A+=20=20=20=20=20=
#:u8.16-shuffle=0A+=20=20=20=20=20#:u8.16-and=0A+=20=20=20=20=20=
#:u8.16-or=0A+=20=20=20=20=20#:u8.16-xor=0A+=20=20=20=20=20#:u8.16-andc1=0A=
+=20=20=20=20=20#:u8.16-andc2=0A+=20=20=20=20=20#:u8.16-not=0A+=20=20=20=20=
=20#:u8.16+=0A+=20=20=20=20=20#:u8.16+-saturating=0A+=20=20=20=20=20=
#:u8.16*=0A+=20=20=20=20=20#:u8.16*-long=0A+=20=20=20=20=20=
#:u8.16*-long-hi=0A+=20=20=20=20=20#:u8.16-=0A+=20=20=20=20=20=
#:u8.16--saturating=0A+=20=20=20=20=20#:u8.16=3D=0A+=20=20=20=20=20=
#:u8.16/=3D=0A+=20=20=20=20=20#:u8.16<=0A+=20=20=20=20=20#:u8.16<=3D=0A+=20=
=20=20=20=20#:u8.16>=0A+=20=20=20=20=20#:u8.16>=3D=0A+=20=20=20=20=20=
#:u8.16-pair-min=0A+=20=20=20=20=20#:u8.16-horizontal-min=0A+=20=20=20=20=
=20#:u8.16-pair-max=0A+=20=20=20=20=20#:u8.16-horizontal-max=0A+=20=20=20=
=20=20#:u8.16-pair+=0A+=20=20=20=20=20#:u8.16-horizontal+=0A+=20=20=20=20=
=20#:u8.16-shiftr=0A+=20=20=20=20=20#:u8.16-shiftl=0A+=20=20=20=20=20=
#:u8.16-shiftl-long=0A+=20=20=20=20=20#:u8.16-shiftl-long-hi=0A+=20=20=20=
=20=20#:u8.16-shiftl-long-saturating=0A+=20=20=20=20=20=
#:u8.16-shiftl-long-saturating-hi=0A+=20=20=20=20=20#:u8.16-rev16=0A+=20=20=
=20=20=20#:u8.16-rev32=0A+=20=20=20=20=20#:u8.16-rev64=0A+=20=20=20=20=20=
#:u8.16-incf=0A+=20=20=20=20=20#:u8.16-decf=0A+=20=20=20=20=20=
#:u8.16-aref=20#:u8.16-row-major-aref=0A+=20=20=20=20=20;;=20u16.8=0A+=20=
=20=20=20=20#:make-u16.8=0A+=20=20=20=20=20#:u16.8=0A+=20=20=20=20=20=
#:u16.8!=0A+=20=20=20=20=20#:u16.8-from-u8.16=0A+=20=20=20=20=20=
#:u16.8-from-u8.16-hi=0A+=20=20=20=20=20#:u16.8-from-u32.4=0A+=20=20=20=20=
=20#:u16.8-from-u32.4-hi=0A+=20=20=20=20=20#:u16.8-from-u32.4-saturating=0A=
+=20=20=20=20=20#:u16.8-from-u32.4-saturating-hi=0A+=20=20=20=20=20=
#:u16.8-values=0A+=20=20=20=20=20#:u16.8-broadcast=0A+=20=20=20=20=20=
#:u16.8-bit-select=0A+=20=20=20=20=20#:u16.8-lane-extract=0A+=20=20=20=20=
=20#:u16.8-lane-insert=0A+=20=20=20=20=20#:u16.8-dup=0A+=20=20=20=20=20=
#:u16.8-ins=0A+=20=20=20=20=20#:u16.8-transpose-even=0A+=20=20=20=20=20=
#:u16.8-transpose-odd=0A+=20=20=20=20=20#:u16.8-unzip-even=0A+=20=20=20=20=
=20#:u16.8-unzip-odd=0A+=20=20=20=20=20#:u16.8-zip-even=0A+=20=20=20=20=20=
#:u16.8-zip-odd=0A+=20=20=20=20=20#:u16.8-and=0A+=20=20=20=20=20=
#:u16.8-or=0A+=20=20=20=20=20#:u16.8-xor=0A+=20=20=20=20=20#:u16.8-andc1=0A=
+=20=20=20=20=20#:u16.8-andc2=0A+=20=20=20=20=20#:u16.8-not=0A+=20=20=20=20=
=20#:u16.8+=0A+=20=20=20=20=20#:u16.8+-saturating=0A+=20=20=20=20=20=
#:u16.8*=0A+=20=20=20=20=20#:u16.8*-long=0A+=20=20=20=20=20=
#:u16.8*-long-hi=0A+=20=20=20=20=20#:u16.8-=0A+=20=20=20=20=20=
#:u16.8--saturating=0A+=20=20=20=20=20#:u16.8=3D=0A+=20=20=20=20=20=
#:u16.8/=3D=0A+=20=20=20=20=20#:u16.8<=0A+=20=20=20=20=20#:u16.8<=3D=0A+=20=
=20=20=20=20#:u16.8>=0A+=20=20=20=20=20#:u16.8>=3D=0A+=20=20=20=20=20=
#:u16.8-pair-min=0A+=20=20=20=20=20#:u16.8-horizontal-min=0A+=20=20=20=20=
=20#:u16.8-pair-max=0A+=20=20=20=20=20#:u16.8-horizontal-max=0A+=20=20=20=
=20=20#:u16.8-pair+=0A+=20=20=20=20=20#:u16.8-horizontal+=0A+=20=20=20=20=
=20#:u16.8-shiftr=0A+=20=20=20=20=20#:u16.8-shiftl=0A+=20=20=20=20=20=
#:u16.8-shiftl-long=0A+=20=20=20=20=20#:u16.8-shiftl-long-hi=0A+=20=20=20=
=20=20#:u16.8-shiftl-long-saturating=0A+=20=20=20=20=20=
#:u16.8-shiftl-long-saturating-hi=0A+=20=20=20=20=20#:u16.8-incf=0A+=20=20=
=20=20=20#:u16.8-decf=0A+=20=20=20=20=20#:u16.8-aref=20=
#:u16.8-row-major-aref=0A+=20=20=20=20=20;;=20u32.4=0A+=20=20=20=20=20=
#:make-u32.4=0A+=20=20=20=20=20#:u32.4=0A+=20=20=20=20=20#:u32.4!=0A+=20=20=
=20=20=20#:u32.4-from-f32.4=0A+=20=20=20=20=20#:u32.4-from-u16.8=0A+=20=20=
=20=20=20#:u32.4-from-u16.8-hi=0A+=20=20=20=20=20#:u32.4-from-u64.2=0A+=20=
=20=20=20=20#:u32.4-from-u64.2-hi=0A+=20=20=20=20=20=
#:u32.4-from-u64.2-saturating=0A+=20=20=20=20=20=
#:u32.4-from-u64.2-saturating-hi=0A+=20=20=20=20=20#:u32.4-values=0A+=20=20=
=20=20=20#:u32.4-broadcast=0A+=20=20=20=20=20#:u32.4-bit-select=0A+=20=20=
=20=20=20#:u32.4-lane-extract=0A+=20=20=20=20=20#:u32.4-lane-insert=0A+=20=
=20=20=20=20#:u32.4-dup=0A+=20=20=20=20=20#:u32.4-ins=0A+=20=20=20=20=20=
#:u32.4-transpose-even=0A+=20=20=20=20=20#:u32.4-transpose-odd=0A+=20=20=20=
=20=20#:u32.4-unzip-even=0A+=20=20=20=20=20#:u32.4-unzip-odd=0A+=20=20=20=
=20=20#:u32.4-zip-even=0A+=20=20=20=20=20#:u32.4-zip-odd=0A+=20=20=20=20=20=
#:u32.4-and=0A+=20=20=20=20=20#:u32.4-or=0A+=20=20=20=20=20#:u32.4-xor=0A=
+=20=20=20=20=20#:u32.4-andc1=0A+=20=20=20=20=20#:u32.4-andc2=0A+=20=20=20=
=20=20#:u32.4-not=0A+=20=20=20=20=20#:u32.4+=0A+=20=20=20=20=20=
#:u32.4+-saturating=0A+=20=20=20=20=20#:u32.4*=0A+=20=20=20=20=20=
#:u32.4*-long=0A+=20=20=20=20=20#:u32.4*-long-hi=0A+=20=20=20=20=20=
#:u32.4-=0A+=20=20=20=20=20#:u32.4--saturating=0A+=20=20=20=20=20=
#:u32.4=3D=0A+=20=20=20=20=20#:u32.4/=3D=0A+=20=20=20=20=20#:u32.4<=0A+=20=
=20=20=20=20#:u32.4<=3D=0A+=20=20=20=20=20#:u32.4>=0A+=20=20=20=20=20=
#:u32.4>=3D=0A+=20=20=20=20=20#:u32.4-pair-min=0A+=20=20=20=20=20=
#:u32.4-horizontal-min=0A+=20=20=20=20=20#:u32.4-pair-max=0A+=20=20=20=20=
=20#:u32.4-horizontal-max=0A+=20=20=20=20=20#:u32.4-pair+=0A+=20=20=20=20=
=20#:u32.4-horizontal+=0A+=20=20=20=20=20#:u32.4-shiftr=0A+=20=20=20=20=20=
#:u32.4-shiftl=0A+=20=20=20=20=20#:u32.4-shiftl-long=0A+=20=20=20=20=20=
#:u32.4-shiftl-long-hi=0A+=20=20=20=20=20#:u32.4-shiftl-long-saturating=0A=
+=20=20=20=20=20#:u32.4-shiftl-long-saturating-hi=0A+=20=20=20=20=20=
#:u32.4-incf=0A+=20=20=20=20=20#:u32.4-decf=0A+=20=20=20=20=20=
#:u32.4-aref=20#:u32.4-row-major-aref=0A+=20=20=20=20=20#+sb-unicode=0A+=20=
=20=20=20=20#:u32.4-string-ref=0A+=20=20=20=20=20#+sb-unicode=0A+=20=20=20=
=20=20#:u32.4-row-major-string-ref=0A+=20=20=20=20=20;;=20u64.2=0A+=20=20=
=20=20=20#:make-u64.2=0A+=20=20=20=20=20#:u64.2=0A+=20=20=20=20=20=
#:u64.2!=0A+=20=20=20=20=20#:u64.2-from-f64.2=0A+=20=20=20=20=20=
#:u64.2-from-u32.4=0A+=20=20=20=20=20#:u64.2-from-u32.4-hi=0A+=20=20=20=20=
=20#:u64.2-values=0A+=20=20=20=20=20#:u64.2-broadcast=0A+=20=20=20=20=20=
#:u64.2-bit-select=0A+=20=20=20=20=20#:u64.2-lane-extract=0A+=20=20=20=20=
=20#:u64.2-lane-insert=0A+=20=20=20=20=20#:u64.2-dup=0A+=20=20=20=20=20=
#:u64.2-ins=0A+=20=20=20=20=20#:u64.2-transpose-even=0A+=20=20=20=20=20=
#:u64.2-transpose-odd=0A+=20=20=20=20=20#:u64.2-unzip-even=0A+=20=20=20=20=
=20#:u64.2-unzip-odd=0A+=20=20=20=20=20#:u64.2-zip-even=0A+=20=20=20=20=20=
#:u64.2-zip-odd=0A+=20=20=20=20=20#:u64.2-and=0A+=20=20=20=20=20=
#:u64.2-or=0A+=20=20=20=20=20#:u64.2-xor=0A+=20=20=20=20=20#:u64.2-andc1=0A=
+=20=20=20=20=20#:u64.2-andc2=0A+=20=20=20=20=20#:u64.2-not=0A+=20=20=20=20=
=20#:u64.2+=0A+=20=20=20=20=20#:u64.2+-saturating=0A+=20=20=20=20=20=
#:u64.2*=0A+=20=20=20=20=20#:u64.2-=0A+=20=20=20=20=20=
#:u64.2--saturating=0A+=20=20=20=20=20#:u64.2=3D=0A+=20=20=20=20=20=
#:u64.2/=3D=0A+=20=20=20=20=20#:u64.2<=0A+=20=20=20=20=20#:u64.2<=3D=0A+=20=
=20=20=20=20#:u64.2>=0A+=20=20=20=20=20#:u64.2>=3D=0A+=20=20=20=20=20=
#:u64.2-pair-min=0A+=20=20=20=20=20#:u64.2-horizontal-min=0A+=20=20=20=20=
=20#:u64.2-pair-max=0A+=20=20=20=20=20#:u64.2-horizontal-max=0A+=20=20=20=
=20=20#:u64.2-pair+=0A+=20=20=20=20=20#:u64.2-horizontal+=0A+=20=20=20=20=
=20#:u64.2-shiftr=0A+=20=20=20=20=20#:u64.2-shiftl=0A+=20=20=20=20=20=
#:u64.2-incf=0A+=20=20=20=20=20#:u64.2-decf=0A+=20=20=20=20=20=
#:u64.2-aref=20#:u64.2-row-major-aref=0A+=20=20=20=20=20;;=20s8.16=0A+=20=
=20=20=20=20#:make-s8.16=0A+=20=20=20=20=20#:s8.16=0A+=20=20=20=20=20=
#:s8.16!=0A+=20=20=20=20=20#:s8.16-from-s16.8=0A+=20=20=20=20=20=
#:s8.16-from-s16.8-hi=0A+=20=20=20=20=20#:s8.16-from-s16.8-saturating=0A=
+=20=20=20=20=20#:s8.16-from-s16.8-saturating-hi=0A+=20=20=20=20=20=
#:s8.16-values=0A+=20=20=20=20=20#:s8.16-broadcast=0A+=20=20=20=20=20=
#:s8.16-bit-select=0A+=20=20=20=20=20#:s8.16-lane-extract=0A+=20=20=20=20=
=20#:s8.16-lane-insert=0A+=20=20=20=20=20#:s8.16-dup=0A+=20=20=20=20=20=
#:s8.16-ins=0A+=20=20=20=20=20#:s8.16-transpose-even=0A+=20=20=20=20=20=
#:s8.16-transpose-odd=0A+=20=20=20=20=20#:s8.16-unzip-even=0A+=20=20=20=20=
=20#:s8.16-unzip-odd=0A+=20=20=20=20=20#:s8.16-zip-even=0A+=20=20=20=20=20=
#:s8.16-zip-odd=0A+=20=20=20=20=20#:s8.16-and=0A+=20=20=20=20=20=
#:s8.16-or=0A+=20=20=20=20=20#:s8.16-xor=0A+=20=20=20=20=20#:s8.16-andc1=0A=
+=20=20=20=20=20#:s8.16-andc2=0A+=20=20=20=20=20#:s8.16-not=0A+=20=20=20=20=
=20#:s8.16+=0A+=20=20=20=20=20#:s8.16+-saturating=0A+=20=20=20=20=20=
#:s8.16*=0A+=20=20=20=20=20#:s8.16-=0A+=20=20=20=20=20=
#:s8.16--saturating=0A+=20=20=20=20=20#:s8.16=3D=0A+=20=20=20=20=20=
#:s8.16/=3D=0A+=20=20=20=20=20#:s8.16<=0A+=20=20=20=20=20#:s8.16<=3D=0A+=20=
=20=20=20=20#:s8.16>=0A+=20=20=20=20=20#:s8.16>=3D=0A+=20=20=20=20=20=
#:s8.16-pair-min=0A+=20=20=20=20=20#:s8.16-horizontal-min=0A+=20=20=20=20=
=20#:s8.16-pair-max=0A+=20=20=20=20=20#:s8.16-horizontal-max=0A+=20=20=20=
=20=20#:s8.16-pair+=0A+=20=20=20=20=20#:s8.16-horizontal+=0A+=20=20=20=20=
=20#:s8.16-shiftr=0A+=20=20=20=20=20#:s8.16-shiftl=0A+=20=20=20=20=20=
#:s8.16-shiftl-long=0A+=20=20=20=20=20#:s8.16-shiftl-long-hi=0A+=20=20=20=
=20=20#:s8.16-shiftl-long-saturating=0A+=20=20=20=20=20=
#:s8.16-shiftl-long-saturating-hi=0A+=20=20=20=20=20#:s8.16-incf=0A+=20=20=
=20=20=20#:s8.16-decf=0A+=20=20=20=20=20#:s8.16-aref=20=
#:s8.16-row-major-aref=0A+=20=20=20=20=20;;=20s16.8=0A+=20=20=20=20=20=
#:make-s16.8=0A+=20=20=20=20=20#:s16.8=0A+=20=20=20=20=20#:s16.8!=0A+=20=20=
=20=20=20#:s16.8-from-s8.16=0A+=20=20=20=20=20#:s16.8-from-s8.16-hi=0A+=20=
=20=20=20=20#:s16.8-from-s32.4=0A+=20=20=20=20=20#:s16.8-from-s32.4-hi=0A=
+=20=20=20=20=20#:s16.8-from-s32.4-saturating=0A+=20=20=20=20=20=
#:s16.8-from-s32.4-saturating-hi=0A+=20=20=20=20=20#:s16.8-values=0A+=20=20=
=20=20=20#:s16.8-broadcast=0A+=20=20=20=20=20#:s16.8-bit-select=0A+=20=20=
=20=20=20#:s16.8-lane-extract=0A+=20=20=20=20=20#:s16.8-lane-insert=0A+=20=
=20=20=20=20#:s16.8-dup=0A+=20=20=20=20=20#:s16.8-ins=0A+=20=20=20=20=20=
#:s16.8-transpose-even=0A+=20=20=20=20=20#:s16.8-transpose-odd=0A+=20=20=20=
=20=20#:s16.8-unzip-even=0A+=20=20=20=20=20#:s16.8-unzip-odd=0A+=20=20=20=
=20=20#:s16.8-zip-even=0A+=20=20=20=20=20#:s16.8-zip-odd=0A+=20=20=20=20=20=
#:s16.8-and=0A+=20=20=20=20=20#:s16.8-or=0A+=20=20=20=20=20#:s16.8-xor=0A=
+=20=20=20=20=20#:s16.8-andc1=0A+=20=20=20=20=20#:s16.8-andc2=0A+=20=20=20=
=20=20#:s16.8-not=0A+=20=20=20=20=20#:s16.8+=0A+=20=20=20=20=20=
#:s16.8+-saturating=0A+=20=20=20=20=20#:s16.8*=0A+=20=20=20=20=20=
#:s16.8-=0A+=20=20=20=20=20#:s16.8--saturating=0A+=20=20=20=20=20=
#:s16.8=3D=0A+=20=20=20=20=20#:s16.8/=3D=0A+=20=20=20=20=20#:s16.8<=0A+=20=
=20=20=20=20#:s16.8<=3D=0A+=20=20=20=20=20#:s16.8>=0A+=20=20=20=20=20=
#:s16.8>=3D=0A+=20=20=20=20=20#:s16.8-pair-min=0A+=20=20=20=20=20=
#:s16.8-horizontal-min=0A+=20=20=20=20=20#:s16.8-pair-max=0A+=20=20=20=20=
=20#:s16.8-horizontal-max=0A+=20=20=20=20=20#:s16.8-pair+=0A+=20=20=20=20=
=20#:s16.8-horizontal+=0A+=20=20=20=20=20#:s16.8-shiftr=0A+=20=20=20=20=20=
#:s16.8-shiftl=0A+=20=20=20=20=20#:s16.8-shiftl-long=0A+=20=20=20=20=20=
#:s16.8-shiftl-long-hi=0A+=20=20=20=20=20#:s16.8-shiftl-long-saturating=0A=
+=20=20=20=20=20#:s16.8-shiftl-long-saturating-hi=0A+=20=20=20=20=20=
#:s16.8-incf=0A+=20=20=20=20=20#:s16.8-decf=0A+=20=20=20=20=20=
#:s16.8-aref=20#:s16.8-row-major-aref=0A+=20=20=20=20=20;;=20s32.4=0A+=20=
=20=20=20=20#:make-s32.4=0A+=20=20=20=20=20#:s32.4=0A+=20=20=20=20=20=
#:s32.4!=0A+=20=20=20=20=20#:s32.4-from-f32.4=0A+=20=20=20=20=20=
#:s32.4-from-s16.8=0A+=20=20=20=20=20#:s32.4-from-s16.8-hi=0A+=20=20=20=20=
=20#:s32.4-from-s64.2=0A+=20=20=20=20=20#:s32.4-from-s64.2-hi=0A+=20=20=20=
=20=20#:s32.4-from-s64.2-saturating=0A+=20=20=20=20=20=
#:s32.4-from-s64.2-saturating-hi=0A+=20=20=20=20=20#:s32.4-values=0A+=20=20=
=20=20=20#:s32.4-broadcast=0A+=20=20=20=20=20#:s32.4-bit-select=0A+=20=20=
=20=20=20#:s32.4-lane-extract=0A+=20=20=20=20=20#:s32.4-lane-insert=0A+=20=
=20=20=20=20#:s32.4-dup=0A+=20=20=20=20=20#:s32.4-ins=0A+=20=20=20=20=20=
#:s32.4-transpose-even=0A+=20=20=20=20=20#:s32.4-transpose-odd=0A+=20=20=20=
=20=20#:s32.4-unzip-even=0A+=20=20=20=20=20#:s32.4-unzip-odd=0A+=20=20=20=
=20=20#:s32.4-zip-even=0A+=20=20=20=20=20#:s32.4-zip-odd=0A+=20=20=20=20=20=
#:s32.4-and=0A+=20=20=20=20=20#:s32.4-or=0A+=20=20=20=20=20#:s32.4-xor=0A=
+=20=20=20=20=20#:s32.4-andc1=0A+=20=20=20=20=20#:s32.4-andc2=0A+=20=20=20=
=20=20#:s32.4-not=0A+=20=20=20=20=20#:s32.4+=0A+=20=20=20=20=20=
#:s32.4+-saturating=0A+=20=20=20=20=20#:s32.4*=0A+=20=20=20=20=20=
#:s32.4-=0A+=20=20=20=20=20#:s32.4--saturating=0A+=20=20=20=20=20=
#:s32.4=3D=0A+=20=20=20=20=20#:s32.4/=3D=0A+=20=20=20=20=20#:s32.4<=0A+=20=
=20=20=20=20#:s32.4<=3D=0A+=20=20=20=20=20#:s32.4>=0A+=20=20=20=20=20=
#:s32.4>=3D=0A+=20=20=20=20=20#:s32.4-pair-min=0A+=20=20=20=20=20=
#:s32.4-horizontal-min=0A+=20=20=20=20=20#:s32.4-pair-max=0A+=20=20=20=20=
=20#:s32.4-horizontal-max=0A+=20=20=20=20=20#:s32.4-pair+=0A+=20=20=20=20=
=20#:s32.4-horizontal+=0A+=20=20=20=20=20#:s32.4-shiftr=0A+=20=20=20=20=20=
#:s32.4-shiftl=0A+=20=20=20=20=20#:s32.4-shiftl-long=0A+=20=20=20=20=20=
#:s32.4-shiftl-long-hi=0A+=20=20=20=20=20#:s32.4-shiftl-long-saturating=0A=
+=20=20=20=20=20#:s32.4-shiftl-long-saturating-hi=0A+=20=20=20=20=20=
#:s32.4-incf=0A+=20=20=20=20=20#:s32.4-decf=0A+=20=20=20=20=20=
#:s32.4-aref=20#:s32.4-row-major-aref=0A+=20=20=20=20=20;;=20s64.2=0A+=20=
=20=20=20=20#:make-s64.2=0A+=20=20=20=20=20#:s64.2=0A+=20=20=20=20=20=
#:s64.2!=0A+=20=20=20=20=20#:s64.2-from-f64.2=0A+=20=20=20=20=20=
#:s64.2-from-s32.4=0A+=20=20=20=20=20#:s64.2-from-s32.4-hi=0A+=20=20=20=20=
=20#:s64.2-values=0A+=20=20=20=20=20#:s64.2-broadcast=0A+=20=20=20=20=20=
#:s64.2-bit-select=0A+=20=20=20=20=20#:s64.2-lane-extract=0A+=20=20=20=20=
=20#:s64.2-lane-insert=0A+=20=20=20=20=20#:s64.2-dup=0A+=20=20=20=20=20=
#:s64.2-ins=0A+=20=20=20=20=20#:s64.2-transpose-even=0A+=20=20=20=20=20=
#:s64.2-transpose-odd=0A+=20=20=20=20=20#:s64.2-unzip-even=0A+=20=20=20=20=
=20#:s64.2-unzip-odd=0A+=20=20=20=20=20#:s64.2-zip-even=0A+=20=20=20=20=20=
#:s64.2-zip-odd=0A+=20=20=20=20=20#:s64.2-and=0A+=20=20=20=20=20=
#:s64.2-or=0A+=20=20=20=20=20#:s64.2-xor=0A+=20=20=20=20=20#:s64.2-andc1=0A=
+=20=20=20=20=20#:s64.2-andc2=0A+=20=20=20=20=20#:s64.2-not=0A+=20=20=20=20=
=20#:s64.2+=0A+=20=20=20=20=20#:s64.2+-saturating=0A+=20=20=20=20=20=
#:s64.2*=0A+=20=20=20=20=20#:s64.2-=0A+=20=20=20=20=20=
#:s64.2--saturating=0A+=20=20=20=20=20#:s64.2=3D=0A+=20=20=20=20=20=
#:s64.2/=3D=0A+=20=20=20=20=20#:s64.2<=0A+=20=20=20=20=20#:s64.2<=3D=0A+=20=
=20=20=20=20#:s64.2>=0A+=20=20=20=20=20#:s64.2>=3D=0A+=20=20=20=20=20=
#:s64.2-pair-min=0A+=20=20=20=20=20#:s64.2-horizontal-min=0A+=20=20=20=20=
=20#:s64.2-pair-max=0A+=20=20=20=20=20#:s64.2-horizontal-max=0A+=20=20=20=
=20=20#:s64.2-pair+=0A+=20=20=20=20=20#:s64.2-horizontal+=0A+=20=20=20=20=
=20#:s64.2-shiftr=0A+=20=20=20=20=20#:s64.2-shiftl=0A+=20=20=20=20=20=
#:s64.2-incf=0A+=20=20=20=20=20#:s64.2-decf=0A+=20=20=20=20=20=
#:s64.2-aref=20#:s64.2-row-major-aref)))=0A+=0A+(dolist=20(p=20=
'("SB-SIMD"=20"SB-SIMD-ADVSIMD"=20"SB-SIMD-ARM64"=0A+=20=20=20=20=20=20=20=
=20=20=20=20=20=20"SB-SIMD-AVX"=20"SB-SIMD-AVX2"=20"SB-SIMD-FMA"=0A=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20"SB-SIMD-INTERNALS"=20"SB-SIMD-SSE"=20=
"SB-SIMD-SSE2"=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
"SB-SIMD-SSE3"=20"SB-SIMD-SSE4.1"=20"SB-SIMD-SSE4.2"=0A=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20"SB-SIMD-SSSE3"=20"SB-SIMD-X86-64"))=0Adiff=20=
--git=20a/contrib/sb-simd/code/record.lisp=20=
b/contrib/sb-simd/code/record.lisp=0Aindex=2090eadebe7..4edaaa2a9=20=
100644=0A---=20a/contrib/sb-simd/code/record.lisp=0A+++=20=
b/contrib/sb-simd/code/record.lisp=0A@@=20-508,7=20+508,7=20@@=0A=20=20=20=
=20=20:reader=20instruction-record-always-translatable)=0A=20=20=20=20;;=20=
How=20the=20instruction=20is=20turned=20into=20a=20VOP.=0A=20=20=20=20=
(%encoding=0A-=20=20=20=20:type=20(member=20:standard=20:sse=20:sse+xmm0=20=
:custom=20:fake-vop=20:move=20:fma)=0A+=20=20=20=20:type=20(member=20=
:standard=20:sse=20:sse+xmm0=20:custom=20:fake-vop=20:move=20:fma=20=
:neon-rmw)=0A=20=20=20=20=20:initarg=20:encoding=0A=20=20=20=20=20=
:initform=20:standard=0A=20=20=20=20=20:reader=20=
instruction-record-encoding)=0Adiff=20--git=20=
a/contrib/sb-simd/sb-simd.asd=20b/contrib/sb-simd/sb-simd.asd=0Aindex=20=
32e817749..e69fc415d=20100644=0A---=20a/contrib/sb-simd/sb-simd.asd=0A=
+++=20b/contrib/sb-simd/sb-simd.asd=0A@@=20-30,7=20+30,9=20@@=0A=20=20=20=
=20=20=20=20=20=20(:file=20"sse4-2")=0A=20=20=20=20=20=20=20=20=20(:file=20=
"avx")=0A=20=20=20=20=20=20=20=20=20(:file=20"avx2")=0A-=20=20=20=20=20=20=
=20=20(:file=20"fma")))=0A+=20=20=20=20=20=20=20=20(:file=20"fma")=0A+=20=
=20=20=20=20=20=20=20(:file=20"arm64")=0A+=20=20=20=20=20=20=20=20(:file=20=
"advsimd")))=0A=20=20=20=20=20=20=20(:file=20"define-types")=0A=20=20=20=20=
=20=20=20(:file=20"define-instruction-vops")=0A=20=20=20=20=20=20=20=
(:file=20"define-vref-vops")=0Adiff=20--git=20=
a/contrib/sb-simd/test-suite/test-arefs.lisp=20=
b/contrib/sb-simd/test-suite/test-arefs.lisp=0Aindex=20=
7f1926997..7a9831168=20100644=0A---=20=
a/contrib/sb-simd/test-suite/test-arefs.lisp=0A+++=20=
b/contrib/sb-simd/test-suite/test-arefs.lisp=0A@@=20-90,3=20+90,16=20@@=0A=
=20(sb-simd-test-suite:define-aref-test=20s16.16-aref=20(signed-byte=20=
16)=2016=20s16.16-values)=0A=20(sb-simd-test-suite:define-aref-test=20=
s32.8-aref=20(signed-byte=2032)=208=20s32.8-values)=0A=20=
(sb-simd-test-suite:define-aref-test=20s64.4-aref=20(signed-byte=2064)=20=
4=20s64.4-values)=0A+=0A+(in-package=20#:sb-simd-advsimd)=0A+=0A=
+(sb-simd-test-suite:define-aref-test=20f32.4-aref=20single-float=204=20=
f32.4-values)=0A+(sb-simd-test-suite:define-aref-test=20f64.2-aref=20=
double-float=20=20=20=20=20=20=202=20f64.2-values)=0A=
+(sb-simd-test-suite:define-aref-test=20u8.16-aref=20(unsigned-byte=208)=20=
16=20u8.16-values)=0A+(sb-simd-test-suite:define-aref-test=20u16.8-aref=20=
(unsigned-byte=2016)=208=20u16.8-values)=0A=
+(sb-simd-test-suite:define-aref-test=20u32.4-aref=20(unsigned-byte=20=
32)=204=20u32.4-values)=0A+(sb-simd-test-suite:define-aref-test=20=
u64.2-aref=20(unsigned-byte=2064)=202=20u64.2-values)=0A=
+(sb-simd-test-suite:define-aref-test=20s8.16-aref=20(signed-byte=208)=20=
=20=2016=20s8.16-values)=0A+(sb-simd-test-suite:define-aref-test=20=
s16.8-aref=20(signed-byte=2016)=20=20=208=20s16.8-values)=0A=
+(sb-simd-test-suite:define-aref-test=20s32.4-aref=20(signed-byte=2032)=20=
=20=204=20s32.4-values)=0A+(sb-simd-test-suite:define-aref-test=20=
s64.2-aref=20(signed-byte=2064)=20=20=202=20s64.2-values)=0Adiff=20--git=20=
a/contrib/sb-simd/test-suite/test-hairy-simd-functions.lisp=20=
b/contrib/sb-simd/test-suite/test-hairy-simd-functions.lisp=0Aindex=20=
24e36c71b..d068b5faf=20100644=0A---=20=
a/contrib/sb-simd/test-suite/test-hairy-simd-functions.lisp=0A+++=20=
b/contrib/sb-simd/test-suite/test-hairy-simd-functions.lisp=0A@@=20-7,3=20=
+7,5=20@@=0A=20(in-package=20#:sb-simd-avx)=0A=20=0A=20(in-package=20=
#:sb-simd-avx2)=0A+=0A+(in-package=20#:sb-simd-advsimd)=0Adiff=20--git=20=
a/contrib/sb-simd/test-suite/test-horizontal-functions.lisp=20=
b/contrib/sb-simd/test-suite/test-horizontal-functions.lisp=0Aindex=20=
3557e38d0..6b5d83a46=20100644=0A---=20=
a/contrib/sb-simd/test-suite/test-horizontal-functions.lisp=0A+++=20=
b/contrib/sb-simd/test-suite/test-horizontal-functions.lisp=0A@@=20-74,3=20=
+74,45=20@@=0A=20(sb-simd-test-suite:define-horizontal-test=20=
f64.4-horizontal*=20f64*)=0A=20=0A=20(in-package=20#:sb-simd-avx2)=0A+=0A=
+(in-package=20#:sb-simd-advsimd)=0A+=0A=
+(sb-simd-test-suite:define-horizontal-test=20f32.4-horizontal-max=20=
f32-max)=0A+(sb-simd-test-suite:define-horizontal-test=20=
f32.4-horizontal-min=20f32-min)=0A=
+(sb-simd-test-suite:define-horizontal-test=20f32.4-horizontal+=20f32+)=0A=
+=0A+(sb-simd-test-suite:define-horizontal-test=20f64.2-horizontal-max=20=
f64-max)=0A+(sb-simd-test-suite:define-horizontal-test=20=
f64.2-horizontal-min=20f64-min)=0A=
+(sb-simd-test-suite:define-horizontal-test=20f64.2-horizontal+=20f64+)=0A=
+=0A+(sb-simd-test-suite:define-horizontal-test=20u8.16-horizontal-max=20=
u8-max)=0A+(sb-simd-test-suite:define-horizontal-test=20=
u8.16-horizontal-min=20u8-min)=0A=
+(sb-simd-test-suite:define-horizontal-test=20u8.16-horizontal+=20u8+)=0A=
+=0A+(sb-simd-test-suite:define-horizontal-test=20u16.8-horizontal-max=20=
u16-max)=0A+(sb-simd-test-suite:define-horizontal-test=20=
u16.8-horizontal-min=20u16-min)=0A=
+(sb-simd-test-suite:define-horizontal-test=20u16.8-horizontal+=20u16+)=0A=
+=0A+(sb-simd-test-suite:define-horizontal-test=20u32.4-horizontal-max=20=
u32-max)=0A+(sb-simd-test-suite:define-horizontal-test=20=
u32.4-horizontal-min=20u32-min)=0A=
+(sb-simd-test-suite:define-horizontal-test=20u32.4-horizontal+=20u32+)=0A=
+=0A+(sb-simd-test-suite:define-horizontal-test=20u64.2-horizontal-max=20=
u64-max)=0A+(sb-simd-test-suite:define-horizontal-test=20=
u64.2-horizontal-min=20u64-min)=0A=
+(sb-simd-test-suite:define-horizontal-test=20u64.2-horizontal+=20u64+)=0A=
+=0A+(sb-simd-test-suite:define-horizontal-test=20s8.16-horizontal-max=20=
s8-max)=0A+(sb-simd-test-suite:define-horizontal-test=20=
s8.16-horizontal-min=20s8-min)=0A=
+(sb-simd-test-suite:define-horizontal-test=20s8.16-horizontal+=20s8+)=0A=
+=0A+(sb-simd-test-suite:define-horizontal-test=20s16.8-horizontal-max=20=
s16-max)=0A+(sb-simd-test-suite:define-horizontal-test=20=
s16.8-horizontal-min=20s16-min)=0A=
+(sb-simd-test-suite:define-horizontal-test=20s16.8-horizontal+=20s16+)=0A=
+=0A+(sb-simd-test-suite:define-horizontal-test=20s32.4-horizontal-max=20=
s32-max)=0A+(sb-simd-test-suite:define-horizontal-test=20=
s32.4-horizontal-min=20s32-min)=0A=
+(sb-simd-test-suite:define-horizontal-test=20s32.4-horizontal+=20s32+)=0A=
+=0A+(sb-simd-test-suite:define-horizontal-test=20s64.2-horizontal-max=20=
s64-max)=0A+(sb-simd-test-suite:define-horizontal-test=20=
s64.2-horizontal-min=20s64-min)=0A=
+(sb-simd-test-suite:define-horizontal-test=20s64.2-horizontal+=20s64+)=0A=
diff=20--git=20a/contrib/sb-simd/test-suite/test-packages.lisp=20=
b/contrib/sb-simd/test-suite/test-packages.lisp=0Aindex=20=
95ccb0e6e..8c3f857a7=20100644=0A---=20=
a/contrib/sb-simd/test-suite/test-packages.lisp=0A+++=20=
b/contrib/sb-simd/test-suite/test-packages.lisp=0A@@=20-14,6=20+14,7=20=
@@=0A=20=20=20(check-package=20'#:sb-simd-sse4.2)=0A=20=20=20=
(check-package=20'#:sb-simd-avx)=0A=20=20=20(check-package=20=
'#:sb-simd-avx2)=0A+=20=20(check-package=20'#:sb-simd-advsimd)=0A=20=20=20=
;;=20Ensure=20that=20every=20instruction=20has=20a=20corresponding=20=
VOP.=0A=20=20=20(dolist=20(instruction-record=20=
(filter-available-function-records=20#'instruction-record-p))=0A=20=20=20=
=20=20(is=20(fboundp=20(instruction-record-vop=20instruction-record)))))=0A=
diff=20--git=20=
a/contrib/sb-simd/test-suite/test-simple-simd-functions.lisp=20=
b/contrib/sb-simd/test-suite/test-simple-simd-functions.lisp=0Aindex=20=
9cbbd5b03..daa891521=20100644=0A---=20=
a/contrib/sb-simd/test-suite/test-simple-simd-functions.lisp=0A+++=20=
b/contrib/sb-simd/test-suite/test-simple-simd-functions.lisp=0A@@=20=
-541,3=20+541,152=20@@=0A=20(sb-simd-test-suite:define-simple-simd-test=20=
f64.4-fmadd=20=20(f64.4)=20(f64.4=20f64.4=20f64.4)=20f64-fmadd)=0A=20=
(sb-simd-test-suite:define-simple-simd-test=20f64.4-fnmadd=20(f64.4)=20=
(f64.4=20f64.4=20f64.4)=20f64-fnmadd)=0A=20=
(sb-simd-test-suite:define-simple-simd-test=20f64.4-fmsub=20(f64.4)=20=
(f64.4=20f64.4=20f64.4)=20f64-fmsub)=0A+=0A+(in-package=20=
#:sb-simd-advsimd)=0A+=0A+(sb-simd-test-suite:define-simple-simd-test=20=
f32.4-and=20(f32.4)=20(&rest=20f32.4)=20f32-and)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20f32.4-or=20(f32.4)=20=
(&rest=20f32.4)=20f32-or)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
f32.4-xor=20(f32.4)=20(&rest=20f32.4)=20f32-xor)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20f32.4-andc1=20(f32.4)=20=
(f32.4=20f32.4)=20f32-andc1)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20f32.4-not=20(f32.4)=20=
(f32.4)=20f32-not)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
f32.4-max=20(f32.4)=20(f32.4=20&rest=20f32.4)=20f32-max)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20f32.4-min=20(f32.4)=20=
(f32.4=20&rest=20f32.4)=20f32-min)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20f32.4+=20(f32.4)=20(&rest=20=
f32.4)=20f32+)=0A+(sb-simd-test-suite:define-simple-simd-test=20f32.4-=20=
(f32.4)=20(f32.4=20&rest=20f32.4)=20f32-)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20f32.4*=20(f32.4)=20(&rest=20=
f32.4)=20f32*)=0A+(sb-simd-test-suite:define-simple-simd-test=20f32.4/=20=
(f32.4)=20(f32.4=20&rest=20f32.4)=20f32/)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20f32.4=3D=20(u32.4)=20=
(f32.4=20&rest=20f32.4)=20f32=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20f32.4/=3D=20(u32.4)=20=
(f32.4=20&rest=20f32.4)=20f32/=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20f32.4<=20(u32.4)=20(f32.4=20=
&rest=20f32.4)=20f32<)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
f32.4<=3D=20(u32.4)=20(f32.4=20&rest=20f32.4)=20f32<=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20f32.4>=20(u32.4)=20(f32.4=20=
&rest=20f32.4)=20f32>)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
f32.4>=3D=20(u32.4)=20(f32.4=20&rest=20f32.4)=20f32>=3D)=0A+=0A=
+(sb-simd-test-suite:define-simple-simd-test=20f64.2-and=20(f64.2)=20=
(&rest=20f64.2)=20f64-and)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20f64.2-or=20(f64.2)=20=
(&rest=20f64.2)=20f64-or)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
f64.2-xor=20(f64.2)=20(&rest=20f64.2)=20f64-xor)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20f64.2-andc1=20(f64.2)=20=
(f64.2=20f64.2)=20f64-andc1)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20f64.2-not=20(f64.2)=20=
(f64.2)=20f64-not)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
f64.2-max=20(f64.2)=20(f64.2=20&rest=20f64.2)=20f64-max)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20f64.2-min=20(f64.2)=20=
(f64.2=20&rest=20f64.2)=20f64-min)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20f64.2+=20(f64.2)=20(&rest=20=
f64.2)=20f64+)=0A+(sb-simd-test-suite:define-simple-simd-test=20f64.2-=20=
(f64.2)=20(f64.2=20&rest=20f64.2)=20f64-)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20f64.2*=20(f64.2)=20(&rest=20=
f64.2)=20f64*)=0A+(sb-simd-test-suite:define-simple-simd-test=20f64.2/=20=
(f64.2)=20(f64.2=20&rest=20f64.2)=20f64/)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20f64.2=3D=20(u64.2)=20=
(f64.2=20&rest=20f64.2)=20f64=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20f64.2/=3D=20(u64.2)=20=
(f64.2=20&rest=20f64.2)=20f64/=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20f64.2<=20(u64.2)=20(f64.2=20=
&rest=20f64.2)=20f64<)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
f64.2<=3D=20(u64.2)=20(f64.2=20&rest=20f64.2)=20f64<=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20f64.2>=20(u64.2)=20(f64.2=20=
&rest=20f64.2)=20f64>)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
f64.2>=3D=20(u64.2)=20(f64.2=20&rest=20f64.2)=20f64>=3D)=0A+=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u8.16-and=20(u8.16)=20=
(&rest=20u8.16)=20u8-and)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
u8.16-or=20(u8.16)=20(&rest=20u8.16)=20u8-or)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u8.16-xor=20(u8.16)=20=
(&rest=20u8.16)=20u8-xor)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
u8.16-andc1=20(u8.16)=20(u8.16=20u8.16)=20u8-andc1)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u8.16-not=20(u8.16)=20=
(u8.16)=20u8-not)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
u8.16+=20(u8.16)=20(&rest=20u8.16)=20u8+)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u8.16-=20(u8.16)=20(u8.16=20=
&rest=20u8.16)=20u8-)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
u8.16=3D=20(u8.16)=20(u8.16=20&rest=20u8.16)=20u8=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u8.16/=3D=20(u8.16)=20=
(u8.16=20&rest=20u8.16)=20u8/=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u8.16<=20(u8.16)=20(u8.16=20=
&rest=20u8.16)=20u8<)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
u8.16<=3D=20(u8.16)=20(u8.16=20&rest=20u8.16)=20u8<=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u8.16>=20(u8.16)=20(u8.16=20=
&rest=20u8.16)=20u8>)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
u8.16>=3D=20(u8.16)=20(u8.16=20&rest=20u8.16)=20u8>=3D)=0A+=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u16.8-and=20(u16.8)=20=
(&rest=20u16.8)=20u16-and)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u16.8-or=20(u16.8)=20=
(&rest=20u16.8)=20u16-or)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
u16.8-xor=20(u16.8)=20(&rest=20u16.8)=20u16-xor)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u16.8-andc1=20(u16.8)=20=
(u16.8=20u16.8)=20u16-andc1)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u16.8-not=20(u16.8)=20=
(u16.8)=20u16-not)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
u16.8+=20(u16.8)=20(&rest=20u16.8)=20u16+)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u16.8-=20(u16.8)=20(u16.8=20=
&rest=20u16.8)=20u16-)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
u16.8=3D=20(u16.8)=20(u16.8=20&rest=20u16.8)=20u16=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u16.8/=3D=20(u16.8)=20=
(u16.8=20&rest=20u16.8)=20u16/=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u16.8<=20(u16.8)=20(u16.8=20=
&rest=20u16.8)=20u16<)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
u16.8<=3D=20(u16.8)=20(u16.8=20&rest=20u16.8)=20u16<=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u16.8>=20(u16.8)=20(u16.8=20=
&rest=20u16.8)=20u16>)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
u16.8>=3D=20(u16.8)=20(u16.8=20&rest=20u16.8)=20u16>=3D)=0A+=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u32.4-and=20(u32.4)=20=
(&rest=20u32.4)=20u32-and)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u32.4-or=20(u32.4)=20=
(&rest=20u32.4)=20u32-or)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
u32.4-xor=20(u32.4)=20(&rest=20u32.4)=20u32-xor)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u32.4-andc1=20(u32.4)=20=
(u32.4=20u32.4)=20u32-andc1)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u32.4-not=20(u32.4)=20=
(u32.4)=20u32-not)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
u32.4+=20(u32.4)=20(&rest=20u32.4)=20u32+)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u32.4-=20(u32.4)=20(u32.4=20=
&rest=20u32.4)=20u32-)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
u32.4=3D=20(u32.4)=20(u32.4=20&rest=20u32.4)=20u32=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u32.4/=3D=20(u32.4)=20=
(u32.4=20&rest=20u32.4)=20u32/=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u32.4<=20(u32.4)=20(u32.4=20=
&rest=20u32.4)=20u32<)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
u32.4<=3D=20(u32.4)=20(u32.4=20&rest=20u32.4)=20u32<=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u32.4>=20(u32.4)=20(u32.4=20=
&rest=20u32.4)=20u32>)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
u32.4>=3D=20(u32.4)=20(u32.4=20&rest=20u32.4)=20u32>=3D)=0A+=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u64.2-and=20(u64.2)=20=
(&rest=20u64.2)=20u64-and)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u64.2-or=20(u64.2)=20=
(&rest=20u64.2)=20u64-or)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
u64.2-xor=20(u64.2)=20(&rest=20u64.2)=20u64-xor)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u64.2-andc1=20(u64.2)=20=
(u64.2=20u64.2)=20u64-andc1)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u64.2-not=20(u64.2)=20=
(u64.2)=20u64-not)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
u64.2+=20(u64.2)=20(&rest=20u64.2)=20u64+)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u64.2-=20(u64.2)=20(u64.2=20=
&rest=20u64.2)=20u64-)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
u64.2=3D=20(u64.2)=20(u64.2=20&rest=20u64.2)=20u64=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u64.2/=3D=20(u64.2)=20=
(u64.2=20&rest=20u64.2)=20u64/=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u64.2<=20(u64.2)=20(u64.2=20=
&rest=20u64.2)=20u64<)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
u64.2<=3D=20(u64.2)=20(u64.2=20&rest=20u64.2)=20u64<=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20u64.2>=20(u64.2)=20(u64.2=20=
&rest=20u64.2)=20u64>)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
u64.2>=3D=20(u64.2)=20(u64.2=20&rest=20u64.2)=20u64>=3D)=0A+=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s8.16-and=20(s8.16)=20=
(&rest=20s8.16)=20s8-and)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
s8.16-or=20(s8.16)=20(&rest=20s8.16)=20s8-or)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s8.16-xor=20(s8.16)=20=
(&rest=20s8.16)=20s8-xor)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
s8.16-andc1=20(s8.16)=20(s8.16=20s8.16)=20s8-andc1)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s8.16-not=20(s8.16)=20=
(s8.16)=20s8-not)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
s8.16+=20(s8.16)=20(&rest=20s8.16)=20s8+)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s8.16-=20(s8.16)=20(s8.16=20=
&rest=20s8.16)=20s8-)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
s8.16=3D=20(u8.16)=20(s8.16=20&rest=20s8.16)=20s8=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s8.16/=3D=20(u8.16)=20=
(s8.16=20&rest=20s8.16)=20s8/=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s8.16<=20(u8.16)=20(s8.16=20=
&rest=20s8.16)=20s8<)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
s8.16<=3D=20(u8.16)=20(s8.16=20&rest=20s8.16)=20s8<=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s8.16>=20(u8.16)=20(s8.16=20=
&rest=20s8.16)=20s8>)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
s8.16>=3D=20(u8.16)=20(s8.16=20&rest=20s8.16)=20s8>=3D)=0A+=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s16.8-and=20(s16.8)=20=
(&rest=20s16.8)=20s16-and)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s16.8-or=20(s16.8)=20=
(&rest=20s16.8)=20s16-or)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
s16.8-xor=20(s16.8)=20(&rest=20s16.8)=20s16-xor)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s16.8-andc1=20(s16.8)=20=
(s16.8=20s16.8)=20s16-andc1)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s16.8-not=20(s16.8)=20=
(s16.8)=20s16-not)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
s16.8+=20(s16.8)=20(&rest=20s16.8)=20s16+)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s16.8-=20(s16.8)=20(s16.8=20=
&rest=20s16.8)=20s16-)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
s16.8=3D=20(u16.8)=20(s16.8=20&rest=20s16.8)=20s16=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s16.8/=3D=20(u16.8)=20=
(s16.8=20&rest=20s16.8)=20s16/=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s16.8<=20(u16.8)=20(s16.8=20=
&rest=20s16.8)=20s16<)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
s16.8<=3D=20(u16.8)=20(s16.8=20&rest=20s16.8)=20s16<=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s16.8>=20(u16.8)=20(s16.8=20=
&rest=20s16.8)=20s16>)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
s16.8>=3D=20(u16.8)=20(s16.8=20&rest=20s16.8)=20s16>=3D)=0A+=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s32.4-and=20(s32.4)=20=
(&rest=20s32.4)=20s32-and)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s32.4-or=20(s32.4)=20=
(&rest=20s32.4)=20s32-or)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
s32.4-xor=20(s32.4)=20(&rest=20s32.4)=20s32-xor)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s32.4-andc1=20(s32.4)=20=
(s32.4=20s32.4)=20s32-andc1)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s32.4-not=20(s32.4)=20=
(s32.4)=20s32-not)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
s32.4+=20(s32.4)=20(&rest=20s32.4)=20s32+)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s32.4-=20(s32.4)=20(s32.4=20=
&rest=20s32.4)=20s32-)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
s32.4=3D=20(u32.4)=20(s32.4=20&rest=20s32.4)=20s32=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s32.4/=3D=20(u32.4)=20=
(s32.4=20&rest=20s32.4)=20s32/=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s32.4<=20(u32.4)=20(s32.4=20=
&rest=20s32.4)=20s32<)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
s32.4<=3D=20(u32.4)=20(s32.4=20&rest=20s32.4)=20s32<=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s32.4>=20(u32.4)=20(s32.4=20=
&rest=20s32.4)=20s32>)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
s32.4>=3D=20(u32.4)=20(s32.4=20&rest=20s32.4)=20s32>=3D)=0A+=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s64.2-and=20(s64.2)=20=
(&rest=20s64.2)=20s64-and)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s64.2-or=20(s64.2)=20=
(&rest=20s64.2)=20s64-or)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
s64.2-xor=20(s64.2)=20(&rest=20s64.2)=20s64-xor)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s64.2-andc1=20(s64.2)=20=
(s64.2=20s64.2)=20s64-andc1)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s64.2-not=20(s64.2)=20=
(s64.2)=20s64-not)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
s64.2+=20(s64.2)=20(&rest=20s64.2)=20s64+)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s64.2-=20(s64.2)=20(s64.2=20=
&rest=20s64.2)=20s64-)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
s64.2=3D=20(u64.2)=20(s64.2=20&rest=20s64.2)=20s64=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s64.2<=20(u64.2)=20(s64.2=20=
&rest=20s64.2)=20s64<)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
s64.2<=3D=20(u64.2)=20(s64.2=20&rest=20s64.2)=20s64<=3D)=0A=
+(sb-simd-test-suite:define-simple-simd-test=20s64.2>=20(u64.2)=20(s64.2=20=
&rest=20s64.2)=20s64>)=0A+(sb-simd-test-suite:define-simple-simd-test=20=
s64.2>=3D=20(u64.2)=20(s64.2=20&rest=20s64.2)=20s64>=3D)=0Adiff=20--git=20=
a/contrib/sb-simd/test-suite/test-suite.lisp=20=
b/contrib/sb-simd/test-suite/test-suite.lisp=0Aindex=20=
79fba2e9f..93250adfe=20100644=0A---=20=
a/contrib/sb-simd/test-suite/test-suite.lisp=0A+++=20=
b/contrib/sb-simd/test-suite/test-suite.lisp=0A@@=20-59,13=20+59,19=20@@=0A=
=20=0A=20(defmacro=20define-test=20(test-name=20&body=20body)=0A=20=20=20=
"Define=20a=20test=20function=20and=20add=20it=20to=20*TESTS*."=0A-=20=20=
(let=20((name=20(intern-test-name=20test-name)))=0A+=20=20(let=20((name=20=
(intern-test-name=20test-name))=0A+=20=20=20=20=20=20=20=20=
(instruction-set=20(sb-simd-internals:find-instruction-set=0A+=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(symbol-package=20test-name)=0A+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20nil)))=0A=20=20=20=20=20`(prog1=20=
',name=0A=20=20=20=20=20=20=20=20(defun=20,name=20()=0A=20=20=20=20=20=20=
=20=20=20=20(declare=20(optimize=20(debug=203)=20(safety=203)))=0A=20=20=20=
=20=20=20=20=20=20=20(with-test-harness=0A=20=20=20=20=20=20=20=20=20=20=20=
=20(enter-test=20',name)=0A-=20=20=20=20=20=20=20=20=20=20=20,@body))=0A=
+=20=20=20=20=20=20=20=20=20=20=20,(if=20(or=20(not=20instruction-set)=0A=
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
(sb-simd-internals:instruction-set-available-p=20instruction-set))=0A+=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20`(progn=20,@body)=0A+=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20nil)))=0A=20=20=20=20=20=20=20=20=
(pushnew=20',name=20*tests*))))=0A=20=0A=20(defun=20enter-test=20=
(test-name)=0Adiff=20--git=20a/contrib/sb-simd/test-suite/utilities.lisp=20=
b/contrib/sb-simd/test-suite/utilities.lisp=0Aindex=20=
7e77ef3ea..daed6e02a=20100644=0A---=20=
a/contrib/sb-simd/test-suite/utilities.lisp=0A+++=20=
b/contrib/sb-simd/test-suite/utilities.lisp=0A@@=20-40,6=20+40,7=20@@=0A=20=
=20=20=20=20=20=20=20(multiple-value-bind=20(a0=20a1)=20=
(sb-ext:%simd-pack-ub64s=20a)=0A=20=20=20=20=20=20=20=20=20=20=
(multiple-value-bind=20(b0=20b1)=20(sb-ext:%simd-pack-ub64s=20b)=0A=20=20=
=20=20=20=20=20=20=20=20=20=20(and=20(=3D=20a0=20b0)=20(=3D=20a1=20=
b1))))))=0A+=20=20=20=20#+simd-pack-256=0A=20=20=20=20=20=
(sb-ext:simd-pack-256=0A=20=20=20=20=20=20(when=20=
(sb-ext:simd-pack-256-p=20b)=0A=20=20=20=20=20=20=20=20=
(multiple-value-bind=20(a0=20a1=20a2=20a3)=20=
(sb-ext:%simd-pack-256-ub64s=20a)=0Adiff=20--git=20a/make-config.sh=20=
b/make-config.sh=0Aindex=2006f33bd04..b8d44b6a8=20100755=0A---=20=
a/make-config.sh=0A+++=20b/make-config.sh=0A@@=20-555,7=20+555,9=20@@=20=
echo=20"(lambda=20(features)=20(set-difference=20(union=20features=20=
(list=20:${sbcl_arch}$WIT=0A=20=0A=20#=20Automatically=20block=20sb-simd=20=
on=20non-x86=20platforms,=20at=20least=20for=20now.=0A=20case=20=
"$sbcl_arch"=20in=0A-=20=20=20=20x86-64)=20;;=20*)=20=
SBCL_CONTRIB_BLOCKLIST=3D"$SBCL_CONTRIB_BLOCKLIST=20sb-simd"=20;;=0A+=20=20=
=20=20x86-64)=20;;=0A+=20=20=20=20arm64)=20;;=0A+=20=20=20=20*)=20=
SBCL_CONTRIB_BLOCKLIST=3D"$SBCL_CONTRIB_BLOCKLIST=20sb-simd"=20;;=0A=20=
esac=0A=20case=20"$sbcl_os"=20in=0A=20=20=20=20=20linux)=20;;=20*)=20=
SBCL_CONTRIB_BLOCKLIST=3D"$SBCL_CONTRIB_BLOCKLIST=20sb-perf"=20;;=0A@@=20=
-751,6=20+753,9=20@@=20case=20"$sbcl_arch"=20in=0A=20=20=20=20=20=20=20=20=
=20printf=20'=20:immobile-space'=20>>=20$ltf=0A=20=20=20=20=20esac=0A=20=20=
=20=20=20;;=0A+=20=20arm64)=0A+=20=20=20=20=20=20printf=20'=20=
:sb-simd-pack'=20>>=20$ltf=20#=20not=20mandatory=0A+=20=20=20=20=20=20;;=0A=
=20=20=20ppc)=0A=20=20=20=20=20if=20[=20"$sbcl_os"=20=3D=20"darwin"=20];=20=
then=0A=20=20=20=20=20=20=20=20=20#=20We=20provide=20a=20dlopen=20shim,=20=
so=20a=20little=20lie=20won't=20hurt=0Adiff=20--git=20=
a/tests/sb-simd.impure.lisp=20b/tests/sb-simd.impure.lisp=0Aindex=20=
9e6197e78..8668fcf3d=20100644=0A---=20a/tests/sb-simd.impure.lisp=0A+++=20=
b/tests/sb-simd.impure.lisp=0A@@=20-14,10=20+14,6=20@@=0A=20=20=20=20=20=20=
=20=20=20=20=20(t=0A=20=20=20=20=20=20=20=20=20=20=20=20(error=20=
"Unexpected=20error:=20~A"=20c)))))=0A=20=0A-(when=20(zerop=20=
(sb-alien:extern-alien=20"avx2_supported"=20int))=0A-=20=20(format=20t=20=
"~&Skipping=20test=20of=20sb-simd~%")=0A-=20=20(invoke-restart=20=
'run-tests::skip-file))=0A-=0A=20(with-compilation-unit=20()=0A=20=20=20=
(dolist=20(file=20'("packages.lisp"=0A=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20"numbers.lisp"=0A--=20=0A2.50.1=20(Apple=20Git-155)=0A=
=0A=

--Apple-Mail=_03B53131-1088-4A20-8204-C6AF066A7E81
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline


--Apple-Mail=_03B53131-1088-4A20-8204-C6AF066A7E81
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Sbcl-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sbcl-devel

--Apple-Mail=_03B53131-1088-4A20-8204-C6AF066A7E81--