[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--