From nobody Sat Feb 7 15:44:26 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1536112311553806.5061037428827; Tue, 4 Sep 2018 18:51:51 -0700 (PDT) Received: from localhost ([::1]:53413 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fxMz0-00055T-9F for importer@patchew.org; Tue, 04 Sep 2018 21:51:50 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57966) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fxMsG-000691-VX for qemu-devel@nongnu.org; Tue, 04 Sep 2018 21:44:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fxMsB-00072n-FJ for qemu-devel@nongnu.org; Tue, 04 Sep 2018 21:44:49 -0400 Received: from mail-lf1-x12c.google.com ([2a00:1450:4864:20::12c]:37045) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fxMs5-0006vx-V4 for qemu-devel@nongnu.org; Tue, 04 Sep 2018 21:44:43 -0400 Received: by mail-lf1-x12c.google.com with SMTP id j8-v6so4584663lfb.4 for ; Tue, 04 Sep 2018 18:44:41 -0700 (PDT) Received: from octofox.cadence.com (jcmvbkbc-1-pt.tunnel.tserv24.sto1.ipv6.he.net. [2001:470:27:1fa::2]) by smtp.gmail.com with ESMTPSA id g10-v6sm59337lfl.11.2018.09.04.18.44.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 04 Sep 2018 18:44:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=CpIUH9K0ube5pDZgyCxY8SSptNK/oNaRaf0EE4pB0Tg=; b=NaxkIqzpcwKh3h7boXIvhyt9TkDADmBRKj2ElVfUB+wJQuel/vfHYCmLSW7drEe+7Y H/NKiTbqhrKv1o2GMf6JOu+aowQ/CFTWfwqf6pLQWR1XpDV/PTUdoC73QNbhIR/EHXR8 8aE2JQRyxq08T3N5Z37PY/g+ycGwvJDBbKVsow1yNfOjXd3xUNyGAcOsVjqg9x1B5Z9Y iJzNc+UKdUhOOEJRsDNVm6s4LGrg9CP0hRlkkFh7tPMpMtfwLOB5jIb3LnWnDzxydVYZ Oo3SXOg2XNR2yADZokMN+m7InWnCr7cnzYpe7gjyGtY3ofzhlUMcnXOg1G7jImFNgnHW qaZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=CpIUH9K0ube5pDZgyCxY8SSptNK/oNaRaf0EE4pB0Tg=; b=qCzIOv5Z8BQHeZi/wpjQPXF4CfHDRijajxDjPDy00gEWpEnDCM3w6GyMPNTwwDGiGZ gzZ7AHUGmrKfklcV6wLZuyLHTwgJq8alc+9OvZhHqHXkWww5bqFMGP+wb1phfR7l/Ggw MfXoa18MdrB+EEoSblgJZNwnXfJMyd5inRYnHx1sG9yXg1UBMZlVeV4kUe4PD75cftOp XU6WTuZrUrzzewGMyChDBnDj3vwFa6tcyQ3Xyb92ExrHEFYHBWU+j8G7zk7ksbfx2er9 00SD+zRg4r2e1Td/cY9T6aMjUjYrGKWDLY9BLDT9U2rLwvIzL+1U7BpEn3IhX3gMnBjK meIQ== X-Gm-Message-State: APzg51BVef22daRJwPW9NukIAOkImJFKDA1DvNTZSgC4nYglROkFpTBS 78xiWgdH/EYoK84MfRL6Le7/8FcF1/Y= X-Google-Smtp-Source: ANB0Vdb/5IrlbYZqJLyeT8eQrpLkgH5NuPAf3Dwwvt4lsSDMRVnI2v6K4lm0br8hyf068VO6DmtGqg== X-Received: by 2002:a19:5517:: with SMTP id n23-v6mr11988761lfe.101.1536111879910; Tue, 04 Sep 2018 18:44:39 -0700 (PDT) From: Max Filippov To: qemu-devel@nongnu.org Date: Tue, 4 Sep 2018 18:43:46 -0700 Message-Id: <20180905014352.970-10-jcmvbkbc@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180905014352.970-1-jcmvbkbc@gmail.com> References: <20180905014352.970-1-jcmvbkbc@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::12c Subject: [Qemu-devel] [PATCH 09/15] target/xtensa: extract test for division by zero X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Max Filippov Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDMRC_1 RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" - mark quos/quou/rems/remu instructions; - drop parameter 0 from the translate_quou and split translate_remu from it; - put test for division by zero exception right after the coprocessor exception test; Signed-off-by: Max Filippov --- target/xtensa/translate.c | 53 +++++++++++++++++++++++++++----------------= ---- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/target/xtensa/translate.c b/target/xtensa/translate.c index eb123f68b364..f8b9f65f7102 100644 --- a/target/xtensa/translate.c +++ b/target/xtensa/translate.c @@ -933,6 +933,15 @@ static TCGv_i32 gen_mac16_m(TCGv_i32 v, bool hi, bool = is_unsigned) return m; } =20 +static void gen_zero_check(DisasContext *dc, const uint32_t arg[]) +{ + TCGLabel *label =3D gen_new_label(); + + tcg_gen_brcondi_i32(TCG_COND_NE, cpu_R[arg[2]], 0, label); + gen_exception_cause(dc, INTEGER_DIVIDE_BY_ZERO_CAUSE); + gen_set_label(label); +} + static inline unsigned xtensa_op0_insn_len(DisasContext *dc, uint8_t op0) { return xtensa_isa_length_from_chars(dc->config->isa, &op0); @@ -1092,6 +1101,14 @@ static void disas_xtensa_insn(CPUXtensaState *env, D= isasContext *dc) return; } =20 + if (op_flags & XTENSA_OP_DIVIDE_BY_ZERO) { + for (slot =3D 0; slot < slots; ++slot) { + if (slot_prop[slot].ops->op_flags & XTENSA_OP_DIVIDE_BY_ZERO) { + gen_zero_check(dc, slot_prop[slot].arg); + } + } + } + for (slot =3D 0; slot < slots; ++slot) { XtensaOpcodeOps *ops =3D slot_prop[slot].ops; =20 @@ -2013,23 +2030,12 @@ static void translate_ptlb(DisasContext *dc, const = uint32_t arg[], #endif } =20 -static void gen_zero_check(DisasContext *dc, const uint32_t arg[]) -{ - TCGLabel *label =3D gen_new_label(); - - tcg_gen_brcondi_i32(TCG_COND_NE, cpu_R[arg[2]], 0, label); - gen_exception_cause(dc, INTEGER_DIVIDE_BY_ZERO_CAUSE); - gen_set_label(label); -} - static void translate_quos(DisasContext *dc, const uint32_t arg[], const uint32_t par[]) { TCGLabel *label1 =3D gen_new_label(); TCGLabel *label2 =3D gen_new_label(); =20 - gen_zero_check(dc, arg); - tcg_gen_brcondi_i32(TCG_COND_NE, cpu_R[arg[1]], 0x80000000, label1); tcg_gen_brcondi_i32(TCG_COND_NE, cpu_R[arg[2]], 0xffffffff, @@ -2051,14 +2057,8 @@ static void translate_quos(DisasContext *dc, const u= int32_t arg[], static void translate_quou(DisasContext *dc, const uint32_t arg[], const uint32_t par[]) { - gen_zero_check(dc, arg); - if (par[0]) { - tcg_gen_divu_i32(cpu_R[arg[0]], - cpu_R[arg[1]], cpu_R[arg[2]]); - } else { - tcg_gen_remu_i32(cpu_R[arg[0]], - cpu_R[arg[1]], cpu_R[arg[2]]); - } + tcg_gen_divu_i32(cpu_R[arg[0]], + cpu_R[arg[1]], cpu_R[arg[2]]); } =20 static void translate_read_impwire(DisasContext *dc, const uint32_t arg[], @@ -2068,6 +2068,13 @@ static void translate_read_impwire(DisasContext *dc,= const uint32_t arg[], tcg_gen_movi_i32(cpu_R[arg[0]], 0); } =20 +static void translate_remu(DisasContext *dc, const uint32_t arg[], + const uint32_t par[]) +{ + tcg_gen_remu_i32(cpu_R[arg[0]], + cpu_R[arg[1]], cpu_R[arg[2]]); +} + static void translate_rer(DisasContext *dc, const uint32_t arg[], const uint32_t par[]) { @@ -3457,11 +3464,12 @@ static const XtensaOpcodeOps core_ops[] =3D { .name =3D "quos", .translate =3D translate_quos, .par =3D (const uint32_t[]){true}, + .op_flags =3D XTENSA_OP_DIVIDE_BY_ZERO, .windowed_register_op =3D 0x7, }, { .name =3D "quou", .translate =3D translate_quou, - .par =3D (const uint32_t[]){true}, + .op_flags =3D XTENSA_OP_DIVIDE_BY_ZERO, .windowed_register_op =3D 0x7, }, { .name =3D "rdtlb0", @@ -3483,11 +3491,12 @@ static const XtensaOpcodeOps core_ops[] =3D { .name =3D "rems", .translate =3D translate_quos, .par =3D (const uint32_t[]){false}, + .op_flags =3D XTENSA_OP_DIVIDE_BY_ZERO, .windowed_register_op =3D 0x7, }, { .name =3D "remu", - .translate =3D translate_quou, - .par =3D (const uint32_t[]){false}, + .translate =3D translate_remu, + .op_flags =3D XTENSA_OP_DIVIDE_BY_ZERO, .windowed_register_op =3D 0x7, }, { .name =3D "rer", --=20 2.11.0