Patchwork [ARM,2/3] AArch32 NEON vrint builtins and intrinsics

login
register
mail settings
Submitter Kyrylo Tkachov
Date Nov. 29, 2012, 2:27 p.m.
Message ID <006701cdce3d$a2f34030$e8d9c090$@tkachov@arm.com>
Download mbox | patch
Permalink /patch/202755/
State New
Headers show

Comments

Kyrylo Tkachov - Nov. 29, 2012, 2:27 p.m.
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  <kyrylo.tkachov@arm.com>

	* doc/sourcebuild.texi: Document arm_v8_neon_ok.

gcc/testsuite/ChangeLog

2012-11-29  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

	* lib/target-supports.exp (check_effective_target_arm_v8_neon_ok):
	New procedure.
	(add_options_for_arm_v8_neon): Likewise.

Patch

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