[libcxxabi] r207481 - Add unwind test case that checks restoring of float registers (such as on AArch64)
Hal Finkel
hfinkel at anl.gov
Thu May 1 14:06:31 PDT 2014
----- Original Message -----
> From: "Nick Kledzik" <kledzik at apple.com>
> To: cfe-commits at cs.uiuc.edu
> Sent: Monday, April 28, 2014 8:08:23 PM
> Subject: [libcxxabi] r207481 - Add unwind test case that checks restoring of float registers (such as on AArch64)
>
> Author: kledzik
> Date: Mon Apr 28 20:08:23 2014
> New Revision: 207481
>
> URL: http://llvm.org/viewvc/llvm-project?rev=207481&view=rev
> Log:
> Add unwind test case that checks restoring of float registers (such
> as on AArch64)
>
> Added:
> libcxxabi/trunk/test/unwind_06.cpp
>
> Added: libcxxabi/trunk/test/unwind_06.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/test/unwind_06.cpp?rev=207481&view=auto
> ==============================================================================
> --- libcxxabi/trunk/test/unwind_06.cpp (added)
> +++ libcxxabi/trunk/test/unwind_06.cpp Mon Apr 28 20:08:23 2014
> @@ -0,0 +1,239 @@
> +//===------------------------- unwind_06.cpp
> ------------------------------===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is dual licensed under the MIT and the University of
> Illinois Open
> +// Source Licenses. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include <exception>
> +#include <stdlib.h>
> +#include <assert.h>
> +#include <stdio.h>
> +
> +// Compile with -Os to get compiler uses float registers to hold
> float variables
> +
> +__attribute__((noinline))
> +double get(int x) { return (double)x; }
> +
> +
> +double try1(bool v) {
> + double a = get(0);
> + double b = get(0);
> + 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);
> + 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);
> + if (v) throw 10;
> + return get(0)+a+b+c+d;
> +}
> +
> +double try4(bool v) {
> + double a = get(0);
> + double b = get(0);
> + double c = get(0);
> + double d = get(0);
> + double e = get(0);
> + if (v) throw 10;
> + return get(0)+a+b+c+d+e;
> +}
> +
> +double try5(bool v) {
> + double a = get(0);
> + double b = get(0);
> + double c = get(0);
> + double d = get(0);
> + double e = get(0);
> + double f = get(0);
> + if (v) throw 10;
> + return get(0)+a+b+c+d+e+f;
> +}
> +
> +double try6(bool v) {
> + double a = get(0);
> + double b = get(0);
> + double c = get(0);
> + double d = get(0);
> + double e = get(0);
> + double f = get(0);
> + double g = get(0);
> + if (v) throw 10;
> + return get(0)+a+b+c+d+e+f+g;
> +}
> +
> +double try7(bool v) {
> + double a = get(0);
> + double b = get(0);
> + double c = get(0);
> + double d = get(0);
> + double e = get(0);
> + double f = get(0);
> + double g = get(0);
> + double h = get(0);
> + if (v) throw 10;
> + return get(0)+a+b+c+d+e+f+g;
> +}
> +
> +double try8(bool v) {
> + double a = get(0);
> + double b = get(0);
> + double c = get(0);
> + double d = get(0);
> + double e = get(0);
> + double f = get(0);
> + double g = get(0);
> + double h = get(0);
> + double i = get(0);
> + if (v) throw 10;
> + return get(0)+a+b+c+d+e+f+g+i;
> +}
> +
> +
> +
> +
> +
> +double foo()
> +{
> + double a = get(1);
> + double b = get(2);
> + double c = get(3);
> + double d = get(4);
> + double e = get(5);
> + double f = get(6);
> + double g = get(7);
> + double h = get(8);
> + try {
> + try1(true);
> + }
> + catch (int e) {
> + }
> + assert(a == get(1));
> + assert(b == get(2));
> + assert(c == get(3));
> + assert(d == get(4));
> + assert(e == get(5));
> + assert(f == get(6));
> + assert(g == get(7));
> + assert(h == get(8));
> +
> + try {
> + try2(true);
> + }
> + catch (int e) {
> + }
> + assert(a == get(1));
> + assert(b == get(2));
> + assert(c == get(3));
> + assert(d == get(4));
> + assert(e == get(5));
> + assert(f == get(6));
> + assert(g == get(7));
> + assert(h == get(8));
> +
> + try {
> + try3(true);
> + }
> + catch (int e) {
> + }
> + assert(a == get(1));
> + assert(b == get(2));
> + assert(c == get(3));
> + assert(d == get(4));
> + assert(e == get(5));
> + assert(f == get(6));
> + assert(g == get(7));
> + assert(h == get(8));
> +
> + try {
> + try4(true);
> + }
> + catch (int e) {
> + }
> + assert(a == get(1));
> + assert(b == get(2));
> + assert(c == get(3));
> + assert(d == get(4));
> + assert(e == get(5));
> + assert(f == get(6));
> + assert(g == get(7));
> + assert(h == get(8));
> +
> + try {
> + try5(true);
> + }
> + catch (int e) {
> + }
> + assert(a == get(1));
> + assert(b == get(2));
> + assert(c == get(3));
> + assert(d == get(4));
> + assert(e == get(5));
> + assert(f == get(6));
> + assert(g == get(7));
> + assert(h == get(8));
> +
> + try {
> + try6(true);
> + }
> + catch (int e) {
> + }
> + assert(a == get(1));
> + assert(b == get(2));
> + assert(c == get(3));
> + assert(d == get(4));
> + assert(e == get(5));
> + assert(f == get(6));
> + assert(g == get(7));
> + assert(h == get(8));
> +
> + try {
> + try7(true);
> + }
> + catch (int e) {
> + }
> + assert(a == get(1));
> + assert(b == get(2));
> + assert(c == get(3));
> + assert(d == get(4));
> + assert(e == get(5));
> + assert(f == get(6));
> + assert(g == get(7));
> + assert(h == get(8));
> +
> + try {
> + try8(true);
> + }
> + catch (int e) {
> + }
> + assert(a == get(1));
> + assert(b == get(2));
> + assert(c == get(3));
> + assert(d == get(4));
> + assert(e == get(5));
> + assert(f == get(6));
> + assert(g == get(7));
> + assert(h == get(8));
> +
> + return a+b+c+d+e+f+g+h;
> +}
> +
> +
> +
> +int main()
> +{
> + foo();
Are we missing a 'return 0;' here?
-Hal
> +}
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
--
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory
More information about the cfe-commits
mailing list