aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorTamar Christina <tamar.christina@arm.com>2024-10-18 09:43:45 +0100
committerTamar Christina <tamar.christina@arm.com>2024-10-18 09:43:45 +0100
commit87dc6b1992e7ee02e7a4a81c568754198c0f61f5 (patch)
tree018ff11bf2c055b1caf6abca38410e1db72b79b9 /gcc/fortran
parentfc3507927768c3df425a0b5c0e4051eb8bb1ccf0 (diff)
downloadgcc-87dc6b1992e7ee02e7a4a81c568754198c0f61f5.zip
gcc-87dc6b1992e7ee02e7a4a81c568754198c0f61f5.tar.gz
gcc-87dc6b1992e7ee02e7a4a81c568754198c0f61f5.tar.bz2
AArch64: support encoding integer immediates using floating point moves
This patch extends our immediate SIMD generation cases to support generating integer immediates using floating point operation if the integer immediate maps to an exact FP value. As an example: uint32x4_t f1() { return vdupq_n_u32(0x3f800000); } currently generates: f1: adrp x0, .LC0 ldr q0, [x0, #:lo12:.LC0] ret i.e. a load, but with this change: f1: fmov v0.4s, 1.0e+0 ret Such immediates are common in e.g. our Math routines in glibc because they are created to extract or mark part of an FP immediate as masks. gcc/ChangeLog: * config/aarch64/aarch64.cc (aarch64_sve_valid_immediate, aarch64_simd_valid_immediate): Refactor accepting modes and values. (aarch64_float_const_representable_p): Refactor and extract FP checks into ... (aarch64_real_float_const_representable_p): ...This and fix fail fallback from real_to_integer. (aarch64_advsimd_valid_immediate): Use it. gcc/testsuite/ChangeLog: * gcc.target/aarch64/const_create_using_fmov.c: New test.
Diffstat (limited to 'gcc/fortran')
0 files changed, 0 insertions, 0 deletions