Remove code duplication from FXRSTOR functioN
This commit is contained in:
parent
4e74efdf0c
commit
2f20c087c3
@ -71,6 +71,8 @@ struct bx_fpu_reg_t {
|
||||
} GCC_ATTRIBUTE((aligned(16), packed));
|
||||
#endif
|
||||
|
||||
typedef struct bx_fpu_reg_t FPU_REG;
|
||||
|
||||
#define BX_FPU_REG(index) \
|
||||
(BX_CPU_THIS_PTR the_i387.st_space[index*2])
|
||||
|
||||
@ -80,6 +82,14 @@ struct bx_fpu_reg_t {
|
||||
|
||||
#define FPU_SW_SUMMARY (0x0080) /* exception summary */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
int FPU_tagof(FPU_REG *reg) BX_CPP_AttrRegparmN(1);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#if BX_SUPPORT_MMX
|
||||
|
||||
|
@ -265,14 +265,7 @@ void BX_CPU_C::FXRSTOR(bxInstruction_c *i)
|
||||
{
|
||||
if(tag_byte & tag_byte_mask) {
|
||||
bx_fpu_reg_t *fpu_reg = (bx_fpu_reg_t *) &(BX_FPU_REG(index));
|
||||
|
||||
if (fpu_reg->exp == 0) {
|
||||
if(!(fpu_reg->sigl | fpu_reg->sigh)) twd |= FPU_TAG_ZERO;
|
||||
else twd |= FPU_TAG_SPECIAL;
|
||||
}
|
||||
else if (fpu_reg->exp == 0x7fff) twd |= FPU_TAG_SPECIAL;
|
||||
else if (fpu_reg->sigh & 0x80000000) twd |= FPU_TAG_VALID;
|
||||
else twd |= FPU_TAG_SPECIAL;
|
||||
twd = FPU_tagof(fpu_reg);
|
||||
}
|
||||
else {
|
||||
twd |= FPU_TAG_EMPTY;
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*---------------------------------------------------------------------------+
|
||||
| fpu_emu.h |
|
||||
| $Id: fpu_emu.h,v 1.19 2003-10-05 12:26:11 sshwarts Exp $
|
||||
| $Id: fpu_emu.h,v 1.20 2003-10-25 10:32:54 sshwarts Exp $
|
||||
| |
|
||||
| Copyright (C) 1992,1993,1994,1997 |
|
||||
| W. Metzenthen, 22 Parker St, Ormond, Vic 3163, |
|
||||
@ -64,8 +64,6 @@
|
||||
|
||||
#include "fpu_system.h"
|
||||
|
||||
typedef struct bx_fpu_reg_t FPU_REG;
|
||||
|
||||
/*
|
||||
#define RE_ENTRANT_CHECKING
|
||||
*/
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*---------------------------------------------------------------------------+
|
||||
| reg_ld_str.c |
|
||||
| $Id: reg_ld_str.c,v 1.17 2003-10-04 16:47:57 sshwarts Exp $
|
||||
| $Id: reg_ld_str.c,v 1.18 2003-10-25 10:32:54 sshwarts Exp $
|
||||
| |
|
||||
| All of the functions which transfer data between user memory and FPU_REGs.|
|
||||
| |
|
||||
@ -60,15 +60,12 @@ normalize_no_excep(FPU_REG *r, int exp, int sign)
|
||||
}
|
||||
|
||||
|
||||
int BX_CPP_AttrRegparmN(1)
|
||||
FPU_tagof(FPU_REG *ptr)
|
||||
int BX_CPP_AttrRegparmN(1) FPU_tagof(FPU_REG *reg)
|
||||
{
|
||||
int exp;
|
||||
|
||||
exp = exponent16(ptr) & 0x7fff;
|
||||
int exp = exponent16(reg) & 0x7fff;
|
||||
if (exp == 0)
|
||||
{
|
||||
if (!(ptr->sigh | ptr->sigl))
|
||||
if (!(reg->sigh | reg->sigl))
|
||||
{
|
||||
return TAG_Zero;
|
||||
}
|
||||
@ -82,7 +79,7 @@ FPU_tagof(FPU_REG *ptr)
|
||||
return TAG_Special;
|
||||
}
|
||||
|
||||
if (!(ptr->sigh & 0x80000000))
|
||||
if (!(reg->sigh & 0x80000000))
|
||||
{
|
||||
/* Unsupported data type. */
|
||||
/* Valid numbers have the ms bit set to 1. */
|
||||
@ -93,7 +90,6 @@ FPU_tagof(FPU_REG *ptr)
|
||||
return TAG_Valid;
|
||||
}
|
||||
|
||||
|
||||
/* Get a long double from user memory */
|
||||
int BX_CPP_AttrRegparmN(2)
|
||||
FPU_load_extended(bx_address s, int stnr)
|
||||
|
Loading…
Reference in New Issue
Block a user