mirror of
https://git.suyu.dev/suyu/suyu
synced 2024-11-02 13:27:52 +00:00
commit
682e6bc8d9
1 changed files with 14 additions and 50 deletions
|
@ -959,14 +959,10 @@ vfp_single_multiply(struct vfp_single *vsd, struct vfp_single *vsn, struct vfp_s
|
|||
static u32
|
||||
vfp_single_multiply_accumulate(ARMul_State* state, int sd, int sn, s32 m, u32 fpscr, u32 negate, const char *func)
|
||||
{
|
||||
|
||||
{
|
||||
struct vfp_single vsd, vsp, vsn, vsm;
|
||||
vfp_single vsd, vsp, vsn, vsm;
|
||||
u32 exceptions;
|
||||
s32 v;
|
||||
|
||||
|
||||
|
||||
v = vfp_get_float(state, sn);
|
||||
pr_debug("VFP: s%u = %08x\n", sn, v);
|
||||
vfp_single_unpack(&vsn, v);
|
||||
|
@ -993,38 +989,6 @@ vfp_single_multiply_accumulate(ARMul_State* state, int sd, int sn, s32 m, u32 fp
|
|||
return vfp_single_normaliseround(state, sd, &vsd, fpscr, exceptions, func);
|
||||
}
|
||||
|
||||
struct vfp_double vsd, vsp, vsn, vsm;
|
||||
u32 exceptions;
|
||||
s32 v;
|
||||
s64 vd;
|
||||
s64 md;
|
||||
|
||||
v = vfp_get_float(state, sn);
|
||||
vd = vfp_single_to_doubleintern(state, v, fpscr);
|
||||
vfp_double_unpack(&vsn, vd);
|
||||
|
||||
md = vfp_single_to_doubleintern(state, m, fpscr);
|
||||
vfp_double_unpack(&vsm, md);
|
||||
|
||||
exceptions = vfp_double_multiply(&vsp, &vsn, &vsm, fpscr);
|
||||
if (negate & NEG_MULTIPLY)
|
||||
vsp.sign = vfp_sign_negate(vsp.sign);
|
||||
|
||||
v = vfp_get_float(state, sd);
|
||||
vd = vfp_single_to_doubleintern(state, v, fpscr);
|
||||
vfp_double_unpack(&vsn, vd);
|
||||
|
||||
if (negate & NEG_SUBTRACT)
|
||||
vsn.sign = vfp_sign_negate(vsn.sign);
|
||||
|
||||
exceptions |= vfp_double_add(&vsd, &vsn, &vsp, fpscr);
|
||||
|
||||
s64 debug = vfp_double_pack(&vsd);
|
||||
|
||||
return vfp_double_fcvtsinterncutting(state, sd, &vsd, fpscr);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Standard operations
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue