14 template <
typename type>
int vecLength() {
return 0; }
29 #define MAX_SHORT_INV 3.051850948e-5
30 static inline __device__
float s2f(
const short &a) {
return static_cast<float>(a) *
MAX_SHORT_INV; }
32 template <
typename FloatN>
36 __device__
inline void copyFloatN(float2 &a,
const short2 &b) { a = make_float2(s2f(b.x), s2f(b.y)); }
37 __device__
inline void copyFloatN(float4 &a,
const short4 &b) { a = make_float4(s2f(b.x), s2f(b.y), s2f(b.z), s2f(b.w)); }
39 __device__
inline void copyFloatN(float2 &a,
const double2 &b) { a = make_float2(b.x, b.y); }
40 __device__
inline void copyFloatN(double2 &a,
const float2 &b) { a = make_double2(b.x, b.y); }
41 __device__
inline void copyFloatN(float4 &a,
const double4 &b) { a = make_float4(b.x, b.y, b.z, b.w); }
42 __device__
inline void copyFloatN(double4 &a,
const float4 &b) { a = make_double4(b.x, b.y, b.z, b.w); }
45 __device__
inline void copyFloatN(short2 &a,
const float2 &b) { a = make_short2(b.x, b.y); }
46 __device__
inline void copyFloatN(short4 &a,
const float4 &b) { a = make_short4(b.x, b.y, b.z, b.w); }
47 __device__
inline void copyFloatN(short2 &a,
const double2 &b) { a = make_short2(b.x, b.y); }
48 __device__
inline void copyFloatN(short4 &a,
const double4 &b) { a = make_short4(b.x, b.y, b.z, b.w); }
62 template<
typename OutputType,
typename InputType>
63 __device__
inline void convert(OutputType
x[], InputType y[],
const int N) {
66 for (
int j=0; j<N; j++)
copyFloatN(x[j], y[j]);
71 for (
int j=0; j<N; j++)
x[j] = make_float2(y[j].
x, y[j].y);
76 for (
int j=0; j<N; j++)
x[j] = make_float4(y[j].
x, y[j].y, y[j].z, y[j].w);
83 for (
int j=0; j<N; j++)
x[j] = make_double4(y[2*j].
x, y[2*j].y, y[2*j+1].x, y[2*j+1].y);
88 for (
int j=0; j<N/2; j++) {
89 x[2*j] = make_double2(y[j].
x, y[j].y);
90 x[2*j+1] = make_double2(y[j].z, y[j].w);
96 for (
int j=0; j<N; j++)
x[j] = make_float4(y[2*j].
x, y[2*j].y, y[2*j+1].x, y[2*j+1].y);
101 for (
int j=0; j<N/2; j++) {
102 x[2*j] = make_float2(y[j].
x, y[j].y);
103 x[2*j+1] = make_float2(y[j].z, y[j].w);
109 for (
int j=0; j<N; j++)
x[j] = make_short4(y[2*j].
x, y[2*j].y, y[2*j+1].x, y[2*j+1].y);
114 for (
int j=0; j<N/2; j++) {
115 x[2*j] = make_float2(y[j].
x, y[j].y);
116 x[2*j+1] = make_float2(y[j].z, y[j].w);
122 for (
int j=0; j<N; j++)
x[j] = make_float4(y[2*j].
x, y[2*j].y, y[2*j+1].x, y[2*j+1].y);
127 for (
int j=0; j<N/2; j++) {
128 x[2*j] = make_short2(y[j].
x, y[j].y);
129 x[2*j+1] = make_short2(y[j].z, y[j].w);
135 for (
int j=0; j<N; j++)
x[j] = make_short4(y[2*j].
x, y[2*j].y, y[2*j+1].x, y[2*j+1].y);
140 for (
int j=0; j<N/2; j++) {
141 x[2*j] = make_double2(y[j].
x, y[j].y);
142 x[2*j+1] = make_double2(y[j].z, y[j].w);
148 for (
int j=0; j<N; j++)
x[j] = make_double4(y[2*j].
x, y[2*j].y, y[2*j+1].x, y[2*j+1].y);
153 for (
int j=0; j<N/2; j++) {
154 x[2*j] = make_short2(y[j].
x, y[j].y);
155 x[2*j+1] = make_short2(y[j].z, y[j].w);
161 for (
int j=0; j<N; j++)
x[j] = make_float4(y[2*j].
x, y[2*j].y, y[2*j+1].x, y[2*j+1].y);
166 for (
int j=0; j<N/2; j++) {
167 x[2*j] = make_double2(y[j].
x, y[j].y);
168 x[2*j+1] = make_double2(y[j].z, y[j].w);
174 for (
int j=0; j<N; j++)
x[j] = make_double4(y[2*j].
x, y[2*j].y, y[2*j+1].x, y[2*j+1].y);
179 for (
int j=0; j<N/2; j++) {
180 x[2*j] = make_float2(y[j].
x, y[j].y);
181 x[2*j+1] = make_float2(y[j].z, y[j].w);