mb86233: refine the patch to only do fp-type flag setting on fp operations [Ryan Holtz]
This commit is contained in:
parent
03d1877680
commit
04ad41cb66
@ -277,7 +277,12 @@ void mb86233_device::testdz()
|
|||||||
m_st &= ~F_SGD;
|
m_st &= ~F_SGD;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mb86233_device::stset_set_sz(u32 val)
|
void mb86233_device::stset_set_sz_int(u32 val)
|
||||||
|
{
|
||||||
|
m_alu_stset = val ? (val & 0x80000000 ? F_SGD : 0) : F_ZRD;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mb86233_device::stset_set_sz_fp(u32 val)
|
||||||
{
|
{
|
||||||
m_alu_stset = (val & 0x7fffffff) ? (val & 0x80000000 ? F_SGD : 0) : F_ZRD;
|
m_alu_stset = (val & 0x7fffffff) ? (val & 0x80000000 ? F_SGD : 0) : F_ZRD;
|
||||||
}
|
}
|
||||||
@ -291,7 +296,7 @@ void mb86233_device::alu_pre(u32 alu)
|
|||||||
// andd
|
// andd
|
||||||
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
||||||
m_alu_r1 = m_d & m_a;
|
m_alu_r1 = m_d & m_a;
|
||||||
stset_set_sz(m_alu_r1);
|
stset_set_sz_int(m_alu_r1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -299,15 +304,15 @@ void mb86233_device::alu_pre(u32 alu)
|
|||||||
// orad
|
// orad
|
||||||
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
||||||
m_alu_r1 = m_d | m_a;
|
m_alu_r1 = m_d | m_a;
|
||||||
stset_set_sz(m_alu_r1);
|
stset_set_sz_int(m_alu_r1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 0x03: {
|
case 0x03: {
|
||||||
// eord
|
// eord
|
||||||
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
||||||
m_alu_r1 = m_d ^ m_a;
|
m_alu_r1 = m_d ^ m_a;
|
||||||
stset_set_sz(m_alu_r1);
|
stset_set_sz_int(m_alu_r1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -315,7 +320,7 @@ void mb86233_device::alu_pre(u32 alu)
|
|||||||
// notd
|
// notd
|
||||||
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
||||||
m_alu_r1 = ~m_d;
|
m_alu_r1 = ~m_d;
|
||||||
stset_set_sz(m_alu_r1);
|
stset_set_sz_int(m_alu_r1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -323,7 +328,7 @@ void mb86233_device::alu_pre(u32 alu)
|
|||||||
// fcpd
|
// fcpd
|
||||||
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
||||||
u32 r = f2u(u2f(m_d) - u2f(m_a));
|
u32 r = f2u(u2f(m_d) - u2f(m_a));
|
||||||
stset_set_sz(r);
|
stset_set_sz_fp(r);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -331,7 +336,7 @@ void mb86233_device::alu_pre(u32 alu)
|
|||||||
// fmad
|
// fmad
|
||||||
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
||||||
m_alu_r1 = f2u(u2f(m_d) + u2f(m_a));
|
m_alu_r1 = f2u(u2f(m_d) + u2f(m_a));
|
||||||
stset_set_sz(m_alu_r1);
|
stset_set_sz_fp(m_alu_r1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -339,7 +344,7 @@ void mb86233_device::alu_pre(u32 alu)
|
|||||||
// fsbd
|
// fsbd
|
||||||
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
||||||
m_alu_r1 = f2u(u2f(m_d) - u2f(m_a));
|
m_alu_r1 = f2u(u2f(m_d) - u2f(m_a));
|
||||||
stset_set_sz(m_alu_r1);
|
stset_set_sz_fp(m_alu_r1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -356,7 +361,7 @@ void mb86233_device::alu_pre(u32 alu)
|
|||||||
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
||||||
m_alu_r1 = f2u(u2f(m_d) + u2f(m_p));
|
m_alu_r1 = f2u(u2f(m_d) + u2f(m_p));
|
||||||
m_alu_r2 = f2u(u2f(m_a) * u2f(m_b));
|
m_alu_r2 = f2u(u2f(m_a) * u2f(m_b));
|
||||||
stset_set_sz(m_alu_r1);
|
stset_set_sz_fp(m_alu_r1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -365,7 +370,7 @@ void mb86233_device::alu_pre(u32 alu)
|
|||||||
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
||||||
m_alu_r1 = f2u(u2f(m_d) - u2f(m_p));
|
m_alu_r1 = f2u(u2f(m_d) - u2f(m_p));
|
||||||
m_alu_r2 = f2u(u2f(m_a) * u2f(m_b));
|
m_alu_r2 = f2u(u2f(m_a) * u2f(m_b));
|
||||||
stset_set_sz(m_alu_r1);
|
stset_set_sz_fp(m_alu_r1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -373,7 +378,7 @@ void mb86233_device::alu_pre(u32 alu)
|
|||||||
// fabd
|
// fabd
|
||||||
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
||||||
m_alu_r1 = m_d & 0x7fffffff;
|
m_alu_r1 = m_d & 0x7fffffff;
|
||||||
stset_set_sz(m_alu_r1);
|
stset_set_sz_fp(m_alu_r1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -381,7 +386,7 @@ void mb86233_device::alu_pre(u32 alu)
|
|||||||
// fsmd
|
// fsmd
|
||||||
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
||||||
m_alu_r1 = f2u(u2f(m_d) + u2f(m_p));
|
m_alu_r1 = f2u(u2f(m_d) + u2f(m_p));
|
||||||
stset_set_sz(m_alu_r1);
|
stset_set_sz_fp(m_alu_r1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -390,7 +395,7 @@ void mb86233_device::alu_pre(u32 alu)
|
|||||||
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
||||||
m_alu_r1 = m_p;
|
m_alu_r1 = m_p;
|
||||||
m_alu_r2 = f2u(u2f(m_a) * u2f(m_b));
|
m_alu_r2 = f2u(u2f(m_a) * u2f(m_b));
|
||||||
stset_set_sz(m_alu_r1);
|
stset_set_sz_fp(m_alu_r1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -398,7 +403,7 @@ void mb86233_device::alu_pre(u32 alu)
|
|||||||
// cxfd
|
// cxfd
|
||||||
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
||||||
m_alu_r1 = f2u(s32(m_d));
|
m_alu_r1 = f2u(s32(m_d));
|
||||||
stset_set_sz(m_alu_r1);
|
stset_set_sz_int(m_alu_r1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -411,7 +416,7 @@ void mb86233_device::alu_pre(u32 alu)
|
|||||||
case 2: m_alu_r1 = s32(floorf(u2f(m_d))); break;
|
case 2: m_alu_r1 = s32(floorf(u2f(m_d))); break;
|
||||||
case 3: m_alu_r1 = s32(u2f(m_d)); break;
|
case 3: m_alu_r1 = s32(u2f(m_d)); break;
|
||||||
}
|
}
|
||||||
stset_set_sz(m_alu_r1);
|
stset_set_sz_int(m_alu_r1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -419,7 +424,7 @@ void mb86233_device::alu_pre(u32 alu)
|
|||||||
// fdvd
|
// fdvd
|
||||||
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
||||||
m_alu_r1 = f2u(u2f(m_d) / u2f(m_a));
|
m_alu_r1 = f2u(u2f(m_d) / u2f(m_a));
|
||||||
stset_set_sz(m_alu_r1);
|
stset_set_sz_fp(m_alu_r1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -427,7 +432,7 @@ void mb86233_device::alu_pre(u32 alu)
|
|||||||
// fned
|
// fned
|
||||||
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
||||||
m_alu_r1 = m_d ? m_d ^ 0x80000000 : 0;
|
m_alu_r1 = m_d ? m_d ^ 0x80000000 : 0;
|
||||||
stset_set_sz(m_alu_r1);
|
stset_set_sz_fp(m_alu_r1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -435,7 +440,7 @@ void mb86233_device::alu_pre(u32 alu)
|
|||||||
// d = b + a
|
// d = b + a
|
||||||
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
||||||
m_alu_r1 = f2u(u2f(m_b) + u2f(m_a));
|
m_alu_r1 = f2u(u2f(m_b) + u2f(m_a));
|
||||||
stset_set_sz(m_alu_r1);
|
stset_set_sz_fp(m_alu_r1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -443,7 +448,7 @@ void mb86233_device::alu_pre(u32 alu)
|
|||||||
// d = b - a
|
// d = b - a
|
||||||
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
||||||
m_alu_r1 = f2u(u2f(m_b) - u2f(m_a));
|
m_alu_r1 = f2u(u2f(m_b) - u2f(m_a));
|
||||||
stset_set_sz(m_alu_r1);
|
stset_set_sz_fp(m_alu_r1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -451,7 +456,7 @@ void mb86233_device::alu_pre(u32 alu)
|
|||||||
// lsrd
|
// lsrd
|
||||||
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
||||||
m_alu_r1 = m_d >> m_sft;
|
m_alu_r1 = m_d >> m_sft;
|
||||||
stset_set_sz(m_alu_r1);
|
stset_set_sz_int(m_alu_r1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -459,7 +464,7 @@ void mb86233_device::alu_pre(u32 alu)
|
|||||||
// lsld
|
// lsld
|
||||||
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
||||||
m_alu_r1 = m_d << m_sft;
|
m_alu_r1 = m_d << m_sft;
|
||||||
stset_set_sz(m_alu_r1);
|
stset_set_sz_int(m_alu_r1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -467,7 +472,7 @@ void mb86233_device::alu_pre(u32 alu)
|
|||||||
// asrd
|
// asrd
|
||||||
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
||||||
m_alu_r1 = s32(m_d) >> m_sft;
|
m_alu_r1 = s32(m_d) >> m_sft;
|
||||||
stset_set_sz(m_alu_r1);
|
stset_set_sz_int(m_alu_r1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -475,7 +480,7 @@ void mb86233_device::alu_pre(u32 alu)
|
|||||||
// asld
|
// asld
|
||||||
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
||||||
m_alu_r1 = s32(m_d) << m_sft;
|
m_alu_r1 = s32(m_d) << m_sft;
|
||||||
stset_set_sz(m_alu_r1);
|
stset_set_sz_int(m_alu_r1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -483,7 +488,7 @@ void mb86233_device::alu_pre(u32 alu)
|
|||||||
// addd
|
// addd
|
||||||
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
||||||
m_alu_r1 = m_d + m_a;
|
m_alu_r1 = m_d + m_a;
|
||||||
stset_set_sz(m_alu_r1);
|
stset_set_sz_int(m_alu_r1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -491,7 +496,7 @@ void mb86233_device::alu_pre(u32 alu)
|
|||||||
// subd
|
// subd
|
||||||
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
m_alu_stmask = F_ZRD|F_SGD|F_CPD|F_OVD|F_DVZD;
|
||||||
m_alu_r1 = m_d - m_a;
|
m_alu_r1 = m_d - m_a;
|
||||||
stset_set_sz(m_alu_r1);
|
stset_set_sz_int(m_alu_r1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -120,7 +120,8 @@ private:
|
|||||||
void ea_post_1(u32 r);
|
void ea_post_1(u32 r);
|
||||||
void pcs_push();
|
void pcs_push();
|
||||||
void pcs_pop();
|
void pcs_pop();
|
||||||
inline void stset_set_sz(u32 val);
|
inline void stset_set_sz_int(u32 val);
|
||||||
|
inline void stset_set_sz_fp(u32 val);
|
||||||
|
|
||||||
u32 read_reg(u32 r);
|
u32 read_reg(u32 r);
|
||||||
void write_reg(u32 r, u32 v);
|
void write_reg(u32 r, u32 v);
|
||||||
|
Loading…
Reference in New Issue
Block a user