OLD | NEW |
1 //===- subzero/crosstest/test_arith.def - macros for tests ----*- C++ -*---===// | 1 //===- subzero/crosstest/test_arith.def - macros for tests ----*- C++ -*---===// |
2 // | 2 // |
3 // The Subzero Code Generator | 3 // The Subzero Code Generator |
4 // | 4 // |
5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
7 // | 7 // |
8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
9 // | 9 // |
10 // This file defines macros for crosstesting arithmetic operations. | 10 // This file defines macros for crosstesting arithmetic operations. |
11 // | 11 // |
12 //===----------------------------------------------------------------------===// | 12 //===----------------------------------------------------------------------===// |
13 | 13 |
14 #ifndef TEST_ARITH_DEF | 14 #ifndef TEST_ARITH_DEF |
15 #define TEST_ARITH_DEF | 15 #define TEST_ARITH_DEF |
16 | 16 |
17 #define XSTR(s) STR(s) | 17 #define XSTR(s) STR(s) |
18 #define STR(s) #s | 18 #define STR(s) #s |
19 | 19 |
20 #define UINTOP_TABLE \ | 20 #define UINTOP_TABLE \ |
21 /* inst, operator, div, shift */ \ | 21 /* inst, operator, div, shift */ \ |
22 X(Add, +, 0, 0) \ | 22 X(Add, +, 0, 0) \ |
23 X(Sub, -, 0, 0) \ | 23 X(Sub, -, 0, 0) \ |
24 X(Mul, *, 0, 0) \ | 24 X(Mul, *, 0, 0) \ |
25 X(Udiv, /, 1, 0) \ | 25 X(Udiv, /, 1, 0) \ |
26 X(Urem, %, 1, 0) \ | 26 X(Urem, %, 1, 0) \ |
27 X(Shl, <<, 0, 1) \ | 27 X(Shl, <<, 0, 1) \ |
28 X(Lshr, >>, 0, 1) \ | 28 X(Lshr, >>, 0, 1) \ |
29 X(And, &, 0, 0) \ | 29 X(And, &, 0, 0) \ |
30 X(Or, |, 0, 0) \ | 30 X(Or, |, 0, 0) \ |
31 X(Xor, ^, 0, 0) \ | 31 X(Xor, ^, 0, 0) \ |
32 //#define X(inst, op, isdiv, isshift) | 32 //#define X(inst, op, isdiv, isshift) |
33 | 33 |
34 #define SINTOP_TABLE \ | 34 #define SINTOP_TABLE \ |
35 /* inst, operator, div, shift */ \ | 35 /* inst, operator, div, shift */ \ |
36 X(Sdiv, /, 1, 0) \ | 36 X(Sdiv, /, 1, 0) \ |
37 X(Srem, %, 1, 0) \ | 37 X(Srem, %, 1, 0) \ |
38 X(Ashr, >>, 0, 1) \ | 38 X(Ashr, >>, 0, 1) \ |
39 //#define X(inst, op, isdiv, isshift) | 39 //#define X(inst, op, isdiv, isshift) |
40 | 40 |
41 #define COMMA , | 41 #define COMMA , |
42 #define FPOP_TABLE \ | 42 #define FPOP_TABLE \ |
43 /* inst, infix_op, func */ \ | 43 /* inst, infix_op, func */ \ |
44 X(Fadd, +, ) \ | 44 X(Fadd, +, ) \ |
45 X(Fsub, -, ) \ | 45 X(Fsub, -, ) \ |
46 X(Fmul, *, ) \ | 46 X(Fmul, *, ) \ |
47 X(Fdiv, /, ) \ | 47 X(Fdiv, /, ) \ |
48 X(Frem, COMMA, myFrem) \ | 48 X(Frem, COMMA, myFrem) \ |
49 //#define X(inst, op, func) | 49 //#define X(inst, op, func) |
50 | 50 |
51 // Note: The above definition of COMMA, plus the "func" argument to | 51 // Note: The above definition of COMMA, plus the "func" argument to |
52 // the X macro, are because C++ does not allow the % operator on | 52 // the X macro, are because C++ does not allow the % operator on |
53 // floating-point primitive types. To work around this, the expansion | 53 // floating-point primitive types. To work around this, the expansion |
54 // is "func(a infix_op b)", which becomes "myFrem(a , b)" for the Frem | 54 // is "func(a infix_op b)", which becomes "myFrem(a , b)" for the Frem |
55 // instruction and "(a + b)" for the Fadd instruction. The two | 55 // instruction and "(a + b)" for the Fadd instruction. The two |
56 // versions of myFrem() are defined in a separate bitcode file. | 56 // versions of myFrem() are defined in a separate bitcode file. |
57 | 57 |
58 #define INT_VALUE_ARRAY \ | 58 #define INT_VALUE_ARRAY \ |
59 { 0x0, 0x1, 0x7ffffffe, 0x7fffffff, \ | 59 { 0x0, 0x1, 0x7ffffffe, 0x7fffffff, \ |
60 0x80000000, 0x80000001, 0xfffffffe, 0xffffffff, \ | 60 0x80000000, 0x80000001, 0xfffffffe, 0xffffffff, \ |
61 0x1e, 0x1f, 0x20, 0x21, 0x3e, 0x3f, 0x40, 0x41, \ | 61 0x1e, 0x1f, 0x20, 0x21, 0x3e, 0x3f, 0x40, 0x41, \ |
62 0x7e, 0x7f, 0x80, 0x81, \ | 62 0x7e, 0x7f, 0x80, 0x81, \ |
63 0xfe, 0xff, 0x100, 0x101, \ | 63 0xfe, 0xff, 0x100, 0x101, \ |
64 0x7ffe, 0x7fff, 0x8000, 0x8001, \ | 64 0x7ffe, 0x7fff, 0x8000, 0x8001, \ |
65 0xfffe, 0xffff, 0x10000, 0x10001 } | 65 0xfffe, 0xffff, 0x10000, 0x10001 } |
66 | 66 |
67 #define FP_VALUE_ARRAY(NegInf, PosInf, NegNan, NaN) \ | 67 #define FP_VALUE_ARRAY(NegInf, PosInf, NegNan, NaN) \ |
68 { 0, 1, 1.4, \ | 68 { 0, 1, 1.4, \ |
69 1.5, 1.6, -1.4, \ | 69 1.5, 1.6, -1.4, \ |
70 -1.5, -1.6, 0x7e, \ | 70 -1.5, -1.6, 0x7e, \ |
71 0x7f, 0x80, 0x81, \ | 71 0x7f, 0x80, 0x81, \ |
72 0xfe, 0xff, 0x7ffe, \ | 72 0xfe, 0xff, 0x7ffe, \ |
73 0x7fff, 0x8000, 0x8001, \ | 73 0x7fff, 0x8000, 0x8001, \ |
74 0xfffe, 0xffff, 0x7ffffffe, \ | 74 0xfffe, 0xffff, 0x7ffffffe, \ |
75 0x7fffffff, 0x80000000, 0x80000001, \ | 75 0x7fffffff, 0x80000000, 0x80000001, \ |
76 0xfffffffe, 0xffffffff, 0x100000000ll, \ | 76 0xfffffffe, 0xffffffff, 0x100000000ll, \ |
77 0x100000001ll, 0x7ffffffffffffffell, 0x7fffffffffffffffll, \ | 77 0x100000001ll, 0x7ffffffffffffffell, 0x7fffffffffffffffll, \ |
78 0x8000000000000000ll, 0x8000000000000001ll, 0xfffffffffffffffell, \ | 78 0x8000000000000000ll, 0x8000000000000001ll, 0xfffffffffffffffell, \ |
79 0xffffffffffffffffll, NegInf, PosInf, \ | 79 0xffffffffffffffffll, NegInf, PosInf, \ |
80 Nan, NegNan, -0.0, \ | 80 Nan, NegNan, -0.0, \ |
81 10.0, FLT_MIN, FLT_MAX, \ | 81 10.0, FLT_MIN, FLT_MAX, \ |
82 DBL_MIN, DBL_MAX } | 82 DBL_MIN, DBL_MAX } |
83 | 83 |
| 84 #define MULIMM_TABLE \ |
| 85 /* mult_by */ \ |
| 86 X( 0) \ |
| 87 X( 1) \ |
| 88 X( 2) \ |
| 89 X( 3) \ |
| 90 X( 4) \ |
| 91 X( 5) \ |
| 92 X( 7) \ |
| 93 X( 8) \ |
| 94 X( 9) \ |
| 95 X( 10) \ |
| 96 X( 25) \ |
| 97 X( 100) \ |
| 98 X( 232) \ |
| 99 X(0x00FFF001) \ |
| 100 X(0x01000000) \ |
| 101 X(0x7FFFF07F) \ |
| 102 X(0x80000000) \ |
| 103 //#define X(mult_by) |
| 104 |
84 #endif // TEST_ARITH_DEF | 105 #endif // TEST_ARITH_DEF |
OLD | NEW |