mirror of
https://github.com/paboyle/Grid.git
synced 2025-04-09 21:50:45 +01:00
Added tRotate function and MaddRealPart struct for generic SIMD, bugfix in MultRealPart and minor cosmetic changes.
This commit is contained in:
parent
95625a7bd1
commit
c80948411b
@ -163,13 +163,26 @@ namespace Optimization {
|
|||||||
|
|
||||||
VECTOR_FOR(i, W<T>::c, 1)
|
VECTOR_FOR(i, W<T>::c, 1)
|
||||||
{
|
{
|
||||||
out.v[2*i] = a[2*i]*b[2*i];
|
out.v[2*i] = a.v[2*i]*b.v[2*i];
|
||||||
out.v[2*i+1] = a[2*i]*b[2*i+1];
|
out.v[2*i+1] = a.v[2*i]*b.v[2*i+1];
|
||||||
}
|
}
|
||||||
return out;
|
return out;
|
||||||
};
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct MaddRealPart{
|
||||||
|
template <typename T>
|
||||||
|
inline vec<T> operator()(vec<T> a, vec<T> b, vec<T> c){
|
||||||
|
vec<T> out;
|
||||||
|
|
||||||
|
VECTOR_FOR(i, W<T>::c, 1)
|
||||||
|
{
|
||||||
|
out.v[2*i] = a.v[2*i]*b.v[2*i] + c.v[2*i];
|
||||||
|
out.v[2*i+1] = a.v[2*i]*b.v[2*i+1] + c.v[2*i+1];
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
struct MultComplex{
|
struct MultComplex{
|
||||||
// Complex
|
// Complex
|
||||||
@ -300,6 +313,11 @@ namespace Optimization {
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct Rotate{
|
struct Rotate{
|
||||||
|
|
||||||
|
template <int n, typename T> static inline vec<T> tRotate(vec<T> in){
|
||||||
|
return rotate(in, n);
|
||||||
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
static inline vec<T> rotate(vec<T> in, int n){
|
static inline vec<T> rotate(vec<T> in, int n){
|
||||||
vec<T> out;
|
vec<T> out;
|
||||||
@ -407,6 +425,7 @@ namespace Optimization {
|
|||||||
typedef Optimization::Mult MultSIMD;
|
typedef Optimization::Mult MultSIMD;
|
||||||
typedef Optimization::MultComplex MultComplexSIMD;
|
typedef Optimization::MultComplex MultComplexSIMD;
|
||||||
typedef Optimization::MultRealPart MultRealPartSIMD;
|
typedef Optimization::MultRealPart MultRealPartSIMD;
|
||||||
|
typedef Optimization::MaddRealPart MaddRealPartSIMD;
|
||||||
typedef Optimization::Conj ConjSIMD;
|
typedef Optimization::Conj ConjSIMD;
|
||||||
typedef Optimization::TimesMinusI TimesMinusISIMD;
|
typedef Optimization::TimesMinusI TimesMinusISIMD;
|
||||||
typedef Optimization::TimesI TimesISIMD;
|
typedef Optimization::TimesI TimesISIMD;
|
||||||
|
@ -75,6 +75,6 @@ namespace Optimization {
|
|||||||
|
|
||||||
typedef vec<float> vecf;
|
typedef vec<float> vecf;
|
||||||
typedef vec<double> vecd;
|
typedef vec<double> vecd;
|
||||||
typedef vec<Integer> veci;
|
typedef vec<Integer> veci;
|
||||||
|
|
||||||
}}
|
}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user