On 5/3/20 5:41 PM, 罗勇刚(Yonggang Luo) wrote: > > > On Mon, May 4, 2020 at 7:40 AM BALATON Zoltan <bala...@eik.bme.hu > <mailto:bala...@eik.bme.hu>> wrote: > > Hello, > > On Mon, 4 May 2020, 罗勇刚(Yonggang Luo) wrote: > > Hello Richard, Can you have a look at the following patch, and was that > are > > the right direction? > > Formatting of the patch is broken by your mailer, try sending it with > something that does not change it otherwise it's a bit hard to read. > > Richard suggested to add an assert to check the fp_status is correctly > cleared in place of helper_reset_fpstatus first for debugging so you could > change the helper accordingly before deleting it and run a few tests to > verify it still works. You'll need get some tests and benchmarks working > to be able to verify your changes that's why I've said that would be step > 0. If you checked that it still produces the same results and the assert > does not trigger then you can remove the helper. > > That's what I need help, > 1. How to write a assert to replace helper_reset_fpstatus . > just directly assert? or something else
You can't place the assert where helper_reset_fpstatus was. You need to place it in each of the helpers, like helper_fadd, that previously has a call to helper_reset_fpstatus preceeding it. The assert should be placed before the first floatN_op call that uses env->fp_status. E.g. float64 helper_fadd(CPUPPCState *env, float64 arg1, float64 arg2) { float64 ret; int status; status = get_float_exception_flags(&env->fp_status); assert(status == 0); ret = float64_add(arg1, arg2, &env->fp_status); status = get_float_exception_flags(&env->fp_status); if (unlikely(status & float_flag_invalid)) { float_invalid_op_addsub(env, 1, GETPC(), float64_classify(arg1) | float64_classify(arg2)); } return ret; } r~