diff options
| author | Joerg Sonnenberger <joerg@bec.de> | 2014-05-04 16:31:33 +0000 |
|---|---|---|
| committer | Joerg Sonnenberger <joerg@bec.de> | 2014-05-04 16:31:33 +0000 |
| commit | c72473d87b51717fee63a9c4059f2d75dbfb5382 (patch) | |
| tree | ec5e3e2b4b00acca00e2d339b0b6572e6e0c1561 /libcxxabi/test/unwind_06.cpp | |
| parent | e73333a50f352d0d1c017260b2afc3122a022558 (diff) | |
| download | bcm5719-llvm-c72473d87b51717fee63a9c4059f2d75dbfb5382.tar.gz bcm5719-llvm-c72473d87b51717fee63a9c4059f2d75dbfb5382.zip | |
Try harder to get the compiler to use float registers in different
places to increase the chance of messing up any preserved registers.
llvm-svn: 207938
Diffstat (limited to 'libcxxabi/test/unwind_06.cpp')
| -rw-r--r-- | libcxxabi/test/unwind_06.cpp | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/libcxxabi/test/unwind_06.cpp b/libcxxabi/test/unwind_06.cpp index 881b72e5435..dd505c8e92a 100644 --- a/libcxxabi/test/unwind_06.cpp +++ b/libcxxabi/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; } |

