mirror of
https://github.com/paboyle/Grid.git
synced 2025-04-11 14:40:46 +01:00
Added broadcast and rotation of simd vectors
This commit is contained in:
parent
8f47d0b5ab
commit
dd62a61c5c
@ -84,6 +84,9 @@ public:
|
|||||||
friend strong_inline void vstream(iScalar<vtype> &out,const iScalar<vtype> &in){
|
friend strong_inline void vstream(iScalar<vtype> &out,const iScalar<vtype> &in){
|
||||||
vstream(out._internal,in._internal);
|
vstream(out._internal,in._internal);
|
||||||
}
|
}
|
||||||
|
friend strong_inline void vbroadcast(iScalar<vtype> &out,const iScalar<vtype> &in,int lane){
|
||||||
|
vbroadcast(out._internal,in._internal,lane);
|
||||||
|
}
|
||||||
friend strong_inline void zeroit(iScalar<vtype> &that){
|
friend strong_inline void zeroit(iScalar<vtype> &that){
|
||||||
zeroit(that._internal);
|
zeroit(that._internal);
|
||||||
}
|
}
|
||||||
@ -93,6 +96,9 @@ public:
|
|||||||
friend strong_inline void permute(iScalar<vtype> &out,const iScalar<vtype> &in,int permutetype){
|
friend strong_inline void permute(iScalar<vtype> &out,const iScalar<vtype> &in,int permutetype){
|
||||||
permute(out._internal,in._internal,permutetype);
|
permute(out._internal,in._internal,permutetype);
|
||||||
}
|
}
|
||||||
|
friend strong_inline void rotate(iScalar<vtype> &out,const iScalar<vtype> &in,int rot){
|
||||||
|
rotate(out._internal,in._internal,rot);
|
||||||
|
}
|
||||||
|
|
||||||
// Unary negation
|
// Unary negation
|
||||||
friend strong_inline iScalar<vtype> operator -(const iScalar<vtype> &r) {
|
friend strong_inline iScalar<vtype> operator -(const iScalar<vtype> &r) {
|
||||||
@ -200,11 +206,21 @@ public:
|
|||||||
vstream(out._internal[i],in._internal[i]);
|
vstream(out._internal[i],in._internal[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
friend strong_inline void vbroadcast(iVector<vtype,N> &out,const iVector<vtype,N> &in,int lane){
|
||||||
|
for(int i=0;i<N;i++){
|
||||||
|
vbroadcast(out._internal[i],in._internal[i],lane);
|
||||||
|
}
|
||||||
|
}
|
||||||
friend strong_inline void permute(iVector<vtype,N> &out,const iVector<vtype,N> &in,int permutetype){
|
friend strong_inline void permute(iVector<vtype,N> &out,const iVector<vtype,N> &in,int permutetype){
|
||||||
for(int i=0;i<N;i++){
|
for(int i=0;i<N;i++){
|
||||||
permute(out._internal[i],in._internal[i],permutetype);
|
permute(out._internal[i],in._internal[i],permutetype);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
friend strong_inline void rotate(iVector<vtype,N> &out,const iVector<vtype,N> &in,int rot){
|
||||||
|
for(int i=0;i<N;i++){
|
||||||
|
rotate(out._internal[i],in._internal[i],rot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Unary negation
|
// Unary negation
|
||||||
friend strong_inline iVector<vtype,N> operator -(const iVector<vtype,N> &r) {
|
friend strong_inline iVector<vtype,N> operator -(const iVector<vtype,N> &r) {
|
||||||
@ -318,7 +334,13 @@ public:
|
|||||||
for(int j=0;j<N;j++){
|
for(int j=0;j<N;j++){
|
||||||
vstream(out._internal[i][j],in._internal[i][j]);
|
vstream(out._internal[i][j],in._internal[i][j]);
|
||||||
}}
|
}}
|
||||||
}
|
}
|
||||||
|
friend strong_inline void vbroadcast(iMatrix<vtype,N> &out,const iMatrix<vtype,N> &in,int lane){
|
||||||
|
for(int i=0;i<N;i++){
|
||||||
|
for(int j=0;j<N;j++){
|
||||||
|
vbroadcast(out._internal[i][j],in._internal[i][j],lane);
|
||||||
|
}}
|
||||||
|
}
|
||||||
|
|
||||||
friend strong_inline void permute(iMatrix<vtype,N> &out,const iMatrix<vtype,N> &in,int permutetype){
|
friend strong_inline void permute(iMatrix<vtype,N> &out,const iMatrix<vtype,N> &in,int permutetype){
|
||||||
for(int i=0;i<N;i++){
|
for(int i=0;i<N;i++){
|
||||||
@ -326,6 +348,12 @@ public:
|
|||||||
permute(out._internal[i][j],in._internal[i][j],permutetype);
|
permute(out._internal[i][j],in._internal[i][j],permutetype);
|
||||||
}}
|
}}
|
||||||
}
|
}
|
||||||
|
friend strong_inline void rotate(iMatrix<vtype,N> &out,const iMatrix<vtype,N> &in,int rot){
|
||||||
|
for(int i=0;i<N;i++){
|
||||||
|
for(int j=0;j<N;j++){
|
||||||
|
rotate(out._internal[i][j],in._internal[i][j],rot);
|
||||||
|
}}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Unary negation
|
// Unary negation
|
||||||
|
Loading…
x
Reference in New Issue
Block a user