Fixed vfp issues
This commit is contained in:
		@@ -86,12 +86,12 @@ static union
 | 
			
		||||
} reg_conv;
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
printf_nothing (void *foo, ...)
 | 
			
		||||
printf_nothing (const char *foo, ...)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
cirrus_not_implemented (char *insn)
 | 
			
		||||
cirrus_not_implemented (const char *insn)
 | 
			
		||||
{
 | 
			
		||||
	fprintf (stderr, "Cirrus instruction '%s' not implemented.\n", insn);
 | 
			
		||||
	fprintf (stderr, "aborting!\n");
 | 
			
		||||
 
 | 
			
		||||
@@ -50,7 +50,7 @@
 | 
			
		||||
#define pr_info //printf
 | 
			
		||||
#define pr_debug //printf
 | 
			
		||||
 | 
			
		||||
static u32 fls(int x);
 | 
			
		||||
static u32 vfp_fls(int x);
 | 
			
		||||
#define do_div(n, base) {n/=base;}
 | 
			
		||||
 | 
			
		||||
/* From vfpinstr.h */
 | 
			
		||||
@@ -508,7 +508,7 @@ struct op {
 | 
			
		||||
	u32 flags;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static inline u32 fls(int x)
 | 
			
		||||
static u32 vfp_fls(int x)
 | 
			
		||||
{
 | 
			
		||||
	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)
 | 
			
		||||
{
 | 
			
		||||
	int bits = 31 - fls(vd->significand >> 32);
 | 
			
		||||
	int bits = 31 - vfp_fls(vd->significand >> 32);
 | 
			
		||||
	if (bits == 31)
 | 
			
		||||
		bits = 63 - fls(vd->significand);
 | 
			
		||||
		bits = 63 - vfp_fls(vd->significand);
 | 
			
		||||
 | 
			
		||||
	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;
 | 
			
		||||
	significand = vd->significand;
 | 
			
		||||
 | 
			
		||||
	shift = 32 - fls(significand >> 32);
 | 
			
		||||
	shift = 32 - vfp_fls(significand >> 32);
 | 
			
		||||
	if (shift == 32)
 | 
			
		||||
		shift = 64 - fls(significand);
 | 
			
		||||
		shift = 64 - vfp_fls(significand);
 | 
			
		||||
	if (shift) {
 | 
			
		||||
		exponent -= 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)
 | 
			
		||||
{
 | 
			
		||||
	int bits = 31 - fls(vs->significand);
 | 
			
		||||
	int bits = 31 - vfp_fls(vs->significand);
 | 
			
		||||
 | 
			
		||||
	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
 | 
			
		||||
	 * significant bit.
 | 
			
		||||
	 */
 | 
			
		||||
	shift = 32 - fls(significand);
 | 
			
		||||
	shift = 32 - vfp_fls(significand);
 | 
			
		||||
	if (shift < 32 && shift) {
 | 
			
		||||
		exponent -= shift;
 | 
			
		||||
		significand <<= shift;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user