//===- subzero/crosstest/test_arith.def - macros for tests ----*- C++ -*---===// // // The Subzero Code Generator // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file defines macros for crosstesting arithmetic operations. // //===----------------------------------------------------------------------===// #ifndef TEST_ARITH_DEF #define TEST_ARITH_DEF #define XSTR(s) STR(s) #define STR(s) #s #define UINTOP_TABLE \ /* inst, operator, div, shift */ \ X(Add, +, 0, 0) \ X(Sub, -, 0, 0) \ X(Mul, *, 0, 0) \ X(Udiv, /, 1, 0) \ X(Urem, %, 1, 0) \ X(Shl, <<, 0, 1) \ X(Lshr, >>, 0, 1) \ X(And, &, 0, 0) \ X(Or, |, 0, 0) \ X(Xor, ^, 0, 0) \ //#define X(inst, op, isdiv, isshift) #define SINTOP_TABLE \ /* inst, operator, div, shift */ \ X(Sdiv, /, 1, 0) \ X(Srem, %, 1, 0) \ X(Ashr, >>, 0, 1) \ //#define X(inst, op, isdiv, isshift) #define COMMA , #define FPOP_TABLE \ /* inst, infix_op, func */ \ X(Fadd, +, ) \ X(Fsub, -, ) \ X(Fmul, *, ) \ X(Fdiv, /, ) \ X(Frem, COMMA, myFrem) \ //#define X(inst, op, func) // Note: The above definition of COMMA, plus the "func" argument to // the X macro, are because C++ does not allow the % operator on // floating-point primitive types. To work around this, the expansion // is "func(a infix_op b)", which becomes "myFrem(a , b)" for the Frem // instruction and "(a + b)" for the Fadd instruction. The two // versions of myFrem() are defined in a separate bitcode file. #define INT_VALUE_ARRAY \ { 0x0, 0x1, 0x7ffffffe, 0x7fffffff, \ 0x80000000, 0x80000001, 0xfffffffe, 0xffffffff, \ 0x1e, 0x1f, 0x20, 0x21, 0x3e, 0x3f, 0x40, 0x41, \ 0x7e, 0x7f, 0x80, 0x81, \ 0xfe, 0xff, 0x100, 0x101, \ 0x7ffe, 0x7fff, 0x8000, 0x8001, \ 0xfffe, 0xffff, 0x10000, 0x10001 } #define FP_VALUE_ARRAY(NegInf, PosInf, NegNan, NaN) \ { 0, 1, 1.4, \ 1.5, 1.6, -1.4, \ -1.5, -1.6, 0x7e, \ 0x7f, 0x80, 0x81, \ 0xfe, 0xff, 0x7ffe, \ 0x7fff, 0x8000, 0x8001, \ 0xfffe, 0xffff, 0x7ffffffe, \ 0x7fffffff, 0x80000000, 0x80000001, \ 0xfffffffe, 0xffffffff, 0x100000000ll, \ 0x100000001ll, 0x7ffffffffffffffell, 0x7fffffffffffffffll, \ 0x8000000000000000ll, 0x8000000000000001ll, 0xfffffffffffffffell, \ 0xffffffffffffffffll, NegInf, PosInf, \ Nan, NegNan, -0.0, \ 10.0, FLT_MIN, FLT_MAX, \ DBL_MIN, DBL_MAX } #define MULIMM_TABLE \ /* mult_by */ \ X( 0) \ X( 1) \ X( 2) \ X( 3) \ X( 4) \ X( 5) \ X( 7) \ X( 8) \ X( 9) \ X( 10) \ X( 25) \ X( 100) \ X( 232) \ X(0x00FFF001) \ X(0x01000000) \ X(0x7FFFF07F) \ X(0x80000000) \ //#define X(mult_by) #endif // TEST_ARITH_DEF