Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Annotation of /tests/vec-tests/test.cxx
ViewVC logotype

Annotation of /tests/vec-tests/test.cxx

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4640 - (view) (download) (as text)

1 : glk 4640 #include <iostream>
2 :    
3 :     typedef float raw2f __attribute__ ((vector_size (8)));
4 :     typedef float raw4f __attribute__ ((vector_size (16)));
5 :     typedef float raw8f __attribute__ ((vector_size (32)));
6 :     typedef float raw16f __attribute__ ((vector_size (64)));
7 :    
8 :     template <typename T, typename R, int d>
9 :     struct Vec
10 :     {
11 :     R _rep;
12 :    
13 :     Vec (R const &r) : _rep(r) { }
14 :     Vec (const T *mem);
15 :    
16 :     void load (const T *mem);
17 :     void store (T *mem);
18 :     };
19 :    
20 :     struct rep2f {
21 :     raw2f v0;
22 :     rep2f (const raw2f &v) : v0(v) { }
23 :     rep2f (float a, float b) : v0((raw2f){a, b}) { }
24 :     };
25 :    
26 :     typedef Vec<float,rep2f,2> vec2f;
27 :    
28 :     inline rep2f vec_add (rep2f const &a, rep2f const &b) { return rep2f(a.v0 + b.v0); }
29 :     inline rep2f vec_sub (rep2f const &a, rep2f const &b) { return rep2f(a.v0 - b.v0); }
30 :     inline rep2f vec_scale (float s, rep2f const &a) { return rep2f((raw2f){s, s} * a.v0); }
31 :     inline rep2f vec_mul (rep2f const &a, rep2f const &b) { return rep2f(a.v0 * b.v0); }
32 :    
33 :     template <typename T, typename R, int d>
34 :     inline Vec<T,R,d> operator+ (Vec<T,R,d> const &a, Vec<T,R,d> const &b)
35 :     {
36 :     return Vec<T,R,d>(vec_add (a._rep, b._rep));
37 :     }
38 :    
39 :     template<>
40 :     inline Vec<float,rep2f,2>::Vec (const float *mem) : _rep(mem[0],mem[1]) { }
41 :    
42 :     template<>
43 :     inline void Vec<float,rep2f,2>::load (const float *mem)
44 :     {
45 :     this->_rep = rep2f(mem[0],mem[1]);
46 :     }
47 :    
48 :     static float Data[] = {0.0f, 1.0f, 12.5f, -3.0f};
49 :    
50 :     int main (int argc, const char **argv)
51 :     {
52 :     // vec2f u(rep2f (0.0f, 1.0f));
53 :     // vec2f v(rep2f (12.5f, -3.0f));
54 :     vec2f u(&Data[0]);
55 :     vec2f v(&Data[2]);
56 :    
57 :     vec2f w = u + v;
58 :    
59 :     std::cout << "w = [" << w._rep.v0[0] << ", " << w._rep.v0[1] << "]" << std::endl;
60 :    
61 :     return 0;
62 :     }

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0