On 3 July 2014 23:47, Al Viro <v...@zeniv.linux.org.uk> wrote: > How can that be correct? Suppose a = b = 0. We get > tcg_gen_eqv_i64(tmp, va, vb); -> tmp = -1 > tcg_gen_mov_i64(tmp2, va); -> tmp2 = 0 > tcg_gen_add_i64(vc, va, vb); -> c = 0 > tcg_gen_xor_i64(tmp2, tmp2, vc);-> tmp2 = 0 > tcg_gen_and_i64(tmp, tmp, tmp2);-> tmp = -1
tmp2 here is 0, so the result of this AND is 0, not -1... > tcg_gen_shri_i64(tmp, tmp, 63); -> tmp = 1 so tmp = 0 > tcg_gen_movi_i64(tmp2, 0); -> tmp2 = 0 > gen_helper_check_overflow(cpu_env, tmp, tmp2); -> not equal, overflow. and tmp == tmp2, no overflow. thanks -- PMM