Viewing file: o32-fp.C (1.17 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// Test whether call saved float are restored properly for O32 ABI // { dg-do run { target { { { mips*-*-linux* } && hard_float } && { ! mips64 } } } } // { dg-options "-O2" }
void __attribute__((noinline)) bar (void) { throw 1; }
void __attribute__((noinline)) foo (void) { register double f20 __asm__ ("f20") = 0.0; register double f22 __asm__ ("f22") = 0.0; register double f24 __asm__ ("f24") = 0.0; register double f26 __asm__ ("f26") = 0.0; register double f28 __asm__ ("f28") = 0.0; register double f30 __asm__ ("f30") = 0.0; __asm__ __volatile__("":"+f"(f20),"+f"(f22),"+f"(f24),"+f"(f26),"+f"(f30)); bar (); }
int main (void) { register double f20 __asm__ ("f20") = 12.0; register double f22 __asm__ ("f22") = 13.0; register double f24 __asm__ ("f24") = 14.0; register double f26 __asm__ ("f26") = 15.0; register double f28 __asm__ ("f28") = 16.0; register double f30 __asm__ ("f30") = 17.0;
try { foo (); } catch (...) { __asm__ ("":"+f"(f20),"+f"(f22),"+f"(f24),"+f"(f26),"+f"(f30)); }
if (f20 != 12.0 || f22 != 13.0 || f24 != 14.0 || f26 != 15.0 || f28 != 16.0 || f30 != 17.0) __builtin_abort (); return 0; }
|