From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51471) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cgGY6-0007st-9h for qemu-devel@nongnu.org; Tue, 21 Feb 2017 14:56:35 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cgGY1-0002Yh-CR for qemu-devel@nongnu.org; Tue, 21 Feb 2017 14:56:34 -0500 Sender: Richard Henderson References: <1487585521-19445-1-git-send-email-nikunj@linux.vnet.ibm.com> <1487585521-19445-8-git-send-email-nikunj@linux.vnet.ibm.com> <165844eb-e94c-1955-2fe3-59f0a3931094@twiddle.net> <878tozdhe4.fsf@abhimanyu.i-did-not-set--mail-host-address--so-tickle-me> From: Richard Henderson Message-ID: Date: Wed, 22 Feb 2017 06:56:17 +1100 MIME-Version: 1.0 In-Reply-To: <878tozdhe4.fsf@abhimanyu.i-did-not-set--mail-host-address--so-tickle-me> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v1 07/10] target/ppc: update ov/ov32 for nego List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Nikunj A Dadhania , qemu-ppc@nongnu.org, david@gibson.dropbear.id.au Cc: qemu-devel@nongnu.org, bharata@linux.vnet.ibm.com On 02/21/2017 08:26 PM, Nikunj A Dadhania wrote: > Richard Henderson writes: > >> On 02/20/2017 09:11 PM, Nikunj A Dadhania wrote: >>> For 64-bit mode if the register RA contains 0x8000_0000_0000_0000, OV >>> and OV32 are set to 1. >>> >>> For 32-bit mode if the register RA contains 0x8000_0000, OV and OV32 are >>> set to 1. >>> >>> Use the tcg-ops for negation (neg_tl) and drop gen_op_arith_neg() as >>> nego was the last user. >>> >>> Signed-off-by: Nikunj A Dadhania >> @@ -1488,7 +1480,20 @@ static void gen_neg(DisasContext *ctx) >>> >>> static void gen_nego(DisasContext *ctx) >>> { >>> - gen_op_arith_neg(ctx, 1); >>> + TCGv t0 = tcg_temp_new(); >>> + TCGv zero = tcg_const_tl(0); >>> + >>> + if (NARROW_MODE(ctx)) { >>> + tcg_gen_xori_tl(t0, cpu_gpr[rA(ctx->opcode)], INT32_MIN); >>> + } else { >>> + tcg_gen_xori_tl(t0, cpu_gpr[rA(ctx->opcode)], (target_ulong)INT64_MIN); >>> + } >>> + >>> + tcg_gen_setcond_tl(TCG_COND_EQ, cpu_ov, t0, zero); >>> + tcg_gen_mov_tl(cpu_ov32, cpu_ov); >>> + tcg_gen_neg_tl(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)]); >>> + tcg_temp_free(t0); >>> + tcg_temp_free(zero); >>> } >> >> Again, you're forgetting "nego.". Don't try to simplify from gen_op_arith_subf >> by hand. > > The reason of the simplification was the interpretation of ov and ov32. > I will add a code to compute the Rc. Why do you believe that the computation for overflow is different between neg and subf? r~