source: trunk/lib_ir/test_pack.cpp

Last change on this file was 4050, checked in by linmengl, 5 years ago

add p2s.ll file, p2s_step works now

File size: 4.4 KB
Line 
1#include "utility.h"
2#include "s2p.h"
3#include "s2p_back.hpp"
4#include "p2s.h"
5#include "p2s_back.hpp"
6#include "ir_common.h"
7#include <iostream>
8#include <cstdlib>
9using namespace std;
10
11int main(int argc, char **argv)
12{
13  SIMD_type a, b, c, d, e;
14
15  for (unsigned i = 0; i < 50; i++) {
16    //Test packh_16
17    a = mvmd<32>::fill((int)rand() % 10000);
18    b = mvmd<32>::fill((int)rand() % 1000);
19    c = hsimd<16>::packh(a, b);
20    d = packh_16(a, b);
21
22    if (Store2String(c,1) != Store2String(d,1)) {
23      cout << Store2String(c,1) << endl;
24      cout << Store2String(d,1) << endl;
25      cout << "packh_16 faild." << endl;
26      return 1;
27    }
28
29    //Test packl_16
30    a = mvmd<32>::fill((int)rand() % 10000);
31    b = mvmd<32>::fill((int)rand() % 1000);
32    c = hsimd<16>::packl(a, b);
33    d = packl_16(a, b);
34
35    if (Store2String(c,1) != Store2String(d,1)) {
36      cout << Store2String(c,1) << endl;
37      cout << Store2String(d,1) << endl;
38      cout << "packl_16 faild." << endl;
39      return 1;
40    }
41
42    //Test ifh_1
43    a = mvmd<32>::fill((int)rand() % 10000);
44    b = mvmd<32>::fill((int)rand() % 1000);
45    c = mvmd<32>::fill((int)rand() % 1000);
46    d = ifh_1(a, b, c);
47    e = simd<1>::ifh(a, b, c);
48    if (Store2String(d,1) != Store2String(e,1)) {
49      cout << "ifh_1 faild." << endl;
50      return 1;
51    }
52
53    //Test srli_16
54    a = mvmd<32>::fill((int)rand() % 10000);
55    b = mvmd<16>::fill(1);
56    c = simd<16>::srli<1>(a);
57    d = srli_16(a, b);
58    if (Store2String(d,1) != Store2String(c,1)) {
59      cout << "srli_16 faild." << endl;
60      return 1;
61    }
62    a = mvmd<32>::fill((int)rand() % 10000);
63    b = mvmd<16>::fill(2);
64    c = simd<16>::srli<2>(a);
65    d = srli_16(a, b);
66    if (Store2String(d,1) != Store2String(c,1)) {
67      cout << "srli_16 faild." << endl;
68      return 1;
69    }
70
71    //Test slli_16
72    a = mvmd<32>::fill((int)rand() % 10000);
73    b = mvmd<16>::fill(1);
74    c = simd<16>::slli<1>(a);
75    d = slli_16(a, b);
76    if (Store2String(d,1) != Store2String(c,1)) {
77      cout << "slli_16 faild." << endl;
78      return 1;
79    }
80    a = mvmd<32>::fill((int)rand() % 10000);
81    b = mvmd<16>::fill(2);
82    c = simd<16>::slli<2>(a);
83    d = slli_16(a, b);
84    if (Store2String(d,1) != Store2String(c,1)) {
85      cout << "slli_16 faild." << endl;
86      return 1;
87    }
88
89    //Test s2p_step
90    SIMD_type hi_mask = simd<2>::himask(), p0, p1, q0, q1;
91    a = mvmd<32>::fill((int)rand() % 10000);
92    b = mvmd<32>::fill((int)rand() % 10000);
93    c = mvmd<16>::fill(2);
94    s2p_step(a, b, hi_mask, 2, p0, p1);
95    s2p_step_ir(a, b, hi_mask, c, &q0, &q1);
96    if (Store2String(p0,1) != Store2String(q0,1) ||
97        Store2String(p1,1) != Store2String(q1,1)) {
98      cout << "s2p_step failed." << endl;
99      return 1;
100    }
101    a = mvmd<32>::fill((int)rand() % 10000);
102    b = mvmd<32>::fill((int)rand() % 10000);
103    c = mvmd<16>::fill(4);
104    s2p_step(a, b, hi_mask, 4, p0, p1);
105    s2p_step_ir(a, b, hi_mask, c, &q0, &q1);
106    if (Store2String(p0,1) != Store2String(q0,1) ||
107        Store2String(p1,1) != Store2String(q1,1)) {
108      cout << "s2p_step failed." << endl;
109      return 1;
110    }
111
112    //Test esimd<8>::mergeh
113    c = mergeh_8(a, b);
114    d = esimd<8>::mergeh(a, b);
115    if (Store2String(c,1) != Store2String(d,1)) {
116      cout << "mergh8 failed." << endl;
117      return 1;
118    }
119
120    //Test esimd<8>::mergel
121    c = mergel_8(a, b);
122    d = esimd<8>::mergel(a, b);
123    if (Store2String(c,1) != Store2String(d,1)) {
124      cout << "mergl8 failed." << endl;
125      return 1;
126    }
127
128    //Test p2s_step
129    p2s_step_ir(a, b, simd<8>::himask(), mvmd<16>::fill(1), &p0, &p1);
130    p2s_step(a, b, simd<8>::himask(), 1, q0, q1);
131    if (Store2String(p0,1) != Store2String(q0,1) ||
132        Store2String(p1,1) != Store2String(q1,1)) {
133      cout << "p2s_step failed." << endl;
134      return 1;
135    }
136    p2s_step_ir(a, b, simd<8>::himask(), mvmd<16>::fill(2), &p0, &p1);
137    p2s_step(a, b, simd<8>::himask(), 2, q0, q1);
138    if (Store2String(p0,1) != Store2String(q0,1) ||
139        Store2String(p1,1) != Store2String(q1,1)) {
140      cout << "p2s_step failed." << endl;
141      return 1;
142    }
143    p2s_step_ir(a, b, simd<8>::himask(), mvmd<16>::fill(4), &p0, &p1);
144    p2s_step(a, b, simd<8>::himask(), 4, q0, q1);
145    if (Store2String(p0,1) != Store2String(q0,1) ||
146        Store2String(p1,1) != Store2String(q1,1)) {
147      cout << "p2s_step failed." << endl;
148      return 1;
149    }
150  }
151
152  cout << "Test passed." << endl;
153  return 0;
154}
155
Note: See TracBrowser for help on using the repository browser.