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

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

do exhaust test on insert/extract vector elt on both i2/i4

File size: 2.4 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{% set INS_EXT_VEC_ELT_FWs = [2, 4] %}
13
14extern "C" {
15{% for name in Names %}
16  SIMD_type {{ name.c }}(SIMD_type a, SIMD_type b);
17{% endfor %}
18
19{% for fw in INS_EXT_VEC_ELT_FWs %}
20  SIMD_type insertelement_{{ fw }}(SIMD_type a, short elt, int idx);
21  short extractelement_{{ fw }}(SIMD_type a, int idx);
22{% endfor %}
23}
24
25void fill_random(SIMD_type &a, SIMD_type &b)
26{
27  a = mvmd<32>::fill((int)rand() % 10000);
28  b = mvmd<32>::fill((int)rand() % 10000);
29}
30
31int main() {
32  SIMD_type a, b, c, d;
33  short x, y;
34
35  for (unsigned i = 0; i < 50; ++i) {
36    fill_random(a, b);
37
38    //All the binary ops
39    {% for name in Names %}
40    {% if name.flag == "" %}
41      c = {{ name.c }}(a, b);
42      d = {{ name.cxx }}(a, b);
43      if (Store2String(c,1) != Store2String(d,1)) {
44        cout << "{{ name.c }} faild." << endl;
45        cout << "A = " << Store2String(a, 1) << endl;
46        cout << "B = " << Store2String(b, 1) << endl;
47        cout << "c = " << Store2String(c, 1) << endl;
48        cout << "cxx=" << Store2String(d, 1) << endl;
49
50        return 1;
51      }
52
53    {% endif %}
54    {% endfor %}
55
56    //Shifting tests need special treatment
57    {% for name in Names %}
58    {% if name.flag == "shifting" %}
59    {% for x in range(0, name.fw) %}
60      c = {{ name.cxx }}<{{ x }}>(a);
61      b = mvmd<{{ name.fw }}>::fill({{ x }});
62      d = {{ name.c }}(a, b);
63      if (Store2String(c,1) != Store2String(d,1)) {
64        cout << "{{ name.c }} faild." << endl;
65        return 1;
66      }
67
68    {% endfor %}
69    {% endif %}
70    {% endfor %}
71
72    //insert_vector_elt and extract_
73    {% for fw in INS_EXT_VEC_ELT_FWs %}
74    {% for idx in range(0, 128 // fw) %}
75      x = extractelement_{{ fw }}(a, {{ idx }});
76      y = mvmd<{{ fw }}>::extract<{{ idx }}>(a);
77      if (x != y) {
78        cout << "extractelement_{{fw}} failed." << endl;
79        return 1;
80      }
81
82      x = rand() % 100;
83      c = insertelement_{{ fw }}(a, x, {{ idx }});
84      d = mvmd<{{ fw }}>::insert<{{ idx }}>(a, x);
85      if (Store2String(c,1) != Store2String(d,1)) {
86        cout << "insertelement_{{fw}} failed." << endl;
87        return 1;
88      }
89    {% endfor %}
90    {% endfor %}
91  }
92
93  return 0;
94}
95
Note: See TracBrowser for help on using the repository browser.