[Bug target/72819] [AArch64] HFA structs of __fp16 incorrectly passed to functions
jgreenhalgh at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Aug 5 16:09:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72819
--- Comment #1 from James Greenhalgh <jgreenhalgh at gcc dot gnu.org> ---
Author: jgreenhalgh
Date: Fri Aug 5 16:08:24 2016
New Revision: 239173
URL: https://gcc.gnu.org/viewcvs?rev=239173&root=gcc&view=rev
Log:
[AArch64] Handle HFAs of float16 types properly
Fix PR Target/72819.
gcc/
PR Target/72819
* config/aarch64/aarch64.h (aarch64_fp16_type_node): Declare.
(aarch64_fp16_ptr_type_node): Likewise.
* config/aarch64/aarch64-simd-builtins.c
(aarch64_fp16_ptr_type_node): Define.
(aarch64_init_fp16_types): New, refactored out of...
(aarch64_init_builtins): ...here, update to call
aarch64_init_fp16_types.
* config/aarch64/aarch64.c (aarch64_gimplify_va_arg_expr): Handle
HFmode.
(aapcs_vfp_sub_candidate): Likewise.
gcc/testsuite/
PR Target/72819
* gcc.target/aarch64/aapcs64/abitest-common.h: Define half-precision
registers.
* gcc.target/aarch64/aapcs64/abitest.S (dumpregs): Add assembly for
saving the half-precision registers.
* gcc.target/aarch64/aapcs64/func-ret-1.c: Test that an __fp16
value is returned in h0.
* gcc.target/aarch64/aapcs64/test_2.c: Check that __FP16 arguments
are passed in FP/SIMD registers.
* gcc.target/aarch64/aapcs64/test_27.c: New, test that __fp16 HFA
passing works corrcetly.
* gcc.target/aarch64/aapcs64/type-def.h (hfa_f16x1_t): New.
(hfa_f16x2_t): Likewise.
(hfa_f16x3_t): Likewise.
* gcc.target/aarch64/aapcs64/va_arg-1.c: Check that __fp16 values
are promoted to double and passed in a double register.
* gcc.target/aarch64/aapcs64/va_arg-2.c: Check that __fp16 values
are promoted to double and stacked.
* gcc.target/aarch64/aapcs64/va_arg-4.c: Check stacking of HFA of
__fp16 data types.
* gcc.target/aarch64/aapcs64/va_arg-5.c: Likewise.
* gcc.target/aarch64/aapcs64/va_arg-16.c: New, check HFAs of
__fp16 first get passed in FP/SIMD registers, then stacked.
Added:
trunk/gcc/testsuite/gcc.target/aarch64/aapcs64/test_27.c
trunk/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-16.c
Modified:
trunk/gcc/ChangeLog
trunk/gcc/config/aarch64/aarch64-builtins.c
trunk/gcc/config/aarch64/aarch64.c
trunk/gcc/config/aarch64/aarch64.h
trunk/gcc/testsuite/ChangeLog
trunk/gcc/testsuite/gcc.target/aarch64/aapcs64/abitest-common.h
trunk/gcc/testsuite/gcc.target/aarch64/aapcs64/abitest.S
trunk/gcc/testsuite/gcc.target/aarch64/aapcs64/func-ret-1.c
trunk/gcc/testsuite/gcc.target/aarch64/aapcs64/test_2.c
trunk/gcc/testsuite/gcc.target/aarch64/aapcs64/type-def.h
trunk/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-1.c
trunk/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-2.c
trunk/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-4.c
trunk/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-5.c
More information about the Gcc-bugs
mailing list