1 /* { dg-do compile } */
2 /* { dg-require-effective-target arm_v8_2a_fp16_scalar_ok } */
3 /* { dg-options "-O2" } */
4 /* { dg-add-options arm_v8_2a_fp16_scalar } */
5 /* { dg-additional-options "-mfloat-abi=hard" } */
6 /* { dg-final { check-function-bodies "**" "" } } */
11 ** vld1.16 {d[0-9]+\[[0-9]+\]}, \[r[0-9]+\]
15 test_load_1 (__fp16
* a
)
23 ** vld1.16 {d[0-9]+\[[0-9]+\]}, \[r[0-9]+\]
27 test_load_2 (__fp16
* a
, int i
)
35 ** vst1.16 {d[0-9]+\[[0-9]+\]}, \[r[0-9]+\]
39 test_store_1 (__fp16
* a
, __fp16 b
)
47 ** vst1.16 {d[0-9]+\[[0-9]+\]}, \[r[0-9]+\]
51 test_store_2 (__fp16
* a
, int i
, __fp16 b
)
59 ** vld1.16 {d[0-9]+\[[0-9]+\]}, \[r[0-9]+\]
61 ** vst1.16 {d[0-9]+\[[0-9]+\]}, \[r[0-9]+\]
65 test_load_store_1 (__fp16
* a
, int i
, __fp16
* b
)
73 ** vld1.16 {d[0-9]+\[[0-9]+\]}, \[r[0-9]+\]
75 ** vst1.16 {d[0-9]+\[[0-9]+\]}, \[r[0-9]+\]
79 test_load_store_2 (__fp16
* a
, int i
, __fp16
* b
)
86 test_select_1 (int sel
, __fp16 a
, __fp16 b
)
95 test_select_2 (int sel
, __fp16 a
, __fp16 b
)
101 test_select_3 (__fp16 a
, __fp16 b
, __fp16 c
)
103 return (a
== b
) ? b
: c
;
107 test_select_4 (__fp16 a
, __fp16 b
, __fp16 c
)
109 return (a
!= b
) ? b
: c
;
113 test_select_5 (__fp16 a
, __fp16 b
, __fp16 c
)
115 return (a
< b
) ? b
: c
;
119 test_select_6 (__fp16 a
, __fp16 b
, __fp16 c
)
121 return (a
<= b
) ? b
: c
;
125 test_select_7 (__fp16 a
, __fp16 b
, __fp16 c
)
127 return (a
> b
) ? b
: c
;
131 test_select_8 (__fp16 a
, __fp16 b
, __fp16 c
)
133 return (a
>= b
) ? b
: c
;
136 /* { dg-final { scan-assembler-times {vseleq\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 4 } } */
137 /* { dg-final { scan-assembler-times {vselgt\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 1 } } */
138 /* { dg-final { scan-assembler-times {vselge\.f16\ts[0-9]+, s[0-9]+, s[0-9]+} 1 } } */
140 /* { dg-final { scan-assembler-not {vmov\.f16} } } */
143 test_compare_1 (__fp16 a
, __fp16 b
)
152 test_compare_ (__fp16 a
, __fp16 b
)
161 test_compare_2 (__fp16 a
, __fp16 b
)
170 test_compare_3 (__fp16 a
, __fp16 b
)
179 test_compare_4 (__fp16 a
, __fp16 b
)
188 test_compare_5 (__fp16 a
, __fp16 b
)
196 /* { dg-final { scan-assembler-not {vcmp\.f16} } } */
197 /* { dg-final { scan-assembler-not {vcmpe\.f16} } } */
199 /* { dg-final { scan-assembler-times {vcmpe?\.f32} 12 } } */