From patchwork Thu Nov 29 14:27:18 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [ARM,2/3] AArch32 NEON vrint builtins and intrinsics From: Kyrylo Tkachov X-Patchwork-Id: 202755 Message-Id: <006701cdce3d$a2f34030$e8d9c090$@tkachov@arm.com> To: Cc: "'Ramana Radhakrishnan'" , "Richard Earnshaw" , Date: Thu, 29 Nov 2012 14:27:18 -0000 Hi all, This patch adds an effective target check to the testsuite for ARMv8 NEON support. A corresponding add_options procedure is added. This is used by the AArch32 NEON intrinsics tests. An entry in the documentation is added as well. Ok for trunk? Thanks, Kyrill gcc/ChangeLog 2012-11-29 Kyrylo Tkachov * doc/sourcebuild.texi: Document arm_v8_neon_ok. gcc/testsuite/ChangeLog 2012-11-29 Kyrylo Tkachov * lib/target-supports.exp (check_effective_target_arm_v8_neon_ok): New procedure. (add_options_for_arm_v8_neon): Likewise. diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi index 0f29326..ae05681 100644 --- a/gcc/doc/sourcebuild.texi +++ b/gcc/doc/sourcebuild.texi @@ -1560,6 +1560,10 @@ Some multilibs may be incompatible with these options. ARM target supports @code{-mfpu=fp-armv8 -mfloat-abi=softfp}. Some multilibs may be incompatible with these options. +@item arm_v8_neon_ok +ARM target supports @code{-mfpu=neon-fp-armv8 -mfloat-abi=softfp}. +Some multilibs may be incompatible with these options. + @item arm_prefer_ldrd_strd ARM target prefers @code{LDRD} and @code{STRD} instructions over @code{LDM} and @code{STM} instructions. diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 5935346..ca78808 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -2107,6 +2107,22 @@ proc check_effective_target_arm_v8_vfp_ok {} { } } +# Return 1 if this is an ARM target supporting -mfpu=neon-fp-armv8 +# -mfloat-abi=softfp +proc check_effective_target_arm_v8_neon_ok {} { + if { [check_effective_target_arm32] } { + return [check_no_compiler_messages arm_v8_neon_ok object { + int foo (void) + { + __asm__ volatile ("vrintn.f32 q0, q0"); + return 0; + } + } "-mfpu=neon-fp-armv8 -mfloat-abi=softfp"] + } else { + return 0 + } +} + # Return 1 if this is an ARM target supporting -mfpu=vfp # -mfloat-abi=hard. Some multilibs may be incompatible with these # options. @@ -2166,6 +2182,13 @@ proc add_options_for_arm_v8_vfp { flags } { return "$flags -mfpu=fp-armv8 -mfloat-abi=softfp" } +proc add_options_for_arm_v8_neon { flags } { + if { ! [check_effective_target_arm_v8_neon_ok] } { + return "$flags" + } + return "$flags -mfpu=neon-fp-armv8 -mfloat-abi=softfp" +} + # Add the options needed for NEON. We need either -mfloat-abi=softfp # or -mfloat-abi=hard, but if one is already specified by the # multilib, use it. Similarly, if a -mfpu option already enables