[PATCH 1/2][AArch64] Simplify patterns for sshr_n_[us]64 intrinsic

Alan Lawrence alan.lawrence@arm.com
Mon Sep 8 16:19:00 GMT 2014


The sshr_n_64 intrinsics allow performing a signed shift right by 64 places. The 
standard ashrdi3 pattern masks the sign amount with 63, so cannot be used. 
However, such a shift fills the result by the sign bit, which is identical to 
shifting right by 63. This patch just simplifies the code to shift by 63 
instead, which allows to remove an UNSPEC and insn previously dedicated to this 
case.

Cross-tested on aarch64-none-elf and aarch64_be-none-elf, with test coverage 
provided by gcc.target/aarch64/sshr64_1.c .

gcc/ChangeLog:

	* config/aarch64/aarch64.md (enum "unspec"): Remove UNSPEC_SSHR64.

	* config/aarch64/aarch64-simd.md (aarch64_ashr_simddi): Change shift
	amount to 63 if was 64.
	(aarch64_sshr_simddi): Remove.




More information about the Gcc-patches mailing list