This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[4.2 PATCH]: Backport libffi x86 fix


This patch backports to the 4.2 branch a fix on x86 for a libffi test that
fails because of the excess precision on that chip.  The failure can be
seen here: http://gcc.gnu.org/ml/gcc-testresults/2008-02/msg01527.html

Patch tested via "make check-target-libffi" on i686-unknown-linux-gnu.

Okay for 4.2?

		Thanks,
		--Kaveh


2008-02-26  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	Backport:
	2007-03-24  Uros Bizjak  <ubizjak@gmail.com>

	* testsuite/libffi.call/return_fl2.c (return_fl): Mark as static.
	Use 'volatile float sum' to create sum of floats to avoid false
	negative due to excess precision on ix86 targets.
	(main): Ditto.

diff -rup orig/egcc-4.2-SVN20080226/libffi/testsuite/libffi.call/return_fl2.c egcc-4.2-SVN20080226/libffi/testsuite/libffi.call/return_fl2.c
--- orig/egcc-4.2-SVN20080226/libffi/testsuite/libffi.call/return_fl2.c	2008-01-03 23:39:22.000000000 +0100
+++ egcc-4.2-SVN20080226/libffi/testsuite/libffi.call/return_fl2.c	2008-02-26 05:17:00.000000000 +0100
@@ -7,12 +7,13 @@
 /* { dg-do run } */
 #include "ffitest.h"

-/* To avoid a false negative on ix86 do not declare the return_fl static.
-   See PR323.
-*/
-float return_fl(float fl1, float fl2, float fl3, float fl4)
+/* Use volatile float to avoid false negative on ix86.  See PR target/323.  */
+static float return_fl(float fl1, float fl2, float fl3, float fl4)
 {
-  return fl1 + fl2 + fl3 + fl4;
+  volatile float sum;
+
+  sum = fl1 + fl2 + fl3 + fl4;
+  return sum;
 }
 int main (void)
 {
@@ -20,6 +21,7 @@ int main (void)
   ffi_type *args[MAX_ARGS];
   void *values[MAX_ARGS];
   float fl1, fl2, fl3, fl4, rfl;
+  volatile float sum;

   args[0] = &ffi_type_float;
   args[1] = &ffi_type_float;
@@ -40,6 +42,8 @@ int main (void)

   ffi_call(&cif, FFI_FN(return_fl), &rfl, values);
   printf ("%f vs %f\n", rfl, return_fl(fl1, fl2, fl3, fl4));
-  CHECK(rfl ==  fl1 + fl2 + fl3 + fl4);
+
+  sum = fl1 + fl2 + fl3 + fl4;
+  CHECK(rfl == sum);
   exit(0);
 }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]