mirror of
https://git.suyu.dev/suyu/suyu.git
synced 2024-11-29 23:06:23 -05: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
|
static u32
|
||||||
vfp_single_multiply_accumulate(ARMul_State* state, int sd, int sn, s32 m, u32 fpscr, u32 negate, const char *func)
|
vfp_single_multiply_accumulate(ARMul_State* state, int sd, int sn, s32 m, u32 fpscr, u32 negate, const char *func)
|
||||||
{
|
{
|
||||||
|
vfp_single vsd, vsp, vsn, vsm;
|
||||||
{
|
|
||||||
struct vfp_single vsd, vsp, vsn, vsm;
|
|
||||||
u32 exceptions;
|
u32 exceptions;
|
||||||
s32 v;
|
s32 v;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
v = vfp_get_float(state, sn);
|
v = vfp_get_float(state, sn);
|
||||||
pr_debug("VFP: s%u = %08x\n", sn, v);
|
pr_debug("VFP: s%u = %08x\n", sn, v);
|
||||||
vfp_single_unpack(&vsn, v);
|
vfp_single_unpack(&vsn, v);
|
||||||
|
@ -991,38 +987,6 @@ vfp_single_multiply_accumulate(ARMul_State* state, int sd, int sn, s32 m, u32 fp
|
||||||
exceptions |= vfp_single_add(&vsd, &vsn, &vsp, fpscr);
|
exceptions |= vfp_single_add(&vsd, &vsn, &vsp, fpscr);
|
||||||
|
|
||||||
return vfp_single_normaliseround(state, sd, &vsd, fpscr, exceptions, func);
|
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);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in a new issue