source: trunk/lib_ir/gen/test_llc.pytemplate.cpp @ 3997

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

some refactoring, mult for i4/i8 ready now

File size: 3.0 KB
Line 
1/******************
2 * Python template to auto gen llc test file.
3 * sudo easy_install Jinja2 to install the Jinja2 template system
4 * {{HeaderComment}}
5 */
6
7#include "utility.h"
8#include <iostream>
9#include <cstdlib>
10using namespace std;
11{% set Names = FunctionNamesI2 + FunctionNamesI4 + FunctionNamesI8 %}
12
13extern "C" {
14{% for name in Names %}
15  SIMD_type {{ name.c }}(SIMD_type a, SIMD_type b);
16{% endfor %}
17
18{% for x in range(0, 4) %}
19  SIMD_type insertelement_idx0_elt{{ x }}(SIMD_type a);
20  SIMD_type insertelement_idx1_elt{{ x }}(SIMD_type a);
21  SIMD_type insertelement_idx17_elt{{ x }}(SIMD_type a);
22{% endfor %}
23
24{% for x in [0, 1, 17] %}
25  short extractelement_idx{{ x }}(SIMD_type a);
26{% endfor %}
27}
28
29void fill_random(SIMD_type &a, SIMD_type &b)
30{
31  a = mvmd<32>::fill((int)rand() % 10000);
32  b = mvmd<32>::fill((int)rand() % 10000);
33}
34
35int main() {
36  SIMD_type a, b, c, d;
37  short x;
38
39  for (unsigned i = 0; i < 50; ++i) {
40    fill_random(a, b);
41
42    {% for name in Names %}
43    {% if name.flag == "" %}
44    c = {{ name.c }}(a, b);
45    d = {{ name.cxx }}(a, b);
46    if (Store2String(c,1) != Store2String(d,1)) {
47      cout << "{{ name.c }} faild." << endl;
48      cout << "A = " << Store2String(a, 1) << endl;
49      cout << "B = " << Store2String(b, 1) << endl;
50      cout << "c = " << Store2String(c, 1) << endl;
51      cout << "cxx=" << Store2String(d, 1) << endl;
52
53      return 1;
54    }
55
56    {% endif %}
57    {% endfor %}
58
59    //Shifting tests need special treatment
60    {% for name in Names %}
61    {% if name.flag == "shifting" %}
62    {% for x in range(0, name.fw) %}
63    c = {{ name.cxx }}<{{ x }}>(a);
64    b = mvmd<{{ name.fw }}>::fill({{ x }});
65    d = {{ name.c }}(a, b);
66    if (Store2String(c,1) != Store2String(d,1)) {
67      cout << "{{ name.c }} faild." << endl;
68      return 1;
69    }
70
71    {% endfor %}
72    {% endif %}
73    {% endfor %}
74  }
75
76  //Testcases for insert/extract element on v64i2
77  {% for x in range(0, 4) %}
78  a = mvmd<32>::fill4(0, 1, 0, 0);
79  b = mvmd<32>::fill4(0, 1, 0, {{ x }});
80  c = insertelement_idx0_elt{{ x }}(a);
81  if (Store2String(b,1) != Store2String(c,1)) {
82    cout << "insertelement_idx0_elt{{ x }} failed." << endl;
83    return 1;
84  }
85
86  b = mvmd<32>::fill4(0, 1, 0, {{ x }} << 2);
87  c = insertelement_idx1_elt{{ x }}(a);
88  if (Store2String(b,1) != Store2String(c,1)) {
89    cout << "insertelement_idx1_elt{{ x }} failed." << endl;
90    return 1;
91  }
92
93  b = mvmd<32>::fill4(0, 1, {{ x }} << 2, 0);
94  c = insertelement_idx17_elt{{ x }}(a);
95  if (Store2String(b,1) != Store2String(c,1)) {
96    cout << "insertelement_idx17_elt{{ x }} failed." << endl;
97    return 1;
98  }
99  {% endfor %}
100
101  a = mvmd<32>::fill4(0, 1, 0, 3);
102  x = extractelement_idx0(a);
103  if (x != 3) {
104    cout << "extractelement_idx0 failed." << endl;
105  }
106
107  a = mvmd<32>::fill4(0, 1, 0, 3 << 2);
108  x = extractelement_idx1(a);
109  if (x != 3) {
110    cout << "extractelement_idx1 failed." << endl;
111  }
112
113  a = mvmd<32>::fill4(0, 1, 3 << 2, 3);
114  x = extractelement_idx17(a);
115  if (x != 3) {
116    cout << "extractelement_idx17 failed." << endl;
117  }
118
119  return 0;
120}
121
Note: See TracBrowser for help on using the repository browser.