#ifndef CBM_KF_F64vec1_H #define CBM_KF_F64vec1_H #include #include #include //#include //#include "vec_arithmetic.h" /********************************** * * Vector of one single float * **********************************/ const union { int i[2]; double m; } __f64vec1_true_cheat = {0xFFFFFFFF,0xFFFFFFFF}, __f64vec1_false_cheat = {0x00000000,0x00000000}; #define _f64vec1_true ((F64vec1)__f64vec1_true_cheat.m) #define _f64vec1_false ((F64vec1)__f64vec1_false_cheat.m) class F64vec1 { public: double v; double & operator[]( int i ){ return v;} double operator[]( int i ) const { return v;} F64vec1( ){} F64vec1( const double &v0 ){ v = v0; } /* Conversion function */ operator double() const { return v; } /* Convert to __m128 */ /* Arithmetic Operators */ /* Functions */ //friend F64vec1 min( const F64vec1 &a, const F64vec1 &b ){ return ab ?a :b; } /* Square Root */ /* Reciprocal( inverse) Square Root */ //friend F64vec1 rsqrt( const F64vec1 &a ){ return 1./sqrt(a); } /* Reciprocal (inversion) */ friend F64vec1 rcp ( const F64vec1 &a ){ return 1./a; } /* Absolute value */ //friend F64vec1 fabs(const F64vec1 &a){ return fabs(a); } /* Sign */ //friend F64vec1 sgn(const F64vec1 &a){ return a<0 ?-1 :(a>0 ?1 :0); } /* Logical */ /* friend F64vec1 operator&( const F64vec1 &a, const F64vec1 &b ){ // mask returned F64vec1 tmp; int *x = (int*)&tmp; int *y = (int*)&a; int *z = (int*)&b; x[0] = y[0] & z[0]; x[1] = y[1] & z[1]; return tmp; } */ /* Non intrinsic functions */ /* Define all operators for consistensy */ friend void operator+=( F64vec1 &a, const F64vec1 &b ){ a = a + b ; } friend void operator-=( F64vec1 &a, const F64vec1 &b ){ a = a - b ; } friend void operator*=( F64vec1 &a, const F64vec1 &b ){ a = a * b ; } friend void operator/=( F64vec1 &a, const F64vec1 &b ){ a = a / b ; } friend ostream & operator<<(ostream &strm, const F64vec1 &a ){ strm<>(istream &strm, F64vec1 &a ){ double tmp; strm>>tmp; a = tmp; return strm; } };//__attribute__ ((aligned(16)));; typedef F64vec1 fvec; const int fvecLen = 1; #define fvec_true _f64vec1_true #define fvec_false _f64vec1_false #define _fvecalignment #endif