111
|
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*-*-* } } */
|
|
5
|
|
6 #include <arm_neon.h>
|
|
7 #include "arm-neon-ref.h"
|
|
8 #include "compute-ref-data.h"
|
|
9
|
|
10 #define FP16_C(a) ((__fp16) a)
|
|
11 #define A FP16_C (123.4)
|
|
12 #define B FP16_C (567.8)
|
|
13 #define C FP16_C (34.8)
|
|
14 #define D FP16_C (1024)
|
|
15 #define E FP16_C (663.1)
|
|
16 #define F FP16_C (144.0)
|
|
17 #define G FP16_C (4.8)
|
|
18 #define H FP16_C (77)
|
|
19
|
|
20 #define SQRT_A 0x498E /* FP16_C (__builtin_sqrtf (123.4)). */
|
|
21 #define SQRT_B 0x4DF5 /* FP16_C (__builtin_sqrtf (567.8)). */
|
|
22 #define SQRT_C 0x45E6 /* FP16_C (__builtin_sqrtf (34.8)). */
|
|
23 #define SQRT_D 0x5000 /* FP16_C (__builtin_sqrtf (1024)). */
|
|
24 #define SQRT_E 0x4E70 /* FP16_C (__builtin_sqrtf (663.1)). */
|
|
25 #define SQRT_F 0x4A00 /* FP16_C (__builtin_sqrtf (144.0)). */
|
|
26 #define SQRT_G 0x4062 /* FP16_C (__builtin_sqrtf (4.8)). */
|
|
27 #define SQRT_H 0x4863 /* FP16_C (__builtin_sqrtf (77)). */
|
|
28
|
|
29 /* Expected results for vsqrt. */
|
|
30 VECT_VAR_DECL (expected_static, hfloat, 16, 4) []
|
|
31 = { SQRT_A, SQRT_B, SQRT_C, SQRT_D };
|
|
32
|
|
33 VECT_VAR_DECL (expected_static, hfloat, 16, 8) []
|
|
34 = { SQRT_A, SQRT_B, SQRT_C, SQRT_D, SQRT_E, SQRT_F, SQRT_G, SQRT_H };
|
|
35
|
|
36 void exec_vsqrt_f16 (void)
|
|
37 {
|
|
38 #undef TEST_MSG
|
|
39 #define TEST_MSG "VSQRT (FP16)"
|
|
40 clean_results ();
|
|
41
|
|
42 DECL_VARIABLE(vsrc, float, 16, 4);
|
|
43 VECT_VAR_DECL (buf_src, float, 16, 4) [] = {A, B, C, D};
|
|
44 VLOAD (vsrc, buf_src, , float, f, 16, 4);
|
|
45 DECL_VARIABLE (vector_res, float, 16, 4)
|
|
46 = vsqrt_f16 (VECT_VAR (vsrc, float, 16, 4));
|
|
47 vst1_f16 (VECT_VAR (result, float, 16, 4),
|
|
48 VECT_VAR (vector_res, float, 16, 4));
|
|
49
|
|
50 CHECK_FP (TEST_MSG, float, 16, 4, PRIx16, expected_static, "");
|
|
51
|
|
52 #undef TEST_MSG
|
|
53 #define TEST_MSG "VSQRTQ (FP16)"
|
|
54 clean_results ();
|
|
55
|
|
56 DECL_VARIABLE(vsrc, float, 16, 8);
|
|
57 VECT_VAR_DECL (buf_src, float, 16, 8) [] = {A, B, C, D, E, F, G, H};
|
|
58 VLOAD (vsrc, buf_src, q, float, f, 16, 8);
|
|
59 DECL_VARIABLE (vector_res, float, 16, 8)
|
|
60 = vsqrtq_f16 (VECT_VAR (vsrc, float, 16, 8));
|
|
61 vst1q_f16 (VECT_VAR (result, float, 16, 8),
|
|
62 VECT_VAR (vector_res, float, 16, 8));
|
|
63
|
|
64 CHECK_FP (TEST_MSG, float, 16, 8, PRIx16, expected_static, "");
|
|
65 }
|
|
66
|
|
67 int
|
|
68 main (void)
|
|
69 {
|
|
70 exec_vsqrt_f16 ();
|
|
71 return 0;
|
|
72 }
|