PR116019: Improve tail call error message
[official-gcc.git] / gcc / testsuite / gcc.target / aarch64 / advsimd-intrinsics / binary_op_float.inc
blobcc1bfb3e7bfeb520b8efff857c031926d3635182
1 /* Floating-point only version of binary_op_no64.inc template.  Currently only
2    float16_t is used.  */
4 #include <math.h>
6 #define FNNAME1(NAME) exec_ ## NAME
7 #define FNNAME(NAME) FNNAME1(NAME)
9 void FNNAME (INSN_NAME) (void)
11   int i;
13   /* Basic test: z = INSN (x, y), then store the result.  */
14 #define TEST_BINARY_OP1(INSN, Q, T1, T2, W, N)                          \
15   VECT_VAR(vector_res, T1, W, N) =                                      \
16     INSN##Q##_##T2##W(VECT_VAR(vector, T1, W, N),                       \
17                       VECT_VAR(vector2, T1, W, N));                     \
18   vst1##Q##_##T2##W(VECT_VAR(result, T1, W, N), VECT_VAR(vector_res, T1, W, N))
20 #define TEST_BINARY_OP(INSN, Q, T1, T2, W, N)   \
21   TEST_BINARY_OP1(INSN, Q, T1, T2, W, N)        \
23 #ifdef HAS_FLOAT16_VARIANT
24   DECL_VARIABLE(vector, float, 16, 4);
25   DECL_VARIABLE(vector2, float, 16, 4);
26   DECL_VARIABLE(vector_res, float, 16, 4);
28   DECL_VARIABLE(vector, float, 16, 8);
29   DECL_VARIABLE(vector2, float, 16, 8);
30   DECL_VARIABLE(vector_res, float, 16, 8);
31 #endif
33 #ifdef HAS_FLOAT_VARIANT
34   DECL_VARIABLE(vector, float, 32, 2);
35   DECL_VARIABLE(vector2, float, 32, 2);
36   DECL_VARIABLE(vector_res, float, 32, 2);
38   DECL_VARIABLE(vector, float, 32, 4);
39   DECL_VARIABLE(vector2, float, 32, 4);
40   DECL_VARIABLE(vector_res, float, 32, 4);
41 #endif
43   clean_results ();
45   /* Initialize input "vector" from "buffer".  */
46 #ifdef HAS_FLOAT16_VARIANT
47   VLOAD(vector, buffer, , float, f, 16, 4);
48   VLOAD(vector, buffer, q, float, f, 16, 8);
49 #endif
50 #ifdef HAS_FLOAT_VARIANT
51   VLOAD(vector, buffer, , float, f, 32, 2);
52   VLOAD(vector, buffer, q, float, f, 32, 4);
53 #endif
55   /* Choose init value arbitrarily, will be used as comparison value.  */
56 #ifdef HAS_FLOAT16_VARIANT
57   VDUP(vector2, , float, f, 16, 4, -15.5f);
58   VDUP(vector2, q, float, f, 16, 8, -14.5f);
59 #endif
60 #ifdef HAS_FLOAT_VARIANT
61   VDUP(vector2, , float, f, 32, 2, -15.5f);
62   VDUP(vector2, q, float, f, 32, 4, -14.5f);
63 #endif
65 #ifdef HAS_FLOAT16_VARIANT
66 #define FLOAT16_VARIANT(MACRO, VAR)                     \
67   MACRO(VAR, , float, f, 16, 4);                        \
68   MACRO(VAR, q, float, f, 16, 8);
69 #else
70 #define FLOAT16_VARIANT(MACRO, VAR)
71 #endif
73 #ifdef HAS_FLOAT_VARIANT
74 #define FLOAT_VARIANT(MACRO, VAR)                       \
75   MACRO(VAR, , float, f, 32, 2);                        \
76   MACRO(VAR, q, float, f, 32, 4);
77 #else
78 #define FLOAT_VARIANT(MACRO, VAR)
79 #endif
81 #define TEST_MACRO_NO64BIT_VARIANT_1_5(MACRO, VAR)      \
83   /* Apply a binary operator named INSN_NAME.  */
84   FLOAT16_VARIANT(TEST_BINARY_OP, INSN_NAME);
85   FLOAT_VARIANT(TEST_BINARY_OP, INSN_NAME);
87 #ifdef HAS_FLOAT16_VARIANT
88   CHECK_FP(TEST_MSG, float, 16, 4, PRIx16, expected, "");
89   CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected, "");
91   /* Extra FP tests with special values (NaN, ....)  */
92   VDUP(vector, q, float, f, 16, 8, 1.0f);
93   VDUP(vector2, q, float, f, 16, 8, NAN);
94   TEST_BINARY_OP(INSN_NAME, q, float, f, 16, 8);
95   CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_nan,
96            " FP special (NaN)");
98   VDUP(vector, q, float, f, 16, 8, -NAN);
99   VDUP(vector2, q, float, f, 16, 8, 1.0f);
100   TEST_BINARY_OP(INSN_NAME, q, float, f, 16, 8);
101   CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_mnan,
102            " FP special (-NaN)");
104   VDUP(vector, q, float, f, 16, 8, 1.0f);
105   VDUP(vector2, q, float, f, 16, 8, HUGE_VALF);
106   TEST_BINARY_OP(INSN_NAME, q, float, f, 16, 8);
107   CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_inf,
108            " FP special (inf)");
110   VDUP(vector, q, float, f, 16, 8, -HUGE_VALF);
111   VDUP(vector2, q, float, f, 16, 8, 1.0f);
112   TEST_BINARY_OP(INSN_NAME, q, float, f, 16, 8);
113   CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_minf,
114            " FP special (-inf)");
116   VDUP(vector, q, float, f, 16, 8, 0.0f);
117   VDUP(vector2, q, float, f, 16, 8, -0.0f);
118   TEST_BINARY_OP(INSN_NAME, q, float, f, 16, 8);
119   CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_zero1,
120            " FP special (-0.0)");
122   VDUP(vector, q, float, f, 16, 8, -0.0f);
123   VDUP(vector2, q, float, f, 16, 8, 0.0f);
124   TEST_BINARY_OP(INSN_NAME, q, float, f, 16, 8);
125   CHECK_FP(TEST_MSG, float, 16, 8, PRIx16, expected_zero2,
126            " FP special (-0.0)");
127 #endif
129 #ifdef HAS_FLOAT_VARIANT
130   CHECK_FP(TEST_MSG, float, 32, 2, PRIx32, expected, "");
131   CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected, "");
133   /* Extra FP tests with special values (NaN, ....)  */
134   VDUP(vector, q, float, f, 32, 4, 1.0f);
135   VDUP(vector2, q, float, f, 32, 4, NAN);
136   TEST_BINARY_OP(INSN_NAME, q, float, f, 32, 4);
137   CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_nan, " FP special (NaN)");
139   VDUP(vector, q, float, f, 32, 4, -NAN);
140   VDUP(vector2, q, float, f, 32, 4, 1.0f);
141   TEST_BINARY_OP(INSN_NAME, q, float, f, 32, 4);
142   CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_mnan, " FP special (-NaN)");
144   VDUP(vector, q, float, f, 32, 4, 1.0f);
145   VDUP(vector2, q, float, f, 32, 4, HUGE_VALF);
146   TEST_BINARY_OP(INSN_NAME, q, float, f, 32, 4);
147   CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_inf, " FP special (inf)");
149   VDUP(vector, q, float, f, 32, 4, -HUGE_VALF);
150   VDUP(vector2, q, float, f, 32, 4, 1.0f);
151   TEST_BINARY_OP(INSN_NAME, q, float, f, 32, 4);
152   CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_minf, " FP special (-inf)");
154   VDUP(vector, q, float, f, 32, 4, 0.0f);
155   VDUP(vector2, q, float, f, 32, 4, -0.0f);
156   TEST_BINARY_OP(INSN_NAME, q, float, f, 32, 4);
157   CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_zero1, " FP special (-0.0)");
159   VDUP(vector, q, float, f, 32, 4, -0.0f);
160   VDUP(vector2, q, float, f, 32, 4, 0.0f);
161   TEST_BINARY_OP(INSN_NAME, q, float, f, 32, 4);
162   CHECK_FP(TEST_MSG, float, 32, 4, PRIx32, expected_zero2, " FP special (-0.0)");
163 #endif
166 int main (void)
168   FNNAME (INSN_NAME) ();
169   return 0;