[libcxxabi] r207938 - Try harder to get the compiler to use float registers in different

Joerg Sonnenberger joerg at bec.de
Sun May 4 09:31:34 PDT 2014


Author: joerg
Date: Sun May  4 11:31:33 2014
New Revision: 207938

URL: http://llvm.org/viewvc/llvm-project?rev=207938&view=rev
Log:
Try harder to get the compiler to use float registers in different
places to increase the chance of messing up any preserved registers.

Modified:
    libcxxabi/trunk/test/unwind_06.cpp

Modified: libcxxabi/trunk/test/unwind_06.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/test/unwind_06.cpp?rev=207938&r1=207937&r2=207938&view=diff
==============================================================================
--- libcxxabi/trunk/test/unwind_06.cpp (original)
+++ libcxxabi/trunk/test/unwind_06.cpp Sun May  4 11:31:33 2014
@@ -14,30 +14,38 @@
 
 // Compile with -Os to get compiler uses float registers to hold float variables
 
-__attribute__((noinline))
-double get(int x) { return (double)x; }
+double get_(int x) { return (double)x; }
 
+double (* volatile get)(int) = get_;
+
+volatile int counter;
 
 double try1(bool v) {
   double a = get(0);
-  double b = get(0);
+  double b = get(1);
+  for (counter = 100; counter; --counter)
+    a += get(1) + b;
   if (v) throw 10;
   return get(0)+a+b;
 }
 
 double try2(bool v) {
   double a = get(0);
-  double b = get(0);
-  double c = get(0);
+  double b = get(1);
+  double c = get(2);
+  for (counter = 100; counter; --counter)
+    a += get(1) + b + c;
   if (v) throw 10;
   return get(0)+a+b+c;
 }
 
 double try3(bool v) {
   double a = get(0);
-  double b = get(0);
-  double c = get(0);
-  double d = get(0);
+  double b = get(1);
+  double c = get(2);
+  double d = get(3);
+  for (counter = 100; counter; --counter)
+    a += get(1) + b + c + d;
   if (v) throw 10;
   return get(0)+a+b+c+d;
 }
@@ -48,6 +56,8 @@ double try4(bool v) {
   double c = get(0);
   double d = get(0);
   double e = get(0);
+  for (counter = 100; counter; --counter)
+    a += get(1) + b+c+d+e;
   if (v) throw 10;
   return get(0)+a+b+c+d+e;
 }
@@ -59,6 +69,8 @@ double try5(bool v) {
   double d = get(0);
   double e = get(0);
   double f = get(0);
+  for (counter = 100; counter; --counter)
+    a += get(1) + b+c+d+e+f;
   if (v) throw 10;
   return get(0)+a+b+c+d+e+f;
 }
@@ -71,6 +83,8 @@ double try6(bool v) {
   double e = get(0);
   double f = get(0);
   double g = get(0);
+  for (counter = 100; counter; --counter)
+    a += get(1) + b+c+d+e+f+g;
   if (v) throw 10;
   return get(0)+a+b+c+d+e+f+g;
 }
@@ -84,6 +98,8 @@ double try7(bool v) {
   double f = get(0);
   double g = get(0);
   double h = get(0);
+  for (counter = 100; counter; --counter)
+    a += get(1) + b+c+d+e+f+g;
   if (v) throw 10;
   return get(0)+a+b+c+d+e+f+g;
 }
@@ -98,6 +114,8 @@ double try8(bool v) {
   double g = get(0);
   double h = get(0);
   double i = get(0);
+  for (counter = 100; counter; --counter)
+    a += get(1) + b+c+d+e+f+g+i;
   if (v) throw 10;
   return get(0)+a+b+c+d+e+f+g+i;
 }





More information about the cfe-commits mailing list