mirror of
https://gitlab.com/suyu-emu/suyu.git
synced 2024-03-15 23:15:44 +00:00
Fixed vfp issues
This commit is contained in:
parent
c1394650ff
commit
c396a5ac57
|
@ -86,12 +86,12 @@ static union
|
||||||
} reg_conv;
|
} reg_conv;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
printf_nothing (void *foo, ...)
|
printf_nothing (const char *foo, ...)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
cirrus_not_implemented (char *insn)
|
cirrus_not_implemented (const char *insn)
|
||||||
{
|
{
|
||||||
fprintf (stderr, "Cirrus instruction '%s' not implemented.\n", insn);
|
fprintf (stderr, "Cirrus instruction '%s' not implemented.\n", insn);
|
||||||
fprintf (stderr, "aborting!\n");
|
fprintf (stderr, "aborting!\n");
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
#define pr_info //printf
|
#define pr_info //printf
|
||||||
#define pr_debug //printf
|
#define pr_debug //printf
|
||||||
|
|
||||||
static u32 fls(int x);
|
static u32 vfp_fls(int x);
|
||||||
#define do_div(n, base) {n/=base;}
|
#define do_div(n, base) {n/=base;}
|
||||||
|
|
||||||
/* From vfpinstr.h */
|
/* From vfpinstr.h */
|
||||||
|
@ -508,7 +508,7 @@ struct op {
|
||||||
u32 flags;
|
u32 flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline u32 fls(int x)
|
static u32 vfp_fls(int x)
|
||||||
{
|
{
|
||||||
int r = 32;
|
int r = 32;
|
||||||
|
|
||||||
|
|
|
@ -69,9 +69,9 @@ static void vfp_double_dump(const char *str, struct vfp_double *d)
|
||||||
|
|
||||||
static void vfp_double_normalise_denormal(struct vfp_double *vd)
|
static void vfp_double_normalise_denormal(struct vfp_double *vd)
|
||||||
{
|
{
|
||||||
int bits = 31 - fls(vd->significand >> 32);
|
int bits = 31 - vfp_fls(vd->significand >> 32);
|
||||||
if (bits == 31)
|
if (bits == 31)
|
||||||
bits = 63 - fls(vd->significand);
|
bits = 63 - vfp_fls(vd->significand);
|
||||||
|
|
||||||
vfp_double_dump("normalise_denormal: in", vd);
|
vfp_double_dump("normalise_denormal: in", vd);
|
||||||
|
|
||||||
|
@ -108,9 +108,9 @@ u32 vfp_double_normaliseround(ARMul_State* state, int dd, struct vfp_double *vd,
|
||||||
exponent = vd->exponent;
|
exponent = vd->exponent;
|
||||||
significand = vd->significand;
|
significand = vd->significand;
|
||||||
|
|
||||||
shift = 32 - fls(significand >> 32);
|
shift = 32 - vfp_fls(significand >> 32);
|
||||||
if (shift == 32)
|
if (shift == 32)
|
||||||
shift = 64 - fls(significand);
|
shift = 64 - vfp_fls(significand);
|
||||||
if (shift) {
|
if (shift) {
|
||||||
exponent -= shift;
|
exponent -= shift;
|
||||||
significand <<= shift;
|
significand <<= shift;
|
||||||
|
|
|
@ -69,7 +69,7 @@ static void vfp_single_dump(const char *str, struct vfp_single *s)
|
||||||
|
|
||||||
static void vfp_single_normalise_denormal(struct vfp_single *vs)
|
static void vfp_single_normalise_denormal(struct vfp_single *vs)
|
||||||
{
|
{
|
||||||
int bits = 31 - fls(vs->significand);
|
int bits = 31 - vfp_fls(vs->significand);
|
||||||
|
|
||||||
vfp_single_dump("normalise_denormal: in", vs);
|
vfp_single_dump("normalise_denormal: in", vs);
|
||||||
|
|
||||||
|
@ -111,7 +111,7 @@ u32 vfp_single_normaliseround(ARMul_State* state, int sd, struct vfp_single *vs,
|
||||||
* bit 31, so we have VFP_SINGLE_LOW_BITS + 1 below the least
|
* bit 31, so we have VFP_SINGLE_LOW_BITS + 1 below the least
|
||||||
* significant bit.
|
* significant bit.
|
||||||
*/
|
*/
|
||||||
shift = 32 - fls(significand);
|
shift = 32 - vfp_fls(significand);
|
||||||
if (shift < 32 && shift) {
|
if (shift < 32 && shift) {
|
||||||
exponent -= shift;
|
exponent -= shift;
|
||||||
significand <<= shift;
|
significand <<= shift;
|
||||||
|
|
Loading…
Reference in a new issue