On 15/09/2021 13:26, Christophe LYON via Gcc-patches wrote:

On 15/09/2021 13:02, Richard Earnshaw wrote:


On 26/08/2021 16:53, Christophe Lyon via Gcc-patches wrote:
g++.dg/eh/arm-vfp-unwind.C uses an asm statement relying on
double-precision FPU support, but does not make sure it is actually
supported by the target.
Check (__ARM_FP & 8) to ensure this.

2021-08-26  Christophe Lyon  <christophe.l...@foss.st.com>

    gcc/testsuite/
    * g++.dg/eh/arm-vfp-unwind.C: Check __ARM_FP.
---
  gcc/testsuite/g++.dg/eh/arm-vfp-unwind.C | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gcc/testsuite/g++.dg/eh/arm-vfp-unwind.C b/gcc/testsuite/g++.dg/eh/arm-vfp-unwind.C
index 62263c0c3b0..90d20081d78 100644
--- a/gcc/testsuite/g++.dg/eh/arm-vfp-unwind.C
+++ b/gcc/testsuite/g++.dg/eh/arm-vfp-unwind.C
@@ -3,7 +3,7 @@
    /* Test to catch off-by-one errors in arm/pr-support.c.  */
  -#if defined (__VFP_FP__) && !defined (__SOFTFP__)
+#if defined (__VFP_FP__) && !defined (__SOFTFP__) && (__ARM_FP & 8)
    #include <iostream>
  #include <stdlib.h>


Wouldn't it be better to have an alternate to the asm for the case where we only have single-precision float?  Something like (untested):

static void donkey ()
{
#if __ARM_FP & 8
  asm volatile ("fcpyd d9, %P0" : : "w" (1.2345) : "d9");
#else
  asm volatile ("fcpys s18, %P0" : : "w" (1.2345f) : "s18");
#endif
  throw 1;
}


I tried similar things but they failed on some testing configurations.

Let me try your version, I'll let you know if there is any fallout.

Of course, the asm syntax should be converted to the new 'unified syntax' form ie vmov.f{32,64}.

R.


Christophe



R.

Reply via email to