diff options
Diffstat (limited to 'testsuite/tests/rts/T16514_c.cpp')
-rw-r--r-- | testsuite/tests/rts/T16514_c.cpp | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/testsuite/tests/rts/T16514_c.cpp b/testsuite/tests/rts/T16514_c.cpp new file mode 100644 index 0000000000..1474741ec0 --- /dev/null +++ b/testsuite/tests/rts/T16514_c.cpp @@ -0,0 +1,45 @@ +#include <iostream> +#include <stdexcept> + +extern "C" { + +void fn_hs(); +void fn() { + fn_hs(); +} + +void check(double sqrt2, double sqrt3, double sqrt5, + double sqrt8, double sqrt13, double sqrt21) { + std::cout << std::fixed << sqrt2 << " " << sqrt3 << " " << sqrt5 << " " + << sqrt8 << " " << sqrt13 << " " << sqrt21 << std::endl; + if (sqrt2 != 1.41421 || sqrt3 != 1.73205 || sqrt5 != 2.23607 || + sqrt8 != 2.82843 || sqrt13 != 3.60555 || sqrt21 != 4.58258) { + throw std::runtime_error("xmm registers have been scratched"); + } +} + +int test() { + try { + double sqrt2 = 1.41421; + double sqrt3 = 1.73205; + double sqrt5 = 2.23607; + double sqrt8 = 2.82843; + double sqrt13 = 3.60555; + double sqrt21 = 4.58258; + check(sqrt2, sqrt3, sqrt5, sqrt8, sqrt13, sqrt21); + fn(); + check(sqrt2, sqrt3, sqrt5, sqrt8, sqrt13, sqrt21); + try { + fn(); + } catch (const std::exception &) { + } + check(sqrt2, sqrt3, sqrt5, sqrt8, sqrt13, sqrt21); + } catch (const std::exception &e) { + std::cerr << e.what() << std::endl; + return 1; + } + return 0; +} + +} // extern "C" + |