[PATCH][GCC 9][AArch64] Implement ACLE intrinsics for FRINT[32,64][Z,X]

Kyrylo Tkachov Kyrylo.Tkachov@arm.com
Thu Oct 8 17:27:53 GMT 2020


Hi all,

I'd like to backport this patch to the GCC 9 branch to implement these Armv8.5-a intrinsics that should have been there.
The backport is fairly simple.

Bootstrapped and tested on aarch64-none-linux-gnu.
Pushing to GCC 9 branch.

This patch implements the ACLE intrinsics to access the FRINT[32,64][Z,X] scalar[1] and vector[2][3] instructions
from Armv8.5-a. These are enabled when the __ARM_FEATURE_FRINT macro is defined.

They're added in a fairly standard way through builtins and unspecs at the RTL level.

	* config/aarch64/aarch64.md ("unspec"): Add UNSPEC_FRINT32Z,
	UNSPEC_FRINT32X, UNSPEC_FRINT64Z, UNSPEC_FRINT64X.
	(aarch64_<frintnzs_op><mode>): New define_insn.
	* config/aarch64/aarch64.h (TARGET_FRINT): Define.
	* config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins): Define
	__ARM_FEATURE_FRINT when appropriate.
	* config/aarch64/aarch64-simd-builtins.def: Add builtins for frint32z,
	frint32x, frint64z, frint64x.
	* config/aarch64/arm_acle.h (__rint32zf, __rint32z, __rint64zf,
	__rint64z, __rint32xf, __rint32x, __rint64xf, __rint64x): Define.
	* config/aarch64/arm_neon.h (vrnd32z_f32, vrnd32zq_f32, vrnd32z_f64,
	vrnd32zq_f64, vrnd32x_f32, vrnd32xq_f32, vrnd32x_f64, vrnd32xq_f64,
	vrnd64z_f32, vrnd64zq_f32, vrnd64z_f64, vrnd64zq_f64, vrnd64x_f32,
	vrnd64xq_f32, vrnd64x_f64, vrnd64xq_f64): Define.
	* config/aarch64/iterators.md (VSFDF): Define.
	(FRINTNZX): Likewise.
	(frintnzs_op): Likewise.

	* gcc.target/aarch64/acle/rintnzx_1.c: New test.
	* gcc.target/aarch64/simd/vrndnzx_1.c: Likewise.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: frint-9.patch
Type: application/octet-stream
Size: 14580 bytes
Desc: frint-9.patch
URL: <https://gcc.gnu.org/pipermail/gcc-patches/attachments/20201008/88381b07/attachment-0001.obj>


More information about the Gcc-patches mailing list