From nobody Tue Feb 10 23:14:17 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1569526109; cv=none; d=zoho.com; s=zohoarc; b=azDzO3mUpCwWya1HttmI+eyc28rCLIT0wYT+FydKH6rdcEpUsdsVvDlnvYjodLXfafZxbZjdQF7gXOYClNUpu/i0JiWS49ncpy+G3g8E+IaN84vBQUeDJwtFvuM+uwbAhwNoeYdpQVcQpgQxj4sURo9swkqCeKdXHctRaWED48s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569526109; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=NaTJBqWfjWKfp4awJwz6deUzkUZ8ulRPRZqVrix3PLk=; b=TrnTb1kVRakOCy2WHMvixbXRABgZ7g9aZdyMcbEB17HoYyk6PSOF42ZfqL9dUE4+7koZ/7iI0yJGMESTRPN0Vh8mbTSgXiH0z6zpF3x0c5GyHaOsovGhJ/uozBa1tX4QfIK/nGTk5QtwgYX9PtGVA0YNY+ztetbyIRtjvqAhkWY= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1569526109237915.784564030122; Thu, 26 Sep 2019 12:28:29 -0700 (PDT) Received: from localhost ([::1]:43530 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iDZRD-00008G-Rw for importer@patchew.org; Thu, 26 Sep 2019 15:28:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47745) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iDYz2-0000lQ-SS for qemu-devel@nongnu.org; Thu, 26 Sep 2019 14:59:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iDYyz-0007yc-Nr for qemu-devel@nongnu.org; Thu, 26 Sep 2019 14:59:20 -0400 Received: from mail.ilande.co.uk ([46.43.2.167]:40386 helo=mail.default.ilande.uk0.bigv.io) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iDYyz-0007Ip-EM; Thu, 26 Sep 2019 14:59:17 -0400 Received: from host86-138-245-63.range86-138.btcentralplus.com ([86.138.245.63] helo=kentang.home) by mail.default.ilande.uk0.bigv.io with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.89) (envelope-from ) id 1iDYyI-0001em-3J; Thu, 26 Sep 2019 19:58:34 +0100 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, qemu-ppc@nongnu.org, pc@us.ibm.com, david@gibson.dropbear.id.au Date: Thu, 26 Sep 2019 19:57:59 +0100 Message-Id: <20190926185801.11176-6-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190926185801.11176-1-mark.cave-ayland@ilande.co.uk> References: <20190926185801.11176-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.138.245.63 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v2 5/7] target/ppc: change struct PPC_DFP decimal storage from uint64[2] to ppc_vsr_t X-SA-Exim-Version: 4.2.1 (built Tue, 02 Aug 2016 21:08:31 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.uk0.bigv.io) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 46.43.2.167 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" There are several places in dfp_helper.c that access the decimal number representations in struct PPC_DFP via HI_IDX and LO_IDX defines which are s= et at the top of dfp_helper.c according to the host endian. However we can instead switch to using ppc_vsr_t for decimal numbers and th= en make subsequent use of the existing VsrD() macros to access the correct element regardless of host endian. Note that 64-bit decimals are stored in = the LSB of ppc_vsr_t (equivalent to VsrD(1)). Signed-off-by: Mark Cave-Ayland Reviewed-by: Richard Henderson --- target/ppc/dfp_helper.c | 210 +++++++++++++++++++++------------------- 1 file changed, 108 insertions(+), 102 deletions(-) diff --git a/target/ppc/dfp_helper.c b/target/ppc/dfp_helper.c index 52b123b16a..ed437f97da 100644 --- a/target/ppc/dfp_helper.c +++ b/target/ppc/dfp_helper.c @@ -36,31 +36,31 @@ #define LO_IDX 0 #endif =20 -static void get_dfp64(uint64_t *dst, ppc_fprp_t *dfp) +static void get_dfp64(ppc_vsr_t *dst, ppc_fprp_t *dfp) { - dst[0] =3D dfp->VsrD(0); + dst->VsrD(1) =3D dfp->VsrD(0); } =20 -static void get_dfp128(uint64_t *dst, ppc_fprp_t *dfp) +static void get_dfp128(ppc_vsr_t *dst, ppc_fprp_t *dfp) { - dst[HI_IDX] =3D dfp[0].VsrD(0); - dst[LO_IDX] =3D dfp[1].VsrD(0); + dst->VsrD(0) =3D dfp[0].VsrD(0); + dst->VsrD(1) =3D dfp[1].VsrD(0); } =20 -static void set_dfp64(ppc_fprp_t *dfp, uint64_t *src) +static void set_dfp64(ppc_fprp_t *dfp, ppc_vsr_t *src) { - dfp->VsrD(0) =3D src[0]; + dfp->VsrD(0) =3D src->VsrD(1); } =20 -static void set_dfp128(ppc_fprp_t *dfp, uint64_t *src) +static void set_dfp128(ppc_fprp_t *dfp, ppc_vsr_t *src) { - dfp[0].VsrD(0) =3D src[HI_IDX]; - dfp[1].VsrD(0) =3D src[LO_IDX]; + dfp[0].VsrD(0) =3D src->VsrD(0); + dfp[1].VsrD(0) =3D src->VsrD(1); } =20 struct PPC_DFP { CPUPPCState *env; - uint64_t t64[2], a64[2], b64[2]; + ppc_vsr_t vt, va, vb; decNumber t, a, b; decContext context; uint8_t crbf; @@ -151,18 +151,18 @@ static void dfp_prepare_decimal64(struct PPC_DFP *dfp= , ppc_fprp_t *a, dfp->env =3D env; =20 if (a) { - get_dfp64(dfp->a64, a); - decimal64ToNumber((decimal64 *)dfp->a64, &dfp->a); + get_dfp64(&dfp->va, a); + decimal64ToNumber((decimal64 *)&dfp->va.VsrD(1), &dfp->a); } else { - dfp->a64[0] =3D 0; + dfp->va.VsrD(1) =3D 0; decNumberZero(&dfp->a); } =20 if (b) { - get_dfp64(dfp->b64, b); - decimal64ToNumber((decimal64 *)dfp->b64, &dfp->b); + get_dfp64(&dfp->vb, b); + decimal64ToNumber((decimal64 *)&dfp->vb.VsrD(1), &dfp->b); } else { - dfp->b64[0] =3D 0; + dfp->vb.VsrD(1) =3D 0; decNumberZero(&dfp->b); } } @@ -175,30 +175,30 @@ static void dfp_prepare_decimal128(struct PPC_DFP *df= p, ppc_fprp_t *a, dfp->env =3D env; =20 if (a) { - get_dfp128(dfp->a64, a); - decimal128ToNumber((decimal128 *)dfp->a64, &dfp->a); + get_dfp128(&dfp->va, a); + decimal128ToNumber((decimal128 *)&dfp->va, &dfp->a); } else { - dfp->a64[0] =3D dfp->a64[1] =3D 0; + dfp->va.VsrD(0) =3D dfp->va.VsrD(1) =3D 0; decNumberZero(&dfp->a); } =20 if (b) { - get_dfp128(dfp->b64, b); - decimal128ToNumber((decimal128 *)dfp->b64, &dfp->b); + get_dfp128(&dfp->vb, b); + decimal128ToNumber((decimal128 *)&dfp->vb, &dfp->b); } else { - dfp->b64[0] =3D dfp->b64[1] =3D 0; + dfp->vb.VsrD(0) =3D dfp->vb.VsrD(1) =3D 0; decNumberZero(&dfp->b); } } =20 static void dfp_finalize_decimal64(struct PPC_DFP *dfp) { - decimal64FromNumber((decimal64 *)&dfp->t64, &dfp->t, &dfp->context); + decimal64FromNumber((decimal64 *)&dfp->vt.VsrD(1), &dfp->t, &dfp->cont= ext); } =20 static void dfp_finalize_decimal128(struct PPC_DFP *dfp) { - decimal128FromNumber((decimal128 *)&dfp->t64, &dfp->t, &dfp->context); + decimal128FromNumber((decimal128 *)&dfp->vt, &dfp->t, &dfp->context); } =20 static void dfp_set_FPSCR_flag(struct PPC_DFP *dfp, uint64_t flag, @@ -435,9 +435,9 @@ void helper_##op(CPUPPCState *env, ppc_fprp_t *t, ppc_f= prp_t *a, \ dfp_finalize_decimal##size(&dfp); = \ postprocs(&dfp); = \ if (size =3D=3D 64) { = \ - set_dfp64(t, dfp.t64); = \ + set_dfp64(t, &dfp.vt); = \ } else if (size =3D=3D 128) { = \ - set_dfp128(t, dfp.t64); = \ + set_dfp128(t, &dfp.vt); = \ } = \ } =20 @@ -647,12 +647,12 @@ uint32_t helper_##op(CPUPPCState *env, ppc_fprp_t *a,= ppc_fprp_t *b) \ { \ struct PPC_DFP dfp; \ unsigned k; \ - uint64_t a64; \ + ppc_vsr_t va; \ \ dfp_prepare_decimal##size(&dfp, 0, b, env); \ \ - get_dfp64(&a64, a); \ - k =3D a64 & 0x3F; = \ + get_dfp64(&va, a); \ + k =3D va.VsrD(1) & 0x3F; = \ \ if (unlikely(decNumberIsSpecial(&dfp.b))) { \ dfp.crbf =3D 1; = \ @@ -755,9 +755,9 @@ void helper_##op(CPUPPCState *env, ppc_fprp_t *t, ppc_f= prp_t *b, \ QUA_PPs(&dfp); \ \ if (size =3D=3D 64) { = \ - set_dfp64(t, dfp.t64); \ + set_dfp64(t, &dfp.vt); \ } else if (size =3D=3D 128) { = \ - set_dfp128(t, dfp.t64); \ + set_dfp128(t, &dfp.vt); \ } \ } =20 @@ -777,9 +777,9 @@ void helper_##op(CPUPPCState *env, ppc_fprp_t *t, ppc_f= prp_t *a, \ QUA_PPs(&dfp); \ \ if (size =3D=3D 64) { = \ - set_dfp64(t, dfp.t64); \ + set_dfp64(t, &dfp.vt); \ } else if (size =3D=3D 128) { = \ - set_dfp128(t, dfp.t64); \ + set_dfp128(t, &dfp.vt); \ } \ } =20 @@ -845,23 +845,23 @@ void helper_##op(CPUPPCState *env, ppc_fprp_t *t, ppc= _fprp_t *a, \ ppc_fprp_t *b, uint32_t rmc) \ { \ struct PPC_DFP dfp; \ - uint64_t a64; \ + ppc_vsr_t va; \ int32_t ref_sig; \ int32_t xmax =3D ((size) =3D=3D 64) ? 369 : 6111; = \ \ dfp_prepare_decimal##size(&dfp, 0, b, env); \ \ - get_dfp64(&a64, a); \ - ref_sig =3D a64 & 0x3f; \ + get_dfp64(&va, a); \ + ref_sig =3D va.VsrD(1) & 0x3f; \ \ _dfp_reround(rmc, ref_sig, xmax, &dfp); \ dfp_finalize_decimal##size(&dfp); \ QUA_PPs(&dfp); \ \ if (size =3D=3D 64) { = \ - set_dfp64(t, dfp.t64); \ + set_dfp64(t, &dfp.vt); \ } else if (size =3D=3D 128) { = \ - set_dfp128(t, dfp.t64); \ + set_dfp128(t, &dfp.vt); \ } \ } =20 @@ -882,9 +882,9 @@ void helper_##op(CPUPPCState *env, ppc_fprp_t *t, ppc_f= prp_t *b, \ postprocs(&dfp); = \ = \ if (size =3D=3D 64) { = \ - set_dfp64(t, dfp.t64); = \ + set_dfp64(t, &dfp.vt); = \ } else if (size =3D=3D 128) { = \ - set_dfp128(t, dfp.t64); = \ + set_dfp128(t, &dfp.vt); = \ } = \ } =20 @@ -910,39 +910,39 @@ DFP_HELPER_RINT(drintnq, RINTN_PPs, 128) void helper_dctdp(CPUPPCState *env, ppc_fprp_t *t, ppc_fprp_t *b) { struct PPC_DFP dfp; - uint64_t b64; + ppc_vsr_t vb; uint32_t b_short; =20 - get_dfp64(&b64, b); - b_short =3D (uint32_t)b64; + get_dfp64(&vb, b); + b_short =3D (uint32_t)vb.VsrD(1); =20 dfp_prepare_decimal64(&dfp, 0, 0, env); decimal32ToNumber((decimal32 *)&b_short, &dfp.t); dfp_finalize_decimal64(&dfp); - set_dfp64(t, dfp.t64); + set_dfp64(t, &dfp.vt); dfp_set_FPRF_from_FRT(&dfp); } =20 void helper_dctqpq(CPUPPCState *env, ppc_fprp_t *t, ppc_fprp_t *b) { struct PPC_DFP dfp; - uint64_t b64; + ppc_vsr_t vb; dfp_prepare_decimal128(&dfp, 0, 0, env); - get_dfp64(&b64, b); - decimal64ToNumber((decimal64 *)&b64, &dfp.t); + get_dfp64(&vb, b); + decimal64ToNumber((decimal64 *)&vb.VsrD(1), &dfp.t); =20 dfp_check_for_VXSNAN_and_convert_to_QNaN(&dfp); dfp_set_FPRF_from_FRT(&dfp); =20 dfp_finalize_decimal128(&dfp); - set_dfp128(t, dfp.t64); + set_dfp128(t, &dfp.vt); } =20 void helper_drsp(CPUPPCState *env, ppc_fprp_t *t, ppc_fprp_t *b) { struct PPC_DFP dfp; uint32_t t_short =3D 0; - uint64_t t64; + ppc_vsr_t vt; dfp_prepare_decimal64(&dfp, 0, b, env); decimal32FromNumber((decimal32 *)&t_short, &dfp.b, &dfp.context); decimal32ToNumber((decimal32 *)&t_short, &dfp.t); @@ -952,16 +952,16 @@ void helper_drsp(CPUPPCState *env, ppc_fprp_t *t, ppc= _fprp_t *b) dfp_check_for_UX(&dfp); dfp_check_for_XX(&dfp); =20 - t64 =3D (uint64_t)t_short; - set_dfp64(t, &t64); + vt.VsrD(1) =3D (uint64_t)t_short; + set_dfp64(t, &vt); } =20 void helper_drdpq(CPUPPCState *env, ppc_fprp_t *t, ppc_fprp_t *b) { struct PPC_DFP dfp; dfp_prepare_decimal128(&dfp, 0, b, env); - decimal64FromNumber((decimal64 *)&dfp.t64, &dfp.b, &dfp.context); - decimal64ToNumber((decimal64 *)&dfp.t64, &dfp.t); + decimal64FromNumber((decimal64 *)&dfp.vt.VsrD(1), &dfp.b, &dfp.context= ); + decimal64ToNumber((decimal64 *)&dfp.vt.VsrD(1), &dfp.t); =20 dfp_check_for_VXSNAN_and_convert_to_QNaN(&dfp); dfp_set_FPRF_from_FRT_long(&dfp); @@ -969,26 +969,26 @@ void helper_drdpq(CPUPPCState *env, ppc_fprp_t *t, pp= c_fprp_t *b) dfp_check_for_UX(&dfp); dfp_check_for_XX(&dfp); =20 - dfp.t64[0] =3D dfp.t64[1] =3D 0; + dfp.vt.VsrD(0) =3D dfp.vt.VsrD(1) =3D 0; dfp_finalize_decimal64(&dfp); - set_dfp128(t, dfp.t64); + set_dfp128(t, &dfp.vt); } =20 #define DFP_HELPER_CFFIX(op, size) = \ void helper_##op(CPUPPCState *env, ppc_fprp_t *t, ppc_fprp_t *b) = \ { = \ struct PPC_DFP dfp; = \ - uint64_t b64; = \ + ppc_vsr_t vb; = \ dfp_prepare_decimal##size(&dfp, 0, b, env); = \ - get_dfp64(&b64, b); = \ - decNumberFromInt64(&dfp.t, (int64_t)b64); = \ + get_dfp64(&vb, b); = \ + decNumberFromInt64(&dfp.t, (int64_t)vb.VsrD(1)); = \ dfp_finalize_decimal##size(&dfp); = \ CFFIX_PPs(&dfp); = \ = \ if (size =3D=3D 64) { = \ - set_dfp64(t, dfp.t64); = \ + set_dfp64(t, &dfp.vt); = \ } else if (size =3D=3D 128) { = \ - set_dfp128(t, dfp.t64); = \ + set_dfp128(t, &dfp.vt); = \ } = \ } =20 @@ -1010,28 +1010,30 @@ void helper_##op(CPUPPCState *env, ppc_fprp_t *t, p= pc_fprp_t *b) \ if (unlikely(decNumberIsSpecial(&dfp.b))) { = \ uint64_t invalid_flags =3D FP_VX | FP_VXCVI; = \ if (decNumberIsInfinite(&dfp.b)) { = \ - dfp.t64[0] =3D decNumberIsNegative(&dfp.b) ? INT64_MIN : INT64= _MAX; \ + dfp.vt.VsrD(1) =3D decNumberIsNegative(&dfp.b) ? INT64_MIN : = \ + INT64_MAX; = \ } else { /* NaN */ = \ - dfp.t64[0] =3D INT64_MIN; = \ + dfp.vt.VsrD(1) =3D INT64_MIN; = \ if (decNumberIsSNaN(&dfp.b)) { = \ invalid_flags |=3D FP_VXSNAN; = \ } = \ } = \ dfp_set_FPSCR_flag(&dfp, invalid_flags, FP_VE); = \ } else if (unlikely(decNumberIsZero(&dfp.b))) { = \ - dfp.t64[0] =3D 0; = \ + dfp.vt.VsrD(1) =3D 0; = \ } else { = \ decNumberToIntegralExact(&dfp.b, &dfp.b, &dfp.context); = \ - dfp.t64[0] =3D decNumberIntegralToInt64(&dfp.b, &dfp.context); = \ + dfp.vt.VsrD(1) =3D decNumberIntegralToInt64(&dfp.b, &dfp.context);= \ if (decContextTestStatus(&dfp.context, DEC_Invalid_operation)) { = \ - dfp.t64[0] =3D decNumberIsNegative(&dfp.b) ? INT64_MIN : INT64= _MAX; \ + dfp.vt.VsrD(1) =3D decNumberIsNegative(&dfp.b) ? INT64_MIN : = \ + INT64_MAX; = \ dfp_set_FPSCR_flag(&dfp, FP_VX | FP_VXCVI, FP_VE); = \ } else { = \ dfp_check_for_XX(&dfp); = \ } = \ } = \ = \ - set_dfp64(t, dfp.t64); = \ + set_dfp64(t, &dfp.vt); = \ } =20 DFP_HELPER_CTFIX(dctfix, 64) @@ -1075,11 +1077,11 @@ void helper_##op(CPUPPCState *env, ppc_fprp_t *t, p= pc_fprp_t *b, \ dfp_prepare_decimal##size(&dfp, 0, b, env); \ \ decNumberGetBCD(&dfp.b, digits); \ - dfp.t64[0] =3D dfp.t64[1] =3D 0; = \ + dfp.vt.VsrD(0) =3D dfp.vt.VsrD(1) =3D 0; = \ N =3D dfp.b.digits; = \ \ for (i =3D 0; (i < N) && (i < (size)/4); i++) { = \ - dfp_set_bcd_digit_##size(dfp.t64, digits[N-i-1], i); \ + dfp_set_bcd_digit_##size(&dfp.vt.u64[0], digits[N - i - 1], i); \ } \ \ if (sp & 2) { \ @@ -1090,13 +1092,13 @@ void helper_##op(CPUPPCState *env, ppc_fprp_t *t, p= pc_fprp_t *b, \ } else { \ sgn =3D ((sp & 1) ? 0xF : 0xC); = \ } \ - dfp_set_sign_##size(dfp.t64, sgn); \ + dfp_set_sign_##size(&dfp.vt.u64[0], sgn); \ } \ \ if (size =3D=3D 64) { = \ - set_dfp64(t, dfp.t64); \ + set_dfp64(t, &dfp.vt); \ } else if (size =3D=3D 128) { = \ - set_dfp128(t, dfp.t64); \ + set_dfp128(t, &dfp.vt); \ } \ } =20 @@ -1126,7 +1128,8 @@ void helper_##op(CPUPPCState *env, ppc_fprp_t *t, ppc= _fprp_t *b, \ decNumberZero(&dfp.t); = \ = \ if (s) { = \ - uint8_t sgnNibble =3D dfp_get_bcd_digit_##size(dfp.b64, offset++);= \ + uint8_t sgnNibble =3D dfp_get_bcd_digit_##size(&dfp.vb.u64[0], = \ + offset++); = \ switch (sgnNibble) { = \ case 0xD: = \ case 0xB: = \ @@ -1146,7 +1149,8 @@ void helper_##op(CPUPPCState *env, ppc_fprp_t *t, ppc= _fprp_t *b, \ = \ while (offset < (size) / 4) { = \ n++; = \ - digits[(size) / 4 - n] =3D dfp_get_bcd_digit_##size(dfp.b64, offse= t++); \ + digits[(size) / 4 - n] =3D dfp_get_bcd_digit_##size(&dfp.vb.u64[0]= , \ + offset++); = \ if (digits[(size) / 4 - n] > 10) { = \ dfp_set_FPSCR_flag(&dfp, FP_VX | FP_VXCVI, FPSCR_VE); = \ return; = \ @@ -1165,9 +1169,9 @@ void helper_##op(CPUPPCState *env, ppc_fprp_t *t, ppc= _fprp_t *b, \ dfp_finalize_decimal##size(&dfp); = \ dfp_set_FPRF_from_FRT(&dfp); = \ if ((size) =3D=3D 64) { = \ - set_dfp64(t, dfp.t64); = \ + set_dfp64(t, &dfp.vt); = \ } else if ((size) =3D=3D 128) { = \ - set_dfp128(t, dfp.t64); = \ + set_dfp128(t, &dfp.vt); = \ } = \ } =20 @@ -1178,30 +1182,30 @@ DFP_HELPER_ENBCD(denbcdq, 128) void helper_##op(CPUPPCState *env, ppc_fprp_t *t, ppc_fprp_t *b) \ { \ struct PPC_DFP dfp; \ - uint64_t t64; \ + ppc_vsr_t vt; \ \ dfp_prepare_decimal##size(&dfp, 0, b, env); \ \ if (unlikely(decNumberIsSpecial(&dfp.b))) { \ if (decNumberIsInfinite(&dfp.b)) { \ - t64 =3D -1; \ + vt.VsrD(1) =3D -1; \ } else if (decNumberIsSNaN(&dfp.b)) { \ - t64 =3D -3; \ + vt.VsrD(1) =3D -3; \ } else if (decNumberIsQNaN(&dfp.b)) { \ - t64 =3D -2; \ + vt.VsrD(1) =3D -2; \ } else { \ assert(0); \ } \ - set_dfp64(t, &t64); \ + set_dfp64(t, &vt); \ } else { \ if ((size) =3D=3D 64) { \ - t64 =3D dfp.b.exponent + 398; \ + vt.VsrD(1) =3D dfp.b.exponent + 398; \ } else if ((size) =3D=3D 128) { \ - t64 =3D dfp.b.exponent + 6176; \ + vt.VsrD(1) =3D dfp.b.exponent + 6176; \ } else { \ assert(0); \ } \ - set_dfp64(t, &t64); \ + set_dfp64(t, &vt); \ } \ } =20 @@ -1225,12 +1229,13 @@ void helper_##op(CPUPPCState *env, ppc_fprp_t *t, p= pc_fprp_t *a, \ ppc_fprp_t *b) \ { \ struct PPC_DFP dfp; \ - uint64_t raw_qnan, raw_snan, raw_inf, max_exp, a64; \ + uint64_t raw_qnan, raw_snan, raw_inf, max_exp; \ + ppc_vsr_t va; \ int bias; \ int64_t exp; \ \ - get_dfp64(&a64, a); \ - exp =3D (int64_t)a64; = \ + get_dfp64(&va, a); \ + exp =3D (int64_t)va.VsrD(1); = \ dfp_prepare_decimal##size(&dfp, 0, b, env); \ \ if ((size) =3D=3D 64) { = \ @@ -1250,14 +1255,14 @@ void helper_##op(CPUPPCState *env, ppc_fprp_t *t, p= pc_fprp_t *a, \ } \ \ if (unlikely((exp < 0) || (exp > max_exp))) { \ - dfp.t64[0] =3D dfp.b64[0]; = \ - dfp.t64[1] =3D dfp.b64[1]; = \ + dfp.vt.VsrD(0) =3D dfp.vb.VsrD(0); = \ + dfp.vt.VsrD(1) =3D dfp.vb.VsrD(1); = \ if (exp =3D=3D -1) { = \ - dfp_set_raw_exp_##size(dfp.t64, raw_inf); \ + dfp_set_raw_exp_##size(&dfp.vt.u64[0], raw_inf); \ } else if (exp =3D=3D -3) { = \ - dfp_set_raw_exp_##size(dfp.t64, raw_snan); \ + dfp_set_raw_exp_##size(&dfp.vt.u64[0], raw_snan); \ } else { \ - dfp_set_raw_exp_##size(dfp.t64, raw_qnan); \ + dfp_set_raw_exp_##size(&dfp.vt.u64[0], raw_qnan); \ } \ } else { \ dfp.t =3D dfp.b; = \ @@ -1268,9 +1273,9 @@ void helper_##op(CPUPPCState *env, ppc_fprp_t *t, ppc= _fprp_t *a, \ dfp_finalize_decimal##size(&dfp); \ } \ if (size =3D=3D 64) { = \ - set_dfp64(t, dfp.t64); \ + set_dfp64(t, &dfp.vt); \ } else if (size =3D=3D 128) { = \ - set_dfp128(t, dfp.t64); \ + set_dfp128(t, &dfp.vt); \ } \ } =20 @@ -1348,20 +1353,21 @@ void helper_##op(CPUPPCState *env, ppc_fprp_t *t, p= pc_fprp_t *a, \ dfp_finalize_decimal##size(&dfp); \ } else { \ if ((size) =3D=3D 64) { \ - dfp.t64[0] =3D dfp.a64[0] & 0xFFFC000000000000ULL; \ - dfp_clear_lmd_from_g5msb(dfp.t64); \ + dfp.vt.VsrD(1) =3D dfp.va.VsrD(1) & \ + 0xFFFC000000000000ULL; \ + dfp_clear_lmd_from_g5msb(&dfp.vt.VsrD(1)); \ } else { \ - dfp.t64[HI_IDX] =3D dfp.a64[HI_IDX] & \ - 0xFFFFC00000000000ULL; \ - dfp_clear_lmd_from_g5msb(dfp.t64 + HI_IDX); \ - dfp.t64[LO_IDX] =3D 0; \ + dfp.vt.VsrD(0) =3D dfp.va.VsrD(0) & \ + 0xFFFFC00000000000ULL; \ + dfp_clear_lmd_from_g5msb(&dfp.vt.VsrD(0)); \ + dfp.vt.VsrD(1) =3D 0; \ } \ } \ \ if ((size) =3D=3D 64) { \ - set_dfp64(t, dfp.t64); \ + set_dfp64(t, &dfp.vt); \ } else { \ - set_dfp128(t, dfp.t64); \ + set_dfp128(t, &dfp.vt); \ } \ } =20 --=20 2.20.1