Following the change to make arm_neon.h's (u?)int64x1_t types into vectors, these types are now passed in the SIMD registers rather than general purpose registers, which often results in poor quality code in functions taking or returning these types. Often values are moved from vector registers into GPRs, an operation performed, and the value moved back - yet the architecture is capable of performing the operation directly on the SIMD registers. Hence these patches are small tweaks to the relevant patterns.

The third patch, allowing AND+OR directly on values in SIMD registers, is more complicated, as the XOR pattern there was never matched (due to action of simplify_rtx) - the new pattern should also start to be used in GPR registers.

Regression-tested check-gcc check-g++ on aarch64-none-elf and 
aarch64_be-none-elf.

Reply via email to