of the floating point routines in libgcc1.c for targets without
hardware floating point. */
-/* Copyright 1994, 1997, 1998, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 1994,1997-1998 Free Software Foundation, Inc.
This file is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
sim_fpu_inv (sim_fpu *f,
const sim_fpu *r)
{
- return sim_fpu_div (f, &sim_fpu_one, r);
+ if (sim_fpu_is_snan (r))
+ {
+ *f = *r;
+ f->class = sim_fpu_class_qnan;
+ return sim_fpu_status_invalid_snan;
+ }
+ if (sim_fpu_is_qnan (r))
+ {
+ *f = *r;
+ f->class = sim_fpu_class_qnan;
+ return 0;
+ }
+ if (sim_fpu_is_infinity (r))
+ {
+ *f = sim_fpu_zero;
+ f->sign = r->sign;
+ return 0;
+ }
+ if (sim_fpu_is_zero (r))
+ {
+ f->class = sim_fpu_class_infinity;
+ f->sign = r->sign;
+ return sim_fpu_status_invalid_div0;
+ }
+ *f = *r;
+ f->normal_exp = - r->normal_exp;
+ return 0;
}
}
-INLINE_SIM_FPU (unsigned64)
-sim_fpu_fraction (const sim_fpu *d)
-{
- return d->fraction;
-}
-
-
-INLINE_SIM_FPU (unsigned64)
-sim_fpu_guard (const sim_fpu *d, int is_double)
-{
- unsigned64 rv;
- unsigned64 guardmask = LSMASK64 (NR_GUARDS - 1, 0);
- rv = (d->fraction & guardmask) >> NR_PAD;
- return rv;
-}
-
INLINE_SIM_FPU (int)
sim_fpu_is (const sim_fpu *d)
/* Simulator Floating-point support.
-
- Copyright 1997, 1998, 2002, 2003 Free Software Foundation, Inc.
-
+ Copyright (C) 1997, 1998, 2002 Free Software Foundation, Inc.
Contributed by Cygnus Support.
This file is part of GDB, the GNU debugger.
For unpacked structures (passed by value and reference), the code
quality of GCC-2.7 (on x86) for each alternative was compared.
- Needless to say the results, while better than for a packed 64 bit
+ Needless to say the results, while better then for a packed 64 bit
object, were still poor (GCC had only limited support for the
optimization of references to structure members). Regardless, the
struct-by-ref alternative achieved better results when compiled
INLINE_SIM_FPU (int) sim_fpu_sign (const sim_fpu *s);
INLINE_SIM_FPU (int) sim_fpu_exp (const sim_fpu *s);
-INLINE_SIM_FPU (unsigned64) sim_fpu_fraction (const sim_fpu *s);
-INLINE_SIM_FPU (unsigned64) sim_fpu_guard (const sim_fpu *s, int is_double);