diff mbox

[testsuite] Fix rs6000 test case pack03.c to use new dg-require-effective-target dfp_hw

Message ID 1399660992.4816.3.camel@otta
State New
Headers show

Commit Message

Peter Bergner May 9, 2014, 6:43 p.m. UTC
Pat noticed that the updated pack03.c DFP test case is FAILing on
older Power hardware without DFP support (ie, power5 and earlier).
The problem is that the dg-require-effective-target dfprt use
only protects against use on system without a DFP runtime, not
a system without dfp hardware instructions.  It seems we don't
have test, so the following patch added a dfp_hw test that fixes
the problem.

This passed bootstrap and regtesting on powerpc64-linux with no
regressions on both power5 and power8 systems.
Ok for mainline, 4.9 and 4.8 branches to fixup the test cases
there?

Peter


gcc/testsuite/

	* lib/target-support.exp (check_dfp_hw_available): New function.
	(is-effective-target): Check $arg for dfp_hw.
	(is-effective-target-keyword): Likewise.
	* gcc.target/powerpc/pack03.c: (dg-require-effective-target):
	Change target to dfp_hw.

Comments

David Edelsohn May 9, 2014, 7:05 p.m. UTC | #1
On Fri, May 9, 2014 at 2:43 PM, Peter Bergner <bergner@vnet.ibm.com> wrote:
> Pat noticed that the updated pack03.c DFP test case is FAILing on
> older Power hardware without DFP support (ie, power5 and earlier).
> The problem is that the dg-require-effective-target dfprt use
> only protects against use on system without a DFP runtime, not
> a system without dfp hardware instructions.  It seems we don't
> have test, so the following patch added a dfp_hw test that fixes
> the problem.
>
> This passed bootstrap and regtesting on powerpc64-linux with no
> regressions on both power5 and power8 systems.
> Ok for mainline, 4.9 and 4.8 branches to fixup the test cases
> there?
>
> Peter
>
>
> gcc/testsuite/
>
>         * lib/target-support.exp (check_dfp_hw_available): New function.
>         (is-effective-target): Check $arg for dfp_hw.
>         (is-effective-target-keyword): Likewise.
>         * gcc.target/powerpc/pack03.c: (dg-require-effective-target):
>         Change target to dfp_hw.

Okay.

thanks, David
Rainer Orth May 9, 2014, 7:32 p.m. UTC | #2
Peter Bergner <bergner@vnet.ibm.com> writes:

> Pat noticed that the updated pack03.c DFP test case is FAILing on
> older Power hardware without DFP support (ie, power5 and earlier).
> The problem is that the dg-require-effective-target dfprt use
> only protects against use on system without a DFP runtime, not
> a system without dfp hardware instructions.  It seems we don't
> have test, so the following patch added a dfp_hw test that fixes
> the problem.

Please document the new keyword in doc/sourcebuild.texi.

	Rainer
diff mbox

Patch

Index: gcc/testsuite/lib/target-supports.exp
===================================================================
--- gcc/testsuite/lib/target-supports.exp	(revision 210242)
+++ gcc/testsuite/lib/target-supports.exp	(working copy)
@@ -1956,6 +1956,32 @@  proc check_effective_target_dfprt { } {
     }]
 }
 
+# Return 1 if the target supports executing DFP hardware instructions,
+# 0 otherwise.  Cache the result.
+
+proc check_dfp_hw_available { } {
+    return [check_cached_effective_target dfp_hw_available {
+	# For now, disable on Darwin
+	if { [istarget powerpc-*-eabi] || [istarget powerpc*-*-eabispe] || [istarget *-*-darwin*]} {
+	    expr 0
+	} else {
+	    check_runtime_nocache dfp_hw_available {
+		volatile _Decimal64 r;
+		volatile _Decimal64 a = 4.0DD;
+		volatile _Decimal64 b = 2.0DD;
+		int main()
+		{
+		  asm volatile ("dadd %0,%1,%2" : "=d" (r) : "d" (a), "d" (b));
+		  asm volatile ("dsub %0,%1,%2" : "=d" (r) : "d" (a), "d" (b));
+		  asm volatile ("dmul %0,%1,%2" : "=d" (r) : "d" (a), "d" (b));
+		  asm volatile ("ddiv %0,%1,%2" : "=d" (r) : "d" (a), "d" (b));
+		  return 0;
+		}
+	    } "-mcpu=power6 -mhard-float"
+	}
+    }]
+}
+
 # Return 1 if the target supports compiling and assembling UCN, 0 otherwise.
 
 proc check_effective_target_ucn_nocache { } {
@@ -4936,6 +4962,7 @@  proc is-effective-target { arg } {
 	  "vsx_hw"         { set selected [check_vsx_hw_available] }
 	  "p8vector_hw"    { set selected [check_p8vector_hw_available] }
 	  "ppc_recip_hw"   { set selected [check_ppc_recip_hw_available] }
+	  "dfp_hw"         { set selected [check_dfp_hw_available] }
 	  "named_sections" { set selected [check_named_sections_available] }
 	  "gc_sections"    { set selected [check_gc_sections_available] }
 	  "cxa_atexit"     { set selected [check_cxa_atexit_available] }
@@ -4958,6 +4985,7 @@  proc is-effective-target-keyword { arg }
 	  "vsx_hw"         { return 1 }
 	  "p8vector_hw"    { return 1 }
 	  "ppc_recip_hw"   { return 1 }
+	  "dfp_hw"         { return 1 }
 	  "named_sections" { return 1 }
 	  "gc_sections"    { return 1 }
 	  "cxa_atexit"     { return 1 }
Index: gcc/testsuite/gcc.target/powerpc/pack03.c
===================================================================
--- gcc/testsuite/gcc.target/powerpc/pack03.c	(revision 210242)
+++ gcc/testsuite/gcc.target/powerpc/pack03.c	(working copy)
@@ -1,7 +1,7 @@ 
 /* { dg-do run { target { powerpc*-*-linux* } } } */
 /* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
 /* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
-/* { dg-require-effective-target dfprt } */
+/* { dg-require-effective-target dfp_hw } */
 /* { dg-options "-O2 -mhard-dfp" } */
 
 #include <stddef.h>