fixed floats in printf in linux59k platform

problem was implementation of fint & fintrz floating point ops in m68kfpu.c
Both these ops truncated the integer to 32 bits instead of leaving it as an extended precision floating point number

Changed the implementation to use 64 bit ints instead of 32 bit ints.
This commit is contained in:
tevorbl 2020-06-01 20:53:29 +01:00
parent e5da3227d9
commit 04fe0aa53e

View file

@ -967,7 +967,7 @@ static void WRITE_EA_64(int ea, uint64 data)
m68ki_write_32(ea+4, (uint32)(data)); m68ki_write_32(ea+4, (uint32)(data));
break; break;
} }
default: fatalerror("M68kFPU: WRITE_EA_32: unhandled mode %d, reg %d at %08X\n", mode, reg, REG_PC); default: fatalerror("M68kFPU: WRITE_EA_64: unhandled mode %d, reg %d at %08X\n", mode, reg, REG_PC);
} }
break; break;
} }
@ -1224,18 +1224,18 @@ static void fpgen_rm_reg(uint16 w2)
} }
case 0x01: // Fsint case 0x01: // Fsint
{ {
sint32 temp; sint64 temp;
temp = floatx80_to_int32(source); temp = floatx80_to_int64(source);
REG_FP[dst] = int32_to_floatx80(temp); REG_FP[dst] = int64_to_floatx80(temp);
SET_CONDITION_CODES(REG_FP[dst]); // JFF needs update condition codes SET_CONDITION_CODES(REG_FP[dst]); // JFF needs update condition codes
break; break;
} }
case 0x03: // FsintRZ case 0x03: // FsintRZ
{ {
sint32 temp; sint64 temp;
temp = floatx80_to_int32_round_to_zero(source); temp = floatx80_to_int64_round_to_zero(source);
REG_FP[dst] = int32_to_floatx80(temp); REG_FP[dst] = int64_to_floatx80(temp);
SET_CONDITION_CODES(REG_FP[dst]); // JFF needs update condition codes SET_CONDITION_CODES(REG_FP[dst]); // JFF needs update condition codes
break; break;
} }
case 0x04: // FSQRT case 0x04: // FSQRT