summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.c-torture/compile/20001205-1.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gcc.c-torture/compile/20001205-1.c')
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/20001205-1.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.c-torture/compile/20001205-1.c b/gcc/testsuite/gcc.c-torture/compile/20001205-1.c
new file mode 100644
index 000000000..bab7b69ca
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/20001205-1.c
@@ -0,0 +1,26 @@
+/* This does not work on m68hc11 due to the asm statement which forces
+ two 'long' (32-bits) variables to go in registers. */
+/* { dg-do assemble } */
+/* { dg-xfail-if "" { m6811-*-* m6812-*-* } { "*" } { "" } } */
+
+static inline unsigned long rdfpcr(void)
+{
+ unsigned long tmp, ret;
+ __asm__ ("" : "=r"(tmp), "=r"(ret));
+ return ret;
+}
+
+static inline unsigned long
+swcr_update_status(unsigned long swcr, unsigned long fpcr)
+{
+ swcr &= ~0x7e0000ul;
+ swcr |= (fpcr >> 3) & 0x7e0000ul;
+ return swcr;
+}
+
+unsigned long osf_getsysinfo(unsigned long flags)
+{
+ unsigned long w;
+ w = swcr_update_status(flags, rdfpcr());
+ return w;
+}