Matthew Malcomson <matthew.malcom...@arm.com> writes:
> We take no action to ensure the SVE vector size is large enough.  It is
> left to the user to check that before compiling this intrinsic or before
> running such a program on a machine.
>
> The main difference between ld1ro and ld1rq is in the allowed offsets,
> the implementation difference is that ld1ro is implemented using integer
> modes since there are no pre-existing vector modes of the relevant size.
> Adding new vector modes simply for this intrinsic seems to make the code
> less tidy.
>
> Specifications can be found under the "Arm C Language Extensions for
> Scalable Vector Extension" title at
> https://developer.arm.com/architectures/system-architectures/software-standards/acle
>
> gcc/ChangeLog:
>
> 2020-01-09  Matthew Malcomson  <matthew.malcom...@arm.com>
>
>       * config/aarch64/aarch64-protos.h
>       (aarch64_sve_ld1ro_operand_p): New.
>       * config/aarch64/aarch64-sve-builtins-base.cc
>       (class load_replicate): New.
>       (class svld1ro_impl): New.
>       (class svld1rq_impl): Change to inherit from load_replicate.
>       (svld1ro): New sve intrinsic function base.
>       * config/aarch64/aarch64-sve-builtins-base.def (svld1ro):
>       New DEF_SVE_FUNCTION.
>       * config/aarch64/aarch64-sve-builtins-base.h
>       (svld1ro): New decl.
>       * config/aarch64/aarch64-sve-builtins.cc
>       (function_expander::add_mem_operand): Modify assert to allow
>       OImode.
>       * config/aarch64/aarch64-sve.md (@aarch64_sve_ld1ro<mode>): New
>       pattern.
>       * config/aarch64/aarch64.c
>       (aarch64_sve_ld1rq_operand_p): Implement in terms of ...
>       (aarch64_sve_ld1rq_ld1ro_operand_p): This.
>       (aarch64_sve_ld1ro_operand_p): New.
>       * config/aarch64/aarch64.md (UNSPEC_LD1RO): New unspec.
>       * config/aarch64/constraints.md (UOb,UOh,UOw,UOd): New.
>       * config/aarch64/predicates.md
>       (aarch64_sve_ld1ro_operand_{b,h,w,d}): New.
>
> gcc/testsuite/ChangeLog:
>
> 2020-01-09  Matthew Malcomson  <matthew.malcom...@arm.com>
>
>       * gcc.target/aarch64/sve/acle/asm/ld1ro_f16.c: New test.
>       * gcc.target/aarch64/sve/acle/asm/ld1ro_f32.c: New test.
>       * gcc.target/aarch64/sve/acle/asm/ld1ro_f64.c: New test.
>       * gcc.target/aarch64/sve/acle/asm/ld1ro_s16.c: New test.
>       * gcc.target/aarch64/sve/acle/asm/ld1ro_s32.c: New test.
>       * gcc.target/aarch64/sve/acle/asm/ld1ro_s64.c: New test.
>       * gcc.target/aarch64/sve/acle/asm/ld1ro_s8.c: New test.
>       * gcc.target/aarch64/sve/acle/asm/ld1ro_u16.c: New test.
>       * gcc.target/aarch64/sve/acle/asm/ld1ro_u32.c: New test.
>       * gcc.target/aarch64/sve/acle/asm/ld1ro_u64.c: New test.
>       * gcc.target/aarch64/sve/acle/asm/ld1ro_u8.c: New test.

OK, thanks.

Richard

Reply via email to