File indexing completed on 2026-04-09 07:49:46
0001 #pragma once
0002
0003 #if defined(__CUDACC__) || defined(__CUDABE__)
0004 # define SQUAD_METHOD __host__ __device__ __forceinline__
0005 #else
0006 # define SQUAD_METHOD inline
0007 #endif
0008
0009
0010 union dquad
0011 {
0012 double4 f ;
0013 longlong4 i ;
0014 ulonglong4 u ;
0015 };
0016
0017
0018
0019 struct dquad4
0020 {
0021 dquad q0 ;
0022 dquad q1 ;
0023 dquad q2 ;
0024 dquad q3 ;
0025
0026 SQUAD_METHOD void zero();
0027 SQUAD_METHOD double* data() ;
0028 SQUAD_METHOD const double* cdata() const ;
0029 };
0030
0031 SQUAD_METHOD void dquad4::zero()
0032 {
0033 q0.u.x = 0 ; q0.u.y = 0 ; q0.u.z = 0 ; q0.u.w = 0 ;
0034 q1.u.x = 0 ; q1.u.y = 0 ; q1.u.z = 0 ; q1.u.w = 0 ;
0035 q2.u.x = 0 ; q2.u.y = 0 ; q2.u.z = 0 ; q2.u.w = 0 ;
0036 q3.u.x = 0 ; q3.u.y = 0 ; q3.u.z = 0 ; q3.u.w = 0 ;
0037 }
0038
0039 SQUAD_METHOD double* dquad4::data() { return &q0.f.x ; }
0040 SQUAD_METHOD const double* dquad4::cdata() const { return &q0.f.x ; }
0041
0042
0043
0044 #if defined(__CUDACC__) || defined(__CUDABE__)
0045 #else
0046
0047
0048 inline std::ostream& operator<<(std::ostream& os, const dquad& q)
0049 {
0050 os
0051 << "f " << q.f
0052
0053
0054 ;
0055 return os;
0056 }
0057
0058
0059 inline std::ostream& operator<<(std::ostream& os, const dquad4& v)
0060 {
0061 os
0062 << std::endl
0063 << v.q0.f
0064 << std::endl
0065 << v.q1.f
0066 << std::endl
0067 << v.q2.f
0068 << std::endl
0069 << v.q3.f
0070 << std::endl
0071 ;
0072 return os;
0073 }
0074
0075 #endif
0076
0077
0078