[Tom, this is exactly what you need to fix FRIN rounding.] On 12/31/2013 05:35 AM, Peter Maydell wrote: > - float_round_to_zero = 3 > + float_round_to_zero = 3, > + float_round_ties_away = 4, I'm not keen on the name. Does anyone else think float_round_nearest_inf is a better name? > +++ b/fpu/softfloat.c > @@ -107,7 +107,7 @@ static int32 roundAndPackInt32( flag zSign, uint64_t absZ STATUS_PARAM) > roundingMode = STATUS(float_rounding_mode); > roundNearestEven = ( roundingMode == float_round_nearest_even ); > roundIncrement = 0x40; > - if ( ! roundNearestEven ) { > + if (!roundNearestEven && roundingMode != float_round_ties_away) { > if ( roundingMode == float_round_to_zero ) { > roundIncrement = 0; > } This whole section of code is now a mess. I know you're looking for minimal changes here, but perhaps I can convince you that switch (roundingMode) { case float_round_nearest_even: case float_round_ties_away: roundIncrement = 0x40; break; case float_round_to_zero: roundIncrement = 0; break; case float_round_up: roundIncrement = zSign ? 0 : 0x7f; break; case float_round_down: roundIncrement = zSign ? 0x7f : 0; break; default: abort(); } is easier to follow? Otherwise, I don't see anything actually wrong in the patch. r~ _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm