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.

Christophe



R.

Reply via email to