summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJoerg Sonnenberger <joerg@bec.de>2014-05-04 16:31:33 +0000
committerJoerg Sonnenberger <joerg@bec.de>2014-05-04 16:31:33 +0000
commit5db9aa48b796e95cf61ac02d31fd7a0c13a98bea (patch)
tree0c12742bf840abeb780130c6e99f848401520585 /test
parent68d64037c9cd1420b947d2d401ea4bbcc8048564 (diff)
Try harder to get the compiler to use float registers in different
places to increase the chance of messing up any preserved registers. git-svn-id: https://llvm.org/svn/llvm-project/libcxxabi/trunk@207938 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r--test/unwind_06.cpp34
1 files changed, 26 insertions, 8 deletions
diff --git a/test/unwind_06.cpp b/test/unwind_06.cpp
index 881b72e..dd505c8 100644
--- a/test/unwind_06.cpp
+++ b/test/unwind_06.cpp
@@ -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;
}