source: trunk/lib_ir/gen/test_llc_256.pytemplate.cpp @ 4302

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

use template for 256-bit library test. Tested 256-bit long integer shift.

File size: 1.8 KB
Line 
1#include "utility_256.h"
2#include <ctime>
3#include <iostream>
4#include <cstdlib>
5using namespace std;
6
7extern "C" {
8  SIMD_type add_with_carry_ir_better(SIMD_type a, SIMD_type b, SIMD_type carry_in, SIMD_type *carry_out, SIMD_type *sum);
9
10  {% for sh in LongShiftAmount256 %}
11  SIMD_type long_shift_dslli_{{sh}}(SIMD_type a, SIMD_type b);
12  {% endfor %}
13}
14
15void fill_random(SIMD_type &a, SIMD_type &b) {
16  a = mvmd<8>::fill((int)rand() % (1 << 8));
17  b = mvmd<8>::fill((int)rand() % (1 << 8));
18}
19
20string to_string(const SIMD_type &a) {
21  return Store2String(a, 2);
22}
23
24int test_long_shift(const SIMD_type &a, const SIMD_type &b) {
25  SIMD_type c, d, e;
26
27  {% for sh in LongShiftAmount256 %}
28  c = long_shift_dslli_{{sh}}(a, b);
29  d = simd_or( simd<256>::slli<{{sh}}>(a), simd<256>::srli<{{256 - sh}}>(b) );
30  if (to_string(c) != to_string(d)) {
31    cout << "long shift for sh = {{sh}} failed." << endl;
32    return 1;
33  }
34 
35  {% endfor %}
36
37  return 0;
38}
39
40int main()
41{
42  SIMD_type a, b, c, d, e, f, obit, sum;
43  for (int i = 0; i < 500; ++i) {
44    fill_random(a, b);
45
46    int y = rand() % 2;
47    c = mvmd<256>::fill(y);
48    add_with_carry_ir_better(a, b, c, &obit, &sum);
49    add_ci_co(a, b, c, e, f);
50
51    if (Store2String(obit, 2) != Store2String(e, 2) ||
52        Store2String(sum, 2)  != Store2String(f, 2)) {
53      cout << "add_with_carry_ir_better failed." << endl;
54      cout << "a: " << Store2String(a, 2) << endl;
55      cout << "b: " << Store2String(b, 2) << endl;
56      cout << "c: " << Store2String(c, 2) << endl;
57
58      cout << "sum0: " << Store2String(sum, 2) << endl;
59      cout << "sum1: " << Store2String(f, 2) << endl;
60      cout << "obit0: " << Store2String(obit, 2) << endl;
61      cout << "obit1: " << Store2String(e, 2) << endl;
62
63      return 1;
64    }
65
66    if (test_long_shift(a, b))
67      return 1;
68  }
69  return 0;
70}
71
Note: See TracBrowser for help on using the repository browser.