make vshuffle-bytes intrinsic for any shuffle mask type
parent
b427eb3f9a
commit
b411f1701a
|
@ -280,6 +280,7 @@ simd new
|
|||
} >>special-wrappers
|
||||
{
|
||||
{ { +vector+ +vector+ -> +vector+ } A-vv->v-op }
|
||||
{ { +vector+ +any-vector+ -> +vector+ } A-vv->v-op }
|
||||
{ { +vector+ +scalar+ -> +vector+ } A-vn->v-op }
|
||||
{ { +vector+ +literal+ -> +vector+ } A-vn->v-op }
|
||||
{ { +vector+ +vector+ -> +scalar+ } A-vv->n-op }
|
||||
|
|
|
@ -7,12 +7,20 @@ namespaces assocs fry splitting classes.algebra generalizations
|
|||
locals compiler.tree.propagation.info ;
|
||||
IN: math.vectors.specialization
|
||||
|
||||
SYMBOLS: -> +vector+ +scalar+ +boolean+ +nonnegative+ +literal+ ;
|
||||
SYMBOLS: -> +vector+ +any-vector+ +scalar+ +boolean+ +nonnegative+ +literal+ ;
|
||||
|
||||
: parent-vector-class ( type -- type' )
|
||||
{
|
||||
{ [ dup simd-128 class<= ] [ drop simd-128 ] }
|
||||
{ [ dup simd-256 class<= ] [ drop simd-256 ] }
|
||||
[ "Not a vector class" throw ]
|
||||
} cond ;
|
||||
|
||||
: signature-for-schema ( array-type elt-type schema -- signature )
|
||||
[
|
||||
{
|
||||
{ +vector+ [ drop ] }
|
||||
{ +any-vector+ [ drop parent-vector-class ] }
|
||||
{ +scalar+ [ nip ] }
|
||||
{ +boolean+ [ 2drop boolean ] }
|
||||
{ +nonnegative+ [ nip ] }
|
||||
|
@ -32,6 +40,7 @@ SYMBOLS: -> +vector+ +scalar+ +boolean+ +nonnegative+ +literal+ ;
|
|||
[
|
||||
{
|
||||
{ +vector+ [ drop <class-info> ] }
|
||||
{ +any-vector+ [ drop parent-vector-class <class-info> ] }
|
||||
{ +scalar+ [ nip <class-info> ] }
|
||||
{ +boolean+ [ 2drop boolean <class-info> ] }
|
||||
{
|
||||
|
@ -101,7 +110,7 @@ H{
|
|||
{ hlshift { +vector+ +literal+ -> +vector+ } }
|
||||
{ hrshift { +vector+ +literal+ -> +vector+ } }
|
||||
{ vshuffle-elements { +vector+ +literal+ -> +vector+ } }
|
||||
{ vshuffle-bytes { +vector+ +vector+ -> +vector+ } }
|
||||
{ vshuffle-bytes { +vector+ +any-vector+ -> +vector+ } }
|
||||
{ vbroadcast { +vector+ +literal+ -> +vector+ } }
|
||||
{ (vmerge-head) { +vector+ +vector+ -> +vector+ } }
|
||||
{ (vmerge-tail) { +vector+ +vector+ -> +vector+ } }
|
||||
|
|
|
@ -92,7 +92,7 @@ PRIVATE>
|
|||
|
||||
: vshuffle-bytes ( u perm -- v )
|
||||
underlying>> [
|
||||
swap [ '[ _ nth ] ] keep map-as
|
||||
swap [ '[ 15 bitand _ nth ] ] keep map-as
|
||||
] curry change-underlying ;
|
||||
|
||||
GENERIC: vshuffle ( u perm -- v )
|
||||
|
|
|
@ -30,7 +30,7 @@ TUPLE: sfmt
|
|||
|
||||
: endian-shuffle ( v -- w )
|
||||
little-endian? [
|
||||
B{ 3 2 1 0 7 6 5 4 11 10 9 8 15 14 13 12 } uint-4 boa vshuffle
|
||||
uchar-16{ 3 2 1 0 7 6 5 4 11 10 9 8 15 14 13 12 } vshuffle
|
||||
] unless ; inline
|
||||
|
||||
: hlshift* ( v n -- w )
|
||||
|
|
Loading…
Reference in New Issue