bugfixes in new GETMANT* instrs

This commit is contained in:
Stanislav Shwartsman 2014-02-03 21:10:44 +00:00
parent b33f93b9f3
commit ea390abd3c
2 changed files with 10 additions and 10 deletions

View File

@ -843,8 +843,8 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::VGETMANTSS_MASK_VssHpsWssIbR(bxIns
if (! i->opmask() || BX_SCALAR_ELEMENT_MASK(i->opmask())) {
float32 op2 = BX_READ_XMM_REG_LO_DWORD(i->src2());
bool sign_ctrl = (i->Ib() >> 2) & 0x3;
bool interv = i->Ib() & 0x3;
int sign_ctrl = (i->Ib() >> 2) & 0x3;
int interv = i->Ib() & 0x3;
float_status_t status;
mxcsr_to_softfloat_status_word(status, MXCSR);
@ -870,8 +870,8 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::VGETMANTSD_MASK_VsdHpdWsdIbR(bxIns
if (! i->opmask() || BX_SCALAR_ELEMENT_MASK(i->opmask())) {
float64 op2 = BX_READ_XMM_REG_LO_QWORD(i->src2());
bool sign_ctrl = (i->Ib() >> 2) & 0x3;
bool interv = i->Ib() & 0x3;
int sign_ctrl = (i->Ib() >> 2) & 0x3;
int interv = i->Ib() & 0x3;
float_status_t status;
mxcsr_to_softfloat_status_word(status, MXCSR);
@ -900,8 +900,8 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::VGETMANTPS_MASK_VpsWpsIbR(bxInstru
mxcsr_to_softfloat_status_word(status, MXCSR);
softfloat_status_word_rc_override(status, i);
bool sign_ctrl = (i->Ib() >> 2) & 0x3;
bool interv = i->Ib() & 0x3;
int sign_ctrl = (i->Ib() >> 2) & 0x3;
int interv = i->Ib() & 0x3;
for (unsigned n=0, mask = 0x1; n < DWORD_ELEMENTS(len); n++, mask <<= 1) {
if (opmask & mask)
@ -934,8 +934,8 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::VGETMANTPD_MASK_VpdWpdIbR(bxInstru
mxcsr_to_softfloat_status_word(status, MXCSR);
softfloat_status_word_rc_override(status, i);
bool sign_ctrl = (i->Ib() >> 2) & 0x3;
bool interv = i->Ib() & 0x3;
int sign_ctrl = (i->Ib() >> 2) & 0x3;
int interv = i->Ib() & 0x3;
for (unsigned n=0, mask = 0x1; n < QWORD_ELEMENTS(len); n++, mask <<= 1) {
if (opmask & mask)

View File

@ -698,7 +698,7 @@ float32 float32_getmant(float32 a, float_status_t &status, int sign_ctrl, int in
aExp = 0x7E;
break;
case 0x3: // interval [3/4,3/2)
aExp = 0x7F - (a >> 22) & 0x1;
aExp = 0x7F - (aSig >> 22) & 0x1;
break;
}
@ -1807,7 +1807,7 @@ float64 float64_getmant(float64 a, float_status_t &status, int sign_ctrl, int in
aExp = 0x3FE;
break;
case 0x3: // interval [3/4,3/2)
aExp = 0x3FF - (a >> 51) & 0x1;
aExp = 0x3FF - (aSig >> 51) & 0x1;
break;
}