From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:49149) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TLg58-0006sx-5T for qemu-devel@nongnu.org; Tue, 09 Oct 2012 16:07:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TLg56-00028E-SU for qemu-devel@nongnu.org; Tue, 09 Oct 2012 16:07:10 -0400 Received: from mail-pb0-f45.google.com ([209.85.160.45]:51765) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TLg56-000281-L7 for qemu-devel@nongnu.org; Tue, 09 Oct 2012 16:07:08 -0400 Received: by mail-pb0-f45.google.com with SMTP id rp2so5641767pbb.4 for ; Tue, 09 Oct 2012 13:07:08 -0700 (PDT) Sender: Richard Henderson Message-ID: <507483E9.8010908@twiddle.net> Date: Tue, 09 Oct 2012 13:07:05 -0700 From: Richard Henderson MIME-Version: 1.0 References: <1349526621-13939-1-git-send-email-pbonzini@redhat.com> <1349526621-13939-12-git-send-email-pbonzini@redhat.com> In-Reply-To: <1349526621-13939-12-git-send-email-pbonzini@redhat.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 11/14] i386: convert gen_compute_eflags_c to TCG List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: qemu-devel@nongnu.org On 10/06/2012 05:30 AM, Paolo Bonzini wrote: > + case CC_OP_SUBB: > + case CC_OP_SUBW: > + case CC_OP_SUBL: > + case CC_OP_SUBQ: > + /* (DATA_TYPE)(CC_DST + CC_SRC) < (DATA_TYPE)CC_SRC */ > + size = (s->cc_op - CC_OP_ADDB) & 3; I guess the & 3 makes the result "just so happen" to be right, but I think the code would be more readable with "- SUBB" there. And the other cases of the same pattern below. > + case CC_OP_SBBB: > + case CC_OP_SBBW: > + case CC_OP_SBBL: > + case CC_OP_SBBQ: > + /* (DATA_TYPE)(CC_DST + CC_SRC + 1) <= (DATA_TYPE)CC_SRC */ > + size = (s->cc_op - CC_OP_ADDB) & 3; > + t1 = gen_ext_tl(cpu_tmp0, cpu_cc_src, size, false); > + if (t1 == reg && reg == cpu_cc_src) { > + tcg_gen_mov_tl(cpu_tmp0, cpu_cc_src); > + t1 = cpu_tmp0; > + } > + > + tcg_gen_add_tl(reg, cpu_cc_dst, cpu_cc_src); > + tcg_gen_addi_tl(reg, reg, 1); > + gen_extu(size, reg); > + t0 = reg; > + goto adc_sbb; > + > + case CC_OP_ADCB: > + case CC_OP_ADCW: > + case CC_OP_ADCL: > + case CC_OP_ADCQ: > + /* (DATA_TYPE)CC_DST <= (DATA_TYPE)CC_SRC */ > + size = (s->cc_op - CC_OP_ADDB) & 3; > + t1 = gen_ext_tl(cpu_tmp0, cpu_cc_src, size, false); > + t0 = gen_ext_tl(reg, cpu_cc_dst, size, false); > + adc_sbb: > + tcg_gen_setcond_tl(inv ? TCG_COND_GTU : TCG_COND_LEU, reg, t0, t1); > + return; There's no point in handling these, because you can never see them assigned to s->cc_op. The ADC/SBB translators always set CC_OP_DYNAMIC after dynamically selecting CC_OP_ADD or CC_OP_ADC based on the carry-in. > + default: > + abort(); Better to just treat unlisted codes as dynamic? I.e. default: /* Including CC_OP_DYNAMIC */ gen_compute_eflags(s); /* FALLTHRU */ case CC_OP_EFLAGS: ... All that said, the patch as written is correct. Reviewed-by: Richard Henderson r~