diff options
Diffstat (limited to 'sim')
-rw-r--r-- | sim/common/sim-fpu.c | 46 | ||||
-rw-r--r-- | sim/common/sim-fpu.h | 8 |
2 files changed, 30 insertions, 24 deletions
diff --git a/sim/common/sim-fpu.c b/sim/common/sim-fpu.c index 845248a..28d61a5 100644 --- a/sim/common/sim-fpu.c +++ b/sim/common/sim-fpu.c @@ -2,7 +2,7 @@ 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 @@ -1754,7 +1754,33 @@ INLINE_SIM_FPU (int) 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; } @@ -2188,22 +2214,6 @@ sim_fpu_exp (const sim_fpu *d) } -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) diff --git a/sim/common/sim-fpu.h b/sim/common/sim-fpu.h index 579fbaa..755e194 100644 --- a/sim/common/sim-fpu.h +++ b/sim/common/sim-fpu.h @@ -1,7 +1,5 @@ /* 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. @@ -44,7 +42,7 @@ with this program; if not, write to the Free Software Foundation, Inc., 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 @@ -318,8 +316,6 @@ INLINE_SIM_FPU (int) sim_fpu_is_denorm (const sim_fpu *s); /* !zero */ 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); |