void fp_init_softfloat(void)
{
float_status fsx = { 0 };
+
+ fsx.fpu_model = currprefs.fpu_model;
+ fs.fpu_model = currprefs.fpu_model;
+
set_floatx80_rounding_precision(80, &fsx);
set_float_rounding_mode(float_round_to_zero, &fsx);
if ( ( aExp == 0x7FFF && (uint64_t) ( aSig<<1 ) ) ||
( bExp == 0x7FFF && (uint64_t) ( bSig<<1 ) ) ) {
- return propagateFloatx80NaN( packFloatx80( 0, aExp, aSig ),
- packFloatx80( 0, bExp, bSig ), status );
+ // 68040 FCMP -NaN return N flag set
+ if (status->fpu_model == 68040)
+ return propagateFloatx80NaN( packFloatx80( aSign, aExp, aSig ),
+ packFloatx80( bSign, bExp, bSig ), status );
+ return propagateFloatx80NaN(packFloatx80(0, aExp, aSig),
+ packFloatx80(0, bExp, bSig), status);
}
if ( bExp < aExp ) return packFloatx80( aSign, 0x3FFF, LIT64( 0x8000000000000000 ) );