Delia Burduv <[email protected]> writes:
> [...]
> diff --git a/gcc/config/aarch64/arm_bf16.h b/gcc/config/aarch64/arm_bf16.h
> index
> 3759c0d1cb449a7f0125cc2a1433127564d66622..fb2150e1d60a590046e2c034422021aafc721e23
> 100644
> --- a/gcc/config/aarch64/arm_bf16.h
> +++ b/gcc/config/aarch64/arm_bf16.h
> @@ -28,5 +28,13 @@
> #define _AARCH64_BF16_H_
>
> typedef __bf16 bfloat16_t;
> +typedef float float32_t;
> +
> +__extension__ extern __inline bfloat16_t
> +__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
> +vcvth_bf16_f32 (float32_t __a)
> +{
> + return __builtin_aarch64_bfcvtbf (__a);
> +}
Sorry for not noticing last time, but this should be wrapped in:
#pragma GCC push_options
#pragma GCC target ("+nothing+bf16")
...
#pragma GCC pop_options
otherwise I think calling this function without +bf16 would trigger
an internal compiler error. It would be good to have a test that
that doesn't happen (something along the lines of bfcvt-nobf16.c,
but for the scalar case).
> [...]
> diff --git
> a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfcvt-compile.c
> b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfcvt-compile.c
> new file mode 100644
> index
> 0000000000000000000000000000000000000000..ffb5305e2e5ea1aadae07e82fd8ed6f9f247c1a9
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfcvt-compile.c
> @@ -0,0 +1,48 @@
> +/* { dg-do assemble { target { aarch64*-*-* } } } */
The { target ... } isn't necessary here. (Missed that in the other
review, sorry.)
> +/* { dg-require-effective-target arm_v8_2a_bf16_neon_ok } */
> +/* { dg-add-options arm_v8_2a_bf16_neon } */
> +/* { dg-additional-options "-save-temps" } */
> +/* { dg-final { check-function-bodies "**" "" {-O[^0]} } } */
> +/* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */
> +
> +#include <arm_neon.h>
> +
> +/*
> +**test_bfcvtn:
> +** bfcvtn\tv0.4h, v0.4s
Like with the other review, I think the literal tab you had in the
original patch looks better than \t.
> [...]
> diff --git
> a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfcvt-nosimd.c
> b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfcvt-nosimd.c
> new file mode 100644
> index
> 0000000000000000000000000000000000000000..8d7dffe16275de60e884c449afa0fea0b1af6081
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfcvt-nosimd.c
> @@ -0,0 +1,15 @@
> +/* { dg-do assemble { target { aarch64*-*-* } } } */
This needs:
/* { dg-require-effective-target aarch64_asm_bf16_ok } */
(Doesn't exist yet, but I hope to post a patch soon.)
Looks good otherwise, thanks.
Richard