152
|
1 /* { dg-do compile } */
|
|
2 /* { dg-require-effective-target arm_fp_dp_ok } */
|
|
3 /* { dg-skip-if "need fp instructions" { *-*-* } { "-mfloat-abi=soft" } { "" } } */
|
|
4 /* { dg-options "-O" } */
|
|
5 /* { dg-add-options arm_fp_dp } */
|
|
6 /* { dg-final { scan-assembler-not "\tbl\t" } } */
|
|
7 /* { dg-final { scan-assembler-not "__aeabi" } } */
|
|
8 int x, y;
|
|
9
|
|
10 #define EQ(X, Y) ((X) == (Y))
|
|
11 #define NE(X, Y) ((X) != (Y))
|
|
12 #define LT(X, Y) ((X) < (Y))
|
|
13 #define GT(X, Y) ((X) > (Y))
|
|
14 #define LE(X, Y) ((X) <= (Y))
|
|
15 #define GE(X, Y) ((X) >= (Y))
|
|
16
|
|
17 #define TEST_EXPR(NAME, ARGS, EXPR) \
|
|
18 int NAME##1 ARGS { return (EXPR); } \
|
|
19 int NAME##2 ARGS { return !(EXPR); } \
|
|
20 int NAME##3 ARGS { return (EXPR) ? x : y; } \
|
|
21 void NAME##4 ARGS { if (EXPR) x++; } \
|
|
22 void NAME##5 ARGS { if (!(EXPR)) x++; }
|
|
23
|
|
24 #define TEST(NAME, TYPE, OPERATOR) \
|
|
25 TEST_EXPR (NAME##_rr, (TYPE a1, TYPE a2), OPERATOR (a1, a2)) \
|
|
26 TEST_EXPR (NAME##_rm, (TYPE a1, TYPE *a2), OPERATOR (a1, *a2)) \
|
|
27 TEST_EXPR (NAME##_mr, (TYPE *a1, TYPE a2), OPERATOR (*a1, a2)) \
|
|
28 TEST_EXPR (NAME##_mm, (TYPE *a1, TYPE *a2), OPERATOR (*a1, *a2)) \
|
|
29 TEST_EXPR (NAME##_rc, (TYPE a1), OPERATOR (a1, 100)) \
|
|
30 TEST_EXPR (NAME##_cr, (TYPE a1), OPERATOR (100, a1))
|
|
31
|
|
32 #define TEST_OP(NAME, OPERATOR) \
|
|
33 TEST (d_##NAME, double, OPERATOR) \
|
|
34 TEST (ld_##NAME, long double, OPERATOR)
|
|
35
|
|
36 TEST_OP (eq, EQ)
|
|
37 TEST_OP (ne, NE)
|
|
38 TEST_OP (lt, LT)
|
|
39 TEST_OP (gt, GT)
|
|
40 TEST_OP (le, LE)
|
|
41 TEST_OP (ge, GE)
|
|
42 TEST_OP (blt, __builtin_isless)
|
|
43 TEST_OP (bgt, __builtin_isgreater)
|
|
44 TEST_OP (ble, __builtin_islessequal)
|
|
45 TEST_OP (bge, __builtin_isgreaterequal)
|
|
46 /* This one should be expanded into separate ordered and equality
|
|
47 comparisons. */
|
|
48 TEST_OP (blg, __builtin_islessgreater)
|
|
49 TEST_OP (bun, __builtin_isunordered)
|