make vshuffle-bytes intrinsic for any shuffle mask type

db4
Joe Groff 2009-10-19 12:25:55 -05:00
parent b427eb3f9a
commit b411f1701a
4 changed files with 14 additions and 4 deletions

View File

@ -280,6 +280,7 @@ simd new
} >>special-wrappers } >>special-wrappers
{ {
{ { +vector+ +vector+ -> +vector+ } A-vv->v-op } { { +vector+ +vector+ -> +vector+ } A-vv->v-op }
{ { +vector+ +any-vector+ -> +vector+ } A-vv->v-op }
{ { +vector+ +scalar+ -> +vector+ } A-vn->v-op } { { +vector+ +scalar+ -> +vector+ } A-vn->v-op }
{ { +vector+ +literal+ -> +vector+ } A-vn->v-op } { { +vector+ +literal+ -> +vector+ } A-vn->v-op }
{ { +vector+ +vector+ -> +scalar+ } A-vv->n-op } { { +vector+ +vector+ -> +scalar+ } A-vv->n-op }

View File

@ -7,12 +7,20 @@ namespaces assocs fry splitting classes.algebra generalizations
locals compiler.tree.propagation.info ; locals compiler.tree.propagation.info ;
IN: math.vectors.specialization 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 ) : signature-for-schema ( array-type elt-type schema -- signature )
[ [
{ {
{ +vector+ [ drop ] } { +vector+ [ drop ] }
{ +any-vector+ [ drop parent-vector-class ] }
{ +scalar+ [ nip ] } { +scalar+ [ nip ] }
{ +boolean+ [ 2drop boolean ] } { +boolean+ [ 2drop boolean ] }
{ +nonnegative+ [ nip ] } { +nonnegative+ [ nip ] }
@ -32,6 +40,7 @@ SYMBOLS: -> +vector+ +scalar+ +boolean+ +nonnegative+ +literal+ ;
[ [
{ {
{ +vector+ [ drop <class-info> ] } { +vector+ [ drop <class-info> ] }
{ +any-vector+ [ drop parent-vector-class <class-info> ] }
{ +scalar+ [ nip <class-info> ] } { +scalar+ [ nip <class-info> ] }
{ +boolean+ [ 2drop boolean <class-info> ] } { +boolean+ [ 2drop boolean <class-info> ] }
{ {
@ -101,7 +110,7 @@ H{
{ hlshift { +vector+ +literal+ -> +vector+ } } { hlshift { +vector+ +literal+ -> +vector+ } }
{ hrshift { +vector+ +literal+ -> +vector+ } } { hrshift { +vector+ +literal+ -> +vector+ } }
{ vshuffle-elements { +vector+ +literal+ -> +vector+ } } { vshuffle-elements { +vector+ +literal+ -> +vector+ } }
{ vshuffle-bytes { +vector+ +vector+ -> +vector+ } } { vshuffle-bytes { +vector+ +any-vector+ -> +vector+ } }
{ vbroadcast { +vector+ +literal+ -> +vector+ } } { vbroadcast { +vector+ +literal+ -> +vector+ } }
{ (vmerge-head) { +vector+ +vector+ -> +vector+ } } { (vmerge-head) { +vector+ +vector+ -> +vector+ } }
{ (vmerge-tail) { +vector+ +vector+ -> +vector+ } } { (vmerge-tail) { +vector+ +vector+ -> +vector+ } }

View File

@ -92,7 +92,7 @@ PRIVATE>
: vshuffle-bytes ( u perm -- v ) : vshuffle-bytes ( u perm -- v )
underlying>> [ underlying>> [
swap [ '[ _ nth ] ] keep map-as swap [ '[ 15 bitand _ nth ] ] keep map-as
] curry change-underlying ; ] curry change-underlying ;
GENERIC: vshuffle ( u perm -- v ) GENERIC: vshuffle ( u perm -- v )

View File

@ -30,7 +30,7 @@ TUPLE: sfmt
: endian-shuffle ( v -- w ) : endian-shuffle ( v -- w )
little-endian? [ 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 ] unless ; inline
: hlshift* ( v n -- w ) : hlshift* ( v n -- w )