On Tue, Jun 24, 2014 at 02:32:46PM -0700, Richard Henderson wrote: > On 06/24/2014 02:24 PM, Al Viro wrote: > > Al, off to figure out the black magic TCG is using to generate calls... > > If you've a helper > > DEF_HELPER_1(halt, void, i64) > > then > > gen_helper_halt(...) > > will generate the tcg ops that result in the call.
Another fun issue: CVTTQ is both underreporting the overflow *AND* reports the wrong kind - FOV instead of IOV. * it misses reporting overflows for case when it *knows* that overflow will happen - the need to shift up by more than 63 bits. Trivially fixed, of course. There overflow cases leave wrong result as well - should be 0. * it also misses reporting overflows for case when value is in ranges 2^63..2^64-1 and -2^64+1..-2^63-1. And yes, it's asymmetric - 2^63 is an overflow, -2^63 isn't. * overflow is reported by float_raise(float_flag_overflow, &FP_STATUS). Wrong flag - it should be IOV, not FOV. And it should be set in FPCR regardless of the trap modifier (IOV, this VI thing is wrong - we should deal with that only when we generate a trap). * All overflow cases should raise INE as well. Could we steal bit 1 in float_exception_flags for IOV? It is (currently?) unused - enum { float_flag_invalid = 1, float_flag_divbyzero = 4, float_flag_overflow = 8, float_flag_underflow = 16, float_flag_inexact = 32, float_flag_input_denormal = 64, float_flag_output_denormal = 128 }; That would allow to deal with that crap nicely - we could have it raise the new flag, then have helper_fp_exc_raise_... for default trap mode mask it out (and yes, we need to set FPCR flags in default mode, as well as /U and /V - confirmed by direct experiment *and* by TFM). If we can't... well, we could put that flag separately, but it would be more unpleasant. Folks?