Skip to content
Snippets Groups Projects
Commit 218881ac authored by Christophe Lyon's avatar Christophe Lyon
Browse files

arm: [MVE intrinsics] rework vldr gather_offset

Implement vldr?q_gather_offset using the new MVE builtins framework.

The patch introduces a new attribute iterator (MVE_u_elem) to
accomodate the fact that ACLE's expected output description uses "uNN"
for all modes, except V8HF where it expects ".f16".  Using "V_sz_elem"
would work, but would require to update several testcases.

gcc/ChangeLog:

	* config/arm/arm-mve-builtins-base.cc (class vldrq_gather_impl):
	New.
	(vldrbq_gather, vldrdq_gather, vldrhq_gather, vldrwq_gather): New.
	* config/arm/arm-mve-builtins-base.def (vldrbq_gather)
	(vldrdq_gather, vldrhq_gather, vldrwq_gather): New.
	* config/arm/arm-mve-builtins-base.h (vldrbq_gather)
	(vldrdq_gather, vldrhq_gather, vldrwq_gather): New.
	* config/arm/arm_mve.h (vldrbq_gather_offset): Delete.
	(vldrbq_gather_offset_z): Delete.
	(vldrhq_gather_offset): Delete.
	(vldrhq_gather_offset_z): Delete.
	(vldrdq_gather_offset): Delete.
	(vldrdq_gather_offset_z): Delete.
	(vldrwq_gather_offset): Delete.
	(vldrwq_gather_offset_z): Delete.
	(vldrbq_gather_offset_u8): Delete.
	(vldrbq_gather_offset_s8): Delete.
	(vldrbq_gather_offset_u16): Delete.
	(vldrbq_gather_offset_s16): Delete.
	(vldrbq_gather_offset_u32): Delete.
	(vldrbq_gather_offset_s32): Delete.
	(vldrbq_gather_offset_z_s16): Delete.
	(vldrbq_gather_offset_z_u8): Delete.
	(vldrbq_gather_offset_z_s32): Delete.
	(vldrbq_gather_offset_z_u16): Delete.
	(vldrbq_gather_offset_z_u32): Delete.
	(vldrbq_gather_offset_z_s8): Delete.
	(vldrhq_gather_offset_s32): Delete.
	(vldrhq_gather_offset_s16): Delete.
	(vldrhq_gather_offset_u32): Delete.
	(vldrhq_gather_offset_u16): Delete.
	(vldrhq_gather_offset_z_s32): Delete.
	(vldrhq_gather_offset_z_s16): Delete.
	(vldrhq_gather_offset_z_u32): Delete.
	(vldrhq_gather_offset_z_u16): Delete.
	(vldrdq_gather_offset_s64): Delete.
	(vldrdq_gather_offset_u64): Delete.
	(vldrdq_gather_offset_z_s64): Delete.
	(vldrdq_gather_offset_z_u64): Delete.
	(vldrhq_gather_offset_f16): Delete.
	(vldrhq_gather_offset_z_f16): Delete.
	(vldrwq_gather_offset_f32): Delete.
	(vldrwq_gather_offset_s32): Delete.
	(vldrwq_gather_offset_u32): Delete.
	(vldrwq_gather_offset_z_f32): Delete.
	(vldrwq_gather_offset_z_s32): Delete.
	(vldrwq_gather_offset_z_u32): Delete.
	(__arm_vldrbq_gather_offset_u8): Delete.
	(__arm_vldrbq_gather_offset_s8): Delete.
	(__arm_vldrbq_gather_offset_u16): Delete.
	(__arm_vldrbq_gather_offset_s16): Delete.
	(__arm_vldrbq_gather_offset_u32): Delete.
	(__arm_vldrbq_gather_offset_s32): Delete.
	(__arm_vldrbq_gather_offset_z_s8): Delete.
	(__arm_vldrbq_gather_offset_z_s32): Delete.
	(__arm_vldrbq_gather_offset_z_s16): Delete.
	(__arm_vldrbq_gather_offset_z_u8): Delete.
	(__arm_vldrbq_gather_offset_z_u32): Delete.
	(__arm_vldrbq_gather_offset_z_u16): Delete.
	(__arm_vldrhq_gather_offset_s32): Delete.
	(__arm_vldrhq_gather_offset_s16): Delete.
	(__arm_vldrhq_gather_offset_u32): Delete.
	(__arm_vldrhq_gather_offset_u16): Delete.
	(__arm_vldrhq_gather_offset_z_s32): Delete.
	(__arm_vldrhq_gather_offset_z_s16): Delete.
	(__arm_vldrhq_gather_offset_z_u32): Delete.
	(__arm_vldrhq_gather_offset_z_u16): Delete.
	(__arm_vldrdq_gather_offset_s64): Delete.
	(__arm_vldrdq_gather_offset_u64): Delete.
	(__arm_vldrdq_gather_offset_z_s64): Delete.
	(__arm_vldrdq_gather_offset_z_u64): Delete.
	(__arm_vldrwq_gather_offset_s32): Delete.
	(__arm_vldrwq_gather_offset_u32): Delete.
	(__arm_vldrwq_gather_offset_z_s32): Delete.
	(__arm_vldrwq_gather_offset_z_u32): Delete.
	(__arm_vldrhq_gather_offset_f16): Delete.
	(__arm_vldrhq_gather_offset_z_f16): Delete.
	(__arm_vldrwq_gather_offset_f32): Delete.
	(__arm_vldrwq_gather_offset_z_f32): Delete.
	(__arm_vldrbq_gather_offset): Delete.
	(__arm_vldrbq_gather_offset_z): Delete.
	(__arm_vldrhq_gather_offset): Delete.
	(__arm_vldrhq_gather_offset_z): Delete.
	(__arm_vldrdq_gather_offset): Delete.
	(__arm_vldrdq_gather_offset_z): Delete.
	(__arm_vldrwq_gather_offset): Delete.
	(__arm_vldrwq_gather_offset_z): Delete.
	* config/arm/arm_mve_builtins.def (vldrbq_gather_offset_u)
	(vldrbq_gather_offset_s, vldrbq_gather_offset_z_s)
	(vldrbq_gather_offset_z_u, vldrhq_gather_offset_z_u)
	(vldrhq_gather_offset_u, vldrhq_gather_offset_z_s)
	(vldrhq_gather_offset_s, vldrdq_gather_offset_s)
	(vldrhq_gather_offset_f, vldrwq_gather_offset_f)
	(vldrwq_gather_offset_s, vldrdq_gather_offset_z_s)
	(vldrhq_gather_offset_z_f, vldrwq_gather_offset_z_f)
	(vldrwq_gather_offset_z_s, vldrdq_gather_offset_u)
	(vldrwq_gather_offset_u, vldrdq_gather_offset_z_u)
	(vldrwq_gather_offset_z_u): Delete.
	* config/arm/iterators.md (MVE_u_elem): New.
	(supf): Remove VLDRBQGO_S, VLDRBQGO_U, VLDRHQGO_S, VLDRHQGO_U,
	VLDRDQGO_S, VLDRDQGO_U, VLDRWQGO_S, VLDRWQGO_U.
	(VLDRBGOQ, VLDRHGOQ, VLDRDGOQ, VLDRWGOQ): Delete.
	* config/arm/mve.md (mve_vldrbq_gather_offset_<supf><mode>):
	Delete.
	(mve_vldrbq_gather_offset_z_<supf><mode>): Delete.
	(mve_vldrhq_gather_offset_<supf><mode>): Delete.
	(mve_vldrhq_gather_offset_z_<supf><mode>): Delete.
	(mve_vldrdq_gather_offset_<supf>v2di): Delete.
	(mve_vldrdq_gather_offset_z_<supf>v2di): Delete.
	(mve_vldrhq_gather_offset_fv8hf): Delete.
	(mve_vldrhq_gather_offset_z_fv8hf): Delete.
	(mve_vldrwq_gather_offset_fv4sf): Delete.
	(mve_vldrwq_gather_offset_<supf>v4si): Delete.
	(mve_vldrwq_gather_offset_z_fv4sf): Delete.
	(mve_vldrwq_gather_offset_z_<supf>v4si): Delete.
	(@mve_vldrq_gather_offset_<mode>): New.
	(@mve_vldrq_gather_offset_extend_<mode><US>): New.
	(@mve_vldrq_gather_offset_z_<mode>): New.
	(@mve_vldrq_gather_offset_z_extend_<mode><US>): New.
	* config/arm/unspecs.md (VLDRBQGO_S, VLDRBQGO_U, VLDRHQGO_S)
	(VLDRHQGO_U, VLDRDQGO_S, VLDRDQGO_U, VLDRHQGO_F, VLDRWQGO_F)
	(VLDRWQGO_S, VLDRWQGO_U): Delete.
	(VLDRGOQ, VLDRGOQ_Z, VLDRGOQ_EXT, VLDRGOQ_EXT_Z): New.
parent 20e31a08
No related branches found
No related tags found
No related merge requests found
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment