-
- Downloads
aarch64: Add LS64 extension and intrinsics
This patch is adding support for LS64 (Armv8.7-A Load/Store 64 Byte extension) which is part of Armv8.7-A architecture. Changes include missing plumbing for TARGET_LS64, LS64 data structure and intrinsics defined in ACLE. Machine description of intrinsics is using new V8DI mode added in a separate patch. __ARM_FEATURE_LS64 is defined if the Armv8.7-A LS64 instructions for atomic 64-byte access to device memory are supported. New compiler internal type is added wrapping ACLE struct data512_t: typedef struct { uint64_t val[8]; } __arm_data512_t; gcc/ChangeLog: * config/aarch64/aarch64-builtins.c (enum aarch64_builtins): Define AARCH64_LS64_BUILTIN_LD64B, AARCH64_LS64_BUILTIN_ST64B, AARCH64_LS64_BUILTIN_ST64BV, AARCH64_LS64_BUILTIN_ST64BV0. (aarch64_init_ls64_builtin_decl): Helper function. (aarch64_init_ls64_builtins): Helper function. (aarch64_init_ls64_builtins_types): Helper function. (aarch64_general_init_builtins): Init LS64 intrisics for TARGET_LS64. (aarch64_expand_builtin_ls64): LS64 intrinsics expander. (aarch64_general_expand_builtin): Handle aarch64_expand_builtin_ls64. (ls64_builtins_data): New helper struct. (v8di_UP): New define. * config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins): Define __ARM_FEATURE_LS64. * config/aarch64/aarch64.c (aarch64_classify_address): Enforce the V8DI range (7-bit signed scaled) for both ends of the range. * config/aarch64/aarch64-simd.md (movv8di): New pattern. (aarch64_movv8di): New pattern. * config/aarch64/aarch64.h (AARCH64_ISA_LS64): New define. (TARGET_LS64): New define. * config/aarch64/aarch64.md: Add UNSPEC_LD64B, UNSPEC_ST64B, UNSPEC_ST64BV and UNSPEC_ST64BV0. (ld64b): New define_insn. (st64b): New define_insn. (st64bv): New define_insn. (st64bv0): New define_insn. * config/aarch64/arm_acle.h (data512_t): New type derived from __arm_data512_t. (__arm_data512_t): New internal type. (__arm_ld64b): New intrinsic. (__arm_st64b): New intrinsic. (__arm_st64bv): New intrinsic. (__arm_st64bv0): New intrinsic. * config/arm/types.md: Add new type ls64. gcc/testsuite/ChangeLog: * gcc.target/aarch64/acle/ls64_asm.c: New test. * gcc.target/aarch64/acle/ls64_ld64b.c: New test. * gcc.target/aarch64/acle/ls64_ld64b-2.c: New test. * gcc.target/aarch64/acle/ls64_ld64b-3.c: New test. * gcc.target/aarch64/acle/ls64_st64b.c: New test. * gcc.target/aarch64/acle/ls64_ld_st_o0.c: New test. * gcc.target/aarch64/acle/ls64_st64b-2.c: New test. * gcc.target/aarch64/acle/ls64_st64bv.c: New test. * gcc.target/aarch64/acle/ls64_st64bv-2.c: New test. * gcc.target/aarch64/acle/ls64_st64bv-3.c: New test. * gcc.target/aarch64/acle/ls64_st64bv0.c: New test. * gcc.target/aarch64/acle/ls64_st64bv0-2.c: New test. * gcc.target/aarch64/acle/ls64_st64bv0-3.c: New test. * gcc.target/aarch64/pragma_cpp_predefs_2.c: Add checks for __ARM_FEATURE_LS64.
Showing
- gcc/config/aarch64/aarch64-builtins.c 130 additions, 0 deletionsgcc/config/aarch64/aarch64-builtins.c
- gcc/config/aarch64/aarch64-c.c 2 additions, 0 deletionsgcc/config/aarch64/aarch64-c.c
- gcc/config/aarch64/aarch64-simd.md 48 additions, 0 deletionsgcc/config/aarch64/aarch64-simd.md
- gcc/config/aarch64/aarch64.c 4 additions, 0 deletionsgcc/config/aarch64/aarch64.c
- gcc/config/aarch64/aarch64.h 4 additions, 0 deletionsgcc/config/aarch64/aarch64.h
- gcc/config/aarch64/aarch64.md 52 additions, 0 deletionsgcc/config/aarch64/aarch64.md
- gcc/config/aarch64/arm_acle.h 37 additions, 0 deletionsgcc/config/aarch64/arm_acle.h
- gcc/config/arm/types.md 1 addition, 0 deletionsgcc/config/arm/types.md
- gcc/testsuite/gcc.target/aarch64/acle/ls64_asm.c 58 additions, 0 deletionsgcc/testsuite/gcc.target/aarch64/acle/ls64_asm.c
- gcc/testsuite/gcc.target/aarch64/acle/ls64_ld64b-2.c 15 additions, 0 deletionsgcc/testsuite/gcc.target/aarch64/acle/ls64_ld64b-2.c
- gcc/testsuite/gcc.target/aarch64/acle/ls64_ld64b-3.c 15 additions, 0 deletionsgcc/testsuite/gcc.target/aarch64/acle/ls64_ld64b-3.c
- gcc/testsuite/gcc.target/aarch64/acle/ls64_ld64b.c 15 additions, 0 deletionsgcc/testsuite/gcc.target/aarch64/acle/ls64_ld64b.c
- gcc/testsuite/gcc.target/aarch64/acle/ls64_ld_st_o0.c 30 additions, 0 deletionsgcc/testsuite/gcc.target/aarch64/acle/ls64_ld_st_o0.c
- gcc/testsuite/gcc.target/aarch64/acle/ls64_st64b-2.c 15 additions, 0 deletionsgcc/testsuite/gcc.target/aarch64/acle/ls64_st64b-2.c
- gcc/testsuite/gcc.target/aarch64/acle/ls64_st64b.c 15 additions, 0 deletionsgcc/testsuite/gcc.target/aarch64/acle/ls64_st64b.c
- gcc/testsuite/gcc.target/aarch64/acle/ls64_st64bv-2.c 15 additions, 0 deletionsgcc/testsuite/gcc.target/aarch64/acle/ls64_st64bv-2.c
- gcc/testsuite/gcc.target/aarch64/acle/ls64_st64bv-3.c 15 additions, 0 deletionsgcc/testsuite/gcc.target/aarch64/acle/ls64_st64bv-3.c
- gcc/testsuite/gcc.target/aarch64/acle/ls64_st64bv.c 15 additions, 0 deletionsgcc/testsuite/gcc.target/aarch64/acle/ls64_st64bv.c
- gcc/testsuite/gcc.target/aarch64/acle/ls64_st64bv0-2.c 15 additions, 0 deletionsgcc/testsuite/gcc.target/aarch64/acle/ls64_st64bv0-2.c
- gcc/testsuite/gcc.target/aarch64/acle/ls64_st64bv0-3.c 15 additions, 0 deletionsgcc/testsuite/gcc.target/aarch64/acle/ls64_st64bv0-3.c
Loading
Please register or sign in to comment