On Mon, 24 Oct 2011, Ramana Radhakrishnan wrote: > That is correct - they round towards nearest if converting from > integer to floating point and round towards zero if converting in the > reverse direction. !flag_rounding_math should be the case at the very > least. I'm not yet convinced that you can get away without a check for > flag_unsafe_math_optimizations because at the very least input > denormals are flushed to zero and hence the inexact bits won't be set. > Thus are we completely compliant when we allow this by default ?
I only commented on the conversion from integers to floating point, which is supposed to follow the current rounding mode. Conversions from floating point to integer always round towards zero in C, and I believe the standard RTL patterns do that as well. It's left unspecified in C99 and C1X Annex F whether "inexact" is raised for values where the integer part is within the range of the integer type but the conversion is inexact, which should cover flushing denormals to zero - so you may not need to check any flags on the conversions to integer if that's the only issue. -- Joseph S. Myers jos...@codesourcery.com