PR116019: Improve tail call error message
[official-gcc.git] / gcc / testsuite / gcc.target / aarch64 / advsimd-intrinsics / vmulx_f16_1.c
blob51bbead3f2a90f4349f34a702ae57cacbeb43116
1 /* { dg-do run } */
2 /* { dg-require-effective-target arm_v8_2a_fp16_neon_hw } */
3 /* { dg-add-options arm_v8_2a_fp16_neon } */
4 /* { dg-skip-if "" { arm*-*-* } } */
6 #include <arm_neon.h>
7 #include "arm-neon-ref.h"
8 #include "compute-ref-data.h"
10 #define FP16_C(a) ((__fp16) a)
11 #define A FP16_C (13.4)
12 #define B FP16_C (__builtin_inff ())
13 #define C FP16_C (-34.8)
14 #define D FP16_C (-__builtin_inff ())
15 #define E FP16_C (63.1)
16 #define F FP16_C (0.0)
17 #define G FP16_C (-4.8)
18 #define H FP16_C (0.0)
20 #define I FP16_C (0.7)
21 #define J FP16_C (-__builtin_inff ())
22 #define K FP16_C (11.23)
23 #define L FP16_C (98)
24 #define M FP16_C (87.1)
25 #define N FP16_C (-0.0)
26 #define O FP16_C (-1.1)
27 #define P FP16_C (7)
29 /* Expected results for vmulx. */
30 VECT_VAR_DECL (expected_static, hfloat, 16, 4) []
31 = { 0x629B /* A * E. */, 0x4000 /* FP16_C (2.0f). */,
32 0x5939 /* C * G. */, 0xC000 /* FP16_C (-2.0f). */ };
34 VECT_VAR_DECL (expected_static, hfloat, 16, 8) []
35 = { 0x629B /* A * E. */, 0x4000 /* FP16_C (2.0f). */,
36 0x5939 /* C * G. */, 0xC000 /* FP16_C (-2.0f). */,
37 0x53A0 /* I * M. */, 0x4000 /* FP16_C (2.0f). */,
38 0xCA2C /* K * O. */, 0x615C /* L * P. */ };
40 void exec_vmulx_f16 (void)
42 #undef TEST_MSG
43 #define TEST_MSG "VMULX (FP16)"
44 clean_results ();
46 DECL_VARIABLE(vsrc_1, float, 16, 4);
47 DECL_VARIABLE(vsrc_2, float, 16, 4);
48 VECT_VAR_DECL (buf_src_1, float, 16, 4) [] = {A, B, C, D};
49 VECT_VAR_DECL (buf_src_2, float, 16, 4) [] = {E, F, G, H};
50 VLOAD (vsrc_1, buf_src_1, , float, f, 16, 4);
51 VLOAD (vsrc_2, buf_src_2, , float, f, 16, 4);
52 DECL_VARIABLE (vector_res, float, 16, 4)
53 = vmulx_f16 (VECT_VAR (vsrc_1, float, 16, 4),
54 VECT_VAR (vsrc_2, float, 16, 4));
55 vst1_f16 (VECT_VAR (result, float, 16, 4),
56 VECT_VAR (vector_res, float, 16, 4));
58 CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_static, "");
60 #undef TEST_MSG
61 #define TEST_MSG "VMULXQ (FP16)"
62 clean_results ();
64 DECL_VARIABLE(vsrc_1, float, 16, 8);
65 DECL_VARIABLE(vsrc_2, float, 16, 8);
66 VECT_VAR_DECL (buf_src_1, float, 16, 8) [] = {A, B, C, D, I, J, K, L};
67 VECT_VAR_DECL (buf_src_2, float, 16, 8) [] = {E, F, G, H, M, N, O, P};
68 VLOAD (vsrc_1, buf_src_1, q, float, f, 16, 8);
69 VLOAD (vsrc_2, buf_src_2, q, float, f, 16, 8);
70 DECL_VARIABLE (vector_res, float, 16, 8)
71 = vmulxq_f16 (VECT_VAR (vsrc_1, float, 16, 8),
72 VECT_VAR (vsrc_2, float, 16, 8));
73 vst1q_f16 (VECT_VAR (result, float, 16, 8),
74 VECT_VAR (vector_res, float, 16, 8));
76 CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_static, "");
79 int
80 main (void)
82 exec_vmulx_f16 ();
83 return 0;