aboutsummaryrefslogtreecommitdiff
path: root/gcc/c/c-parser.cc
diff options
context:
space:
mode:
authorSaurabh Jha <saurabh.jha@arm.com>2024-12-03 09:54:01 +0000
committerRichard Sandiford <richard.sandiford@arm.com>2024-12-03 09:54:01 +0000
commita07a2b8c9e7c2d123f0178875c9110eaf9770b7a (patch)
treeb7cf5b335a3069e2293051f403742045370c056c /gcc/c/c-parser.cc
parentf855bc3006f43a623bd6197a795f238e70a3f007 (diff)
downloadgcc-a07a2b8c9e7c2d123f0178875c9110eaf9770b7a.zip
gcc-a07a2b8c9e7c2d123f0178875c9110eaf9770b7a.tar.gz
gcc-a07a2b8c9e7c2d123f0178875c9110eaf9770b7a.tar.bz2
aarch64: Add support for AdvSIMD lut
The AArch64 FEAT_LUT extension is optional from Armv9.2-A and mandatory from Armv9.5-A. It introduces instructions for lookup table reads with bit indices. This patch adds support for AdvSIMD lut intrinsics. The intrinsics for this extension are implemented as the following builtin functions: * vluti2{q}_lane{q}_{u8|s8|p8} * vluti2{q}_lane{q}_{u16|s16|p16|f16|bf16} * vluti4q_lane{q}_{u8|s8|p8} * vluti4q_lane{q}_{u16|s16|p16|f16|bf16}_x2 We also introduced a new approach to do lane checks for AdvSIMD. gcc/ChangeLog: * config/aarch64/aarch64-builtins.cc (aarch64_builtin_signatures): Add binary_lane. (aarch64_fntype): Handle it. (simd_types): Add 16-bit x2 types. (aarch64_pragma_builtins_checker): New class. (aarch64_general_check_builtin_call): Use it. (aarch64_expand_pragma_builtin): Add support for lut unspecs. * config/aarch64/aarch64-option-extensions.def (AARCH64_OPT_EXTENSION): Add lut option. * config/aarch64/aarch64-simd-pragma-builtins.def (ENTRY_BINARY_LANE): Modify to use new ENTRY macro. (ENTRY_TERNARY_VLUT8): Macro to declare lut intrinsics. (ENTRY_TERNARY_VLUT16): Macro to declare lut intrinsics. (REQUIRED_EXTENSIONS): Declare lut intrinsics. * config/aarch64/aarch64-simd.md (@aarch64_<vluti_uns_op><VLUT:mode><VB:mode>): Instruction pattern for luti2 and luti4 intrinsics. (@aarch64_lutx2<VLUT:mode><VB:mode>): Instruction pattern for luti4x2 intrinsics. * config/aarch64/aarch64.h (TARGET_LUT): lut flag. * config/aarch64/iterators.md: Iterators and attributes for lut. * doc/invoke.texi: Document extension in AArch64 Options. gcc/testsuite/ChangeLog: * gcc.target/aarch64/simd/lut-incorrect-range.c: New test. * gcc.target/aarch64/simd/lut-no-flag.c: New test. * gcc.target/aarch64/simd/lut.c: New test. Co-authored-by: Vladimir Miloserdov <vladimir.miloserdov@arm.com> Co-authored-by: Richard Sandiford <richard.sandiford@arm.com>
Diffstat (limited to 'gcc/c/c-parser.cc')
0 files changed, 0 insertions, 0 deletions