From nobody Sun Apr 28 10:17:21 2024 Delivered-To: importer@patchew.org Received-SPF: temperror (zoho.com: Error in retrieving data from DNS) 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=temperror (zoho.com: Error in retrieving data from DNS) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1548880750645419.1350183360096; Wed, 30 Jan 2019 12:39:10 -0800 (PST) Received: from localhost ([127.0.0.1]:43833 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gowdP-0000bA-K9 for importer@patchew.org; Wed, 30 Jan 2019 15:38:59 -0500 Received: from eggs.gnu.org ([209.51.188.92]:47483) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gowbQ-0007q7-0d for qemu-devel@nongnu.org; Wed, 30 Jan 2019 15:36:56 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gowbO-0006f2-1i for qemu-devel@nongnu.org; Wed, 30 Jan 2019 15:36:55 -0500 Received: from chuckie.co.uk ([82.165.15.123]:45681 helo=s16892447.onlinehome-server.info) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gowbN-0006eb-Mg; Wed, 30 Jan 2019 15:36:53 -0500 Received: from host86-138-240-60.range86-138.btcentralplus.com ([86.138.240.60] helo=kentang.home) by s16892447.onlinehome-server.info with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.76) (envelope-from ) id 1gowbX-0006Io-OH; Wed, 30 Jan 2019 20:37:05 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, qemu-ppc@nongnu.org, richard.henderson@linaro.org, david@gibson.dropbear.id.au Date: Wed, 30 Jan 2019 20:36:31 +0000 Message-Id: <20190130203638.21179-2-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190130203638.21179-1-mark.cave-ayland@ilande.co.uk> References: <20190130203638.21179-1-mark.cave-ayland@ilande.co.uk> X-SA-Exim-Connect-IP: 86.138.240.60 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk X-SA-Exim-Version: 4.2.1 (built Sun, 08 Jan 2012 02:45:44 +0000) X-SA-Exim-Scanned: Yes (on s16892447.onlinehome-server.info) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 82.165.15.123 Subject: [Qemu-devel] [PATCH v5 1/8] target/ppc: implement complete set of Vsr* macros 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This prepares us for eliminating the use of direct array access within the = VMX instruction implementations. Signed-off-by: Mark Cave-Ayland Reviewed-by: Richard Henderson --- target/ppc/internal.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/target/ppc/internal.h b/target/ppc/internal.h index c7c0f77dd6..f26a71ffcf 100644 --- a/target/ppc/internal.h +++ b/target/ppc/internal.h @@ -206,16 +206,23 @@ EXTRACT_HELPER_SPLIT_3(DCMX_XV, 5, 16, 0, 1, 2, 5, 1,= 6, 6); =20 #if defined(HOST_WORDS_BIGENDIAN) #define VsrB(i) u8[i] +#define VsrSB(i) s8[i] #define VsrH(i) u16[i] +#define VsrSH(i) s16[i] #define VsrW(i) u32[i] +#define VsrSW(i) s32[i] #define VsrD(i) u64[i] +#define VsrSD(i) s64[i] #else #define VsrB(i) u8[15 - (i)] +#define VsrSB(i) s8[15 - (i)] #define VsrH(i) u16[7 - (i)] +#define VsrSH(i) s16[7 - (i)] #define VsrW(i) u32[3 - (i)] +#define VsrSW(i) s32[3 - (i)] #define VsrD(i) u64[1 - (i)] +#define VsrSD(i) s64[1 - (i)] #endif - static inline void getVSR(int n, ppc_vsr_t *vsr, CPUPPCState *env) { vsr->VsrD(0) =3D env->vsr[n].u64[0]; --=20 2.11.0 From nobody Sun Apr 28 10:17:21 2024 Delivered-To: importer@patchew.org Received-SPF: temperror (zoho.com: Error in retrieving data from DNS) 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=temperror (zoho.com: Error in retrieving data from DNS) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1548880753685741.898097733011; Wed, 30 Jan 2019 12:39:13 -0800 (PST) Received: from localhost ([127.0.0.1]:43836 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gowdS-0000d0-Jj for importer@patchew.org; Wed, 30 Jan 2019 15:39:02 -0500 Received: from eggs.gnu.org ([209.51.188.92]:47507) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gowbR-0007qJ-TX for qemu-devel@nongnu.org; Wed, 30 Jan 2019 15:36:58 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gowbQ-0006fe-3K for qemu-devel@nongnu.org; Wed, 30 Jan 2019 15:36:57 -0500 Received: from chuckie.co.uk ([82.165.15.123]:45687 helo=s16892447.onlinehome-server.info) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gowbP-0006eo-SX; Wed, 30 Jan 2019 15:36:56 -0500 Received: from host86-138-240-60.range86-138.btcentralplus.com ([86.138.240.60] helo=kentang.home) by s16892447.onlinehome-server.info with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.76) (envelope-from ) id 1gowbZ-0006Io-9H; Wed, 30 Jan 2019 20:37:06 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, qemu-ppc@nongnu.org, richard.henderson@linaro.org, david@gibson.dropbear.id.au Date: Wed, 30 Jan 2019 20:36:32 +0000 Message-Id: <20190130203638.21179-3-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190130203638.21179-1-mark.cave-ayland@ilande.co.uk> References: <20190130203638.21179-1-mark.cave-ayland@ilande.co.uk> X-SA-Exim-Connect-IP: 86.138.240.60 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk X-SA-Exim-Version: 4.2.1 (built Sun, 08 Jan 2012 02:45:44 +0000) X-SA-Exim-Scanned: Yes (on s16892447.onlinehome-server.info) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 82.165.15.123 Subject: [Qemu-devel] [PATCH v5 2/8] target/ppc: rework vmrg{l, h}{b, h, w} instructions to use Vsr* macros 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The current implementations make use of the endian-specific macros MRGLO/MR= GHI and also reference HI_IDX and LO_IDX directly to calculate array offsets. Rework the implementation to use the Vsr* macros so that these per-endian references can be removed. Signed-off-by: Mark Cave-Ayland Reviewed-by: Richard Henderson --- target/ppc/int_helper.c | 54 +++++++++++++++++----------------------------= ---- 1 file changed, 19 insertions(+), 35 deletions(-) diff --git a/target/ppc/int_helper.c b/target/ppc/int_helper.c index 598731d47a..fe418b3393 100644 --- a/target/ppc/int_helper.c +++ b/target/ppc/int_helper.c @@ -976,43 +976,27 @@ void helper_vmladduhm(ppc_avr_t *r, ppc_avr_t *a, ppc= _avr_t *b, ppc_avr_t *c) } } =20 -#define VMRG_DO(name, element, highp) \ - void helper_v##name(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) \ - { \ - ppc_avr_t result; \ - int i; \ - size_t n_elems =3D ARRAY_SIZE(r->element); \ - \ - for (i =3D 0; i < n_elems / 2; i++) { \ - if (highp) { \ - result.element[i*2+HI_IDX] =3D a->element[i]; \ - result.element[i*2+LO_IDX] =3D b->element[i]; \ - } else { \ - result.element[n_elems - i * 2 - (1 + HI_IDX)] =3D \ - b->element[n_elems - i - 1]; \ - result.element[n_elems - i * 2 - (1 + LO_IDX)] =3D \ - a->element[n_elems - i - 1]; \ - } \ - } \ - *r =3D result; \ - } -#if defined(HOST_WORDS_BIGENDIAN) -#define MRGHI 0 -#define MRGLO 1 -#else -#define MRGHI 1 -#define MRGLO 0 -#endif -#define VMRG(suffix, element) \ - VMRG_DO(mrgl##suffix, element, MRGHI) \ - VMRG_DO(mrgh##suffix, element, MRGLO) -VMRG(b, u8) -VMRG(h, u16) -VMRG(w, u32) +#define VMRG_DO(name, element, access, ofs) = \ + void helper_v##name(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) = \ + { = \ + ppc_avr_t result; = \ + int i, half =3D ARRAY_SIZE(r->element) / 2; = \ + = \ + for (i =3D 0; i < half; i++) { = \ + result.access(i * 2 + 0) =3D a->access(i + ofs); = \ + result.access(i * 2 + 1) =3D b->access(i + ofs); = \ + } = \ + *r =3D result; = \ + } + +#define VMRG(suffix, element, access) \ + VMRG_DO(mrgl##suffix, element, access, half) \ + VMRG_DO(mrgh##suffix, element, access, 0) +VMRG(b, u8, VsrB) +VMRG(h, u16, VsrH) +VMRG(w, u32, VsrW) #undef VMRG_DO #undef VMRG -#undef MRGHI -#undef MRGLO =20 void helper_vmsummbm(CPUPPCState *env, ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c) --=20 2.11.0 From nobody Sun Apr 28 10:17:21 2024 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1548880909519628.4285544046577; Wed, 30 Jan 2019 12:41:49 -0800 (PST) Received: from localhost ([127.0.0.1]:43899 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gowg6-00037i-Es for importer@patchew.org; Wed, 30 Jan 2019 15:41:46 -0500 Received: from eggs.gnu.org ([209.51.188.92]:47563) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gowbV-0007u2-NN for qemu-devel@nongnu.org; Wed, 30 Jan 2019 15:37:02 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gowbT-0006hP-Pe for qemu-devel@nongnu.org; Wed, 30 Jan 2019 15:37:01 -0500 Received: from chuckie.co.uk ([82.165.15.123]:45689 helo=s16892447.onlinehome-server.info) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gowbR-0006fX-TU; Wed, 30 Jan 2019 15:36:59 -0500 Received: from host86-138-240-60.range86-138.btcentralplus.com ([86.138.240.60] helo=kentang.home) by s16892447.onlinehome-server.info with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.76) (envelope-from ) id 1gowba-0006Io-Ne; Wed, 30 Jan 2019 20:37:08 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, qemu-ppc@nongnu.org, richard.henderson@linaro.org, david@gibson.dropbear.id.au Date: Wed, 30 Jan 2019 20:36:33 +0000 Message-Id: <20190130203638.21179-4-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190130203638.21179-1-mark.cave-ayland@ilande.co.uk> References: <20190130203638.21179-1-mark.cave-ayland@ilande.co.uk> X-SA-Exim-Connect-IP: 86.138.240.60 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk X-SA-Exim-Version: 4.2.1 (built Sun, 08 Jan 2012 02:45:44 +0000) X-SA-Exim-Scanned: Yes (on s16892447.onlinehome-server.info) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 82.165.15.123 Subject: [Qemu-devel] [PATCH v5 3/8] target/ppc: rework vmul{e, o}{s, u}{b, h, w} instructions to use Vsr* macros 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The current implementations make use of the endian-specific macros HI_IDX a= nd LO_IDX directly to calculate array offsets. Rework the implementation to use the Vsr* macros so that these per-endian references can be removed. Signed-off-by: Mark Cave-Ayland Reviewed-by: Richard Henderson --- target/ppc/int_helper.c | 48 +++++++++++++++++++++++++++------------------= --- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/target/ppc/int_helper.c b/target/ppc/int_helper.c index fe418b3393..e531af5294 100644 --- a/target/ppc/int_helper.c +++ b/target/ppc/int_helper.c @@ -1104,33 +1104,39 @@ void helper_vmsumuhs(CPUPPCState *env, ppc_avr_t *r= , ppc_avr_t *a, } } =20 -#define VMUL_DO(name, mul_element, prod_element, cast, evenp) \ +#define VMUL_DO_EVN(name, mul_element, mul_access, prod_access, cast) \ void helper_v##name(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) \ { \ int i; \ \ - VECTOR_FOR_INORDER_I(i, prod_element) { \ - if (evenp) { \ - r->prod_element[i] =3D \ - (cast)a->mul_element[i * 2 + HI_IDX] * \ - (cast)b->mul_element[i * 2 + HI_IDX]; \ - } else { \ - r->prod_element[i] =3D \ - (cast)a->mul_element[i * 2 + LO_IDX] * \ - (cast)b->mul_element[i * 2 + LO_IDX]; \ - } \ + for (i =3D 0; i < ARRAY_SIZE(r->mul_element); i +=3D 2) { = \ + r->prod_access(i >> 1) =3D (cast)a->mul_access(i) * \ + (cast)b->mul_access(i); \ + } \ + } + +#define VMUL_DO_ODD(name, mul_element, mul_access, prod_access, cast) \ + void helper_v##name(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) \ + { \ + int i; \ + \ + for (i =3D 0; i < ARRAY_SIZE(r->mul_element); i +=3D 2) { = \ + r->prod_access(i >> 1) =3D (cast)a->mul_access(i + 1) * \ + (cast)b->mul_access(i + 1); \ } \ } -#define VMUL(suffix, mul_element, prod_element, cast) \ - VMUL_DO(mule##suffix, mul_element, prod_element, cast, 1) \ - VMUL_DO(mulo##suffix, mul_element, prod_element, cast, 0) -VMUL(sb, s8, s16, int16_t) -VMUL(sh, s16, s32, int32_t) -VMUL(sw, s32, s64, int64_t) -VMUL(ub, u8, u16, uint16_t) -VMUL(uh, u16, u32, uint32_t) -VMUL(uw, u32, u64, uint64_t) -#undef VMUL_DO + +#define VMUL(suffix, mul_element, mul_access, prod_access, cast) \ + VMUL_DO_EVN(mule##suffix, mul_element, mul_access, prod_access, cast) = \ + VMUL_DO_ODD(mulo##suffix, mul_element, mul_access, prod_access, cast) +VMUL(sb, s8, VsrSB, VsrSH, int16_t) +VMUL(sh, s16, VsrSH, VsrSW, int32_t) +VMUL(sw, s32, VsrSW, VsrSD, int64_t) +VMUL(ub, u8, VsrB, VsrH, uint16_t) +VMUL(uh, u16, VsrH, VsrW, uint32_t) +VMUL(uw, u32, VsrW, VsrD, uint64_t) +#undef VMUL_DO_EVN +#undef VMUL_DO_ODD #undef VMUL =20 void helper_vperm(CPUPPCState *env, ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t = *b, --=20 2.11.0 From nobody Sun Apr 28 10:17:21 2024 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 154888077414126.99184609271174; Wed, 30 Jan 2019 12:39:34 -0800 (PST) Received: from localhost ([127.0.0.1]:43838 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gowdq-00010S-VY for importer@patchew.org; Wed, 30 Jan 2019 15:39:27 -0500 Received: from eggs.gnu.org ([209.51.188.92]:47565) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gowbV-0007u6-Ps for qemu-devel@nongnu.org; Wed, 30 Jan 2019 15:37:03 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gowbT-0006hg-Qt for qemu-devel@nongnu.org; Wed, 30 Jan 2019 15:37:01 -0500 Received: from chuckie.co.uk ([82.165.15.123]:45691 helo=s16892447.onlinehome-server.info) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gowbR-0006fi-Sv; Wed, 30 Jan 2019 15:36:59 -0500 Received: from host86-138-240-60.range86-138.btcentralplus.com ([86.138.240.60] helo=kentang.home) by s16892447.onlinehome-server.info with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.76) (envelope-from ) id 1gowbc-0006Io-B2; Wed, 30 Jan 2019 20:37:11 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, qemu-ppc@nongnu.org, richard.henderson@linaro.org, david@gibson.dropbear.id.au Date: Wed, 30 Jan 2019 20:36:34 +0000 Message-Id: <20190130203638.21179-5-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190130203638.21179-1-mark.cave-ayland@ilande.co.uk> References: <20190130203638.21179-1-mark.cave-ayland@ilande.co.uk> X-SA-Exim-Connect-IP: 86.138.240.60 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk X-SA-Exim-Version: 4.2.1 (built Sun, 08 Jan 2012 02:45:44 +0000) X-SA-Exim-Scanned: Yes (on s16892447.onlinehome-server.info) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 82.165.15.123 Subject: [Qemu-devel] [PATCH v5 4/8] target/ppc: eliminate use of HI_IDX and LO_IDX macros from int_helper.c 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The original purpose of these macros was to correctly reference the high an= d low parts of the VSRs regardless of the host endianness. Replace these direct references to high and low parts with the relevant VsrD macro instead, and completely remove the now-unused HI_IDX and LO_IDX macro= s. Signed-off-by: Mark Cave-Ayland Reviewed-by: Richard Henderson --- target/ppc/int_helper.c | 180 +++++++++++++++++++++++---------------------= ---- 1 file changed, 85 insertions(+), 95 deletions(-) diff --git a/target/ppc/int_helper.c b/target/ppc/int_helper.c index e531af5294..7a9c02d4bb 100644 --- a/target/ppc/int_helper.c +++ b/target/ppc/int_helper.c @@ -389,14 +389,6 @@ target_ulong helper_602_mfrom(target_ulong arg) /*************************************************************************= ****/ /* Altivec extension helpers */ #if defined(HOST_WORDS_BIGENDIAN) -#define HI_IDX 0 -#define LO_IDX 1 -#else -#define HI_IDX 1 -#define LO_IDX 0 -#endif - -#if defined(HOST_WORDS_BIGENDIAN) #define VECTOR_FOR_INORDER_I(index, element) \ for (index =3D 0; index < ARRAY_SIZE(r->element); index++) #else @@ -514,8 +506,8 @@ void helper_vprtybq(ppc_avr_t *r, ppc_avr_t *b) res ^=3D res >> 32; res ^=3D res >> 16; res ^=3D res >> 8; - r->u64[LO_IDX] =3D res & 1; - r->u64[HI_IDX] =3D 0; + r->VsrD(1) =3D res & 1; + r->VsrD(0) =3D 0; } =20 #define VARITH_DO(name, op, element) \ @@ -1229,8 +1221,8 @@ void helper_vbpermq(ppc_avr_t *r, ppc_avr_t *a, ppc_a= vr_t *b) } } =20 - r->u64[HI_IDX] =3D perm; - r->u64[LO_IDX] =3D 0; + r->VsrD(0) =3D perm; + r->VsrD(1) =3D 0; } =20 #undef VBPERMQ_INDEX @@ -1559,25 +1551,25 @@ void helper_vpmsumd(ppc_avr_t *r, ppc_avr_t *a, ppc= _avr_t *b) ppc_avr_t prod[2]; =20 VECTOR_FOR_INORDER_I(i, u64) { - prod[i].u64[LO_IDX] =3D prod[i].u64[HI_IDX] =3D 0; + prod[i].VsrD(1) =3D prod[i].VsrD(0) =3D 0; for (j =3D 0; j < 64; j++) { if (a->u64[i] & (1ull<u64[i]; + bshift.VsrD(0) =3D 0; + bshift.VsrD(1) =3D b->u64[i]; } else { - bshift.u64[HI_IDX] =3D b->u64[i] >> (64-j); - bshift.u64[LO_IDX] =3D b->u64[i] << j; + bshift.VsrD(0) =3D b->u64[i] >> (64 - j); + bshift.VsrD(1) =3D b->u64[i] << j; } - prod[i].u64[LO_IDX] ^=3D bshift.u64[LO_IDX]; - prod[i].u64[HI_IDX] ^=3D bshift.u64[HI_IDX]; + prod[i].VsrD(1) ^=3D bshift.VsrD(1); + prod[i].VsrD(0) ^=3D bshift.VsrD(0); } } } =20 - r->u64[LO_IDX] =3D prod[0].u64[LO_IDX] ^ prod[1].u64[LO_IDX]; - r->u64[HI_IDX] =3D prod[0].u64[HI_IDX] ^ prod[1].u64[HI_IDX]; + r->VsrD(1) =3D prod[0].VsrD(1) ^ prod[1].VsrD(1); + r->VsrD(0) =3D prod[0].VsrD(0) ^ prod[1].VsrD(0); #endif } =20 @@ -1795,7 +1787,7 @@ VEXTU_X_DO(vextuwrx, 32, 0) #define VSHIFT(suffix, leftp) \ void helper_vs##suffix(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) \ { \ - int shift =3D b->u8[LO_IDX*15] & 0x7; \ + int shift =3D b->VsrB(15) & 0x7; \ int doit =3D 1; \ int i; \ \ @@ -1806,15 +1798,15 @@ VEXTU_X_DO(vextuwrx, 32, 0) if (shift =3D=3D 0) { = \ *r =3D *a; \ } else if (leftp) { \ - uint64_t carry =3D a->u64[LO_IDX] >> (64 - shift); \ + uint64_t carry =3D a->VsrD(1) >> (64 - shift); \ \ - r->u64[HI_IDX] =3D (a->u64[HI_IDX] << shift) | carry; \ - r->u64[LO_IDX] =3D a->u64[LO_IDX] << shift; \ + r->VsrD(0) =3D (a->VsrD(0) << shift) | carry; \ + r->VsrD(1) =3D a->VsrD(1) << shift; \ } else { \ - uint64_t carry =3D a->u64[HI_IDX] << (64 - shift); \ + uint64_t carry =3D a->VsrD(0) << (64 - shift); \ \ - r->u64[LO_IDX] =3D (a->u64[LO_IDX] >> shift) | carry; \ - r->u64[HI_IDX] =3D a->u64[HI_IDX] >> shift; \ + r->VsrD(1) =3D (a->VsrD(1) >> shift) | carry; \ + r->VsrD(0) =3D a->VsrD(0) >> shift; \ } \ } \ } @@ -1900,7 +1892,7 @@ void helper_vsldoi(ppc_avr_t *r, ppc_avr_t *a, ppc_av= r_t *b, uint32_t shift) =20 void helper_vslo(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) { - int sh =3D (b->u8[LO_IDX*0xf] >> 3) & 0xf; + int sh =3D (b->VsrB(0xf) >> 3) & 0xf; =20 #if defined(HOST_WORDS_BIGENDIAN) memmove(&r->u8[0], &a->u8[sh], 16 - sh); @@ -2096,7 +2088,7 @@ VSR(d, u64, 0x3F) =20 void helper_vsro(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) { - int sh =3D (b->u8[LO_IDX * 0xf] >> 3) & 0xf; + int sh =3D (b->VsrB(0xf) >> 3) & 0xf; =20 #if defined(HOST_WORDS_BIGENDIAN) memmove(&r->u8[sh], &a->u8[0], 16 - sh); @@ -2352,13 +2344,13 @@ static inline void avr_qw_not(ppc_avr_t *t, ppc_avr= _t a) =20 static int avr_qw_cmpu(ppc_avr_t a, ppc_avr_t b) { - if (a.u64[HI_IDX] < b.u64[HI_IDX]) { + if (a.VsrD(0) < b.VsrD(0)) { return -1; - } else if (a.u64[HI_IDX] > b.u64[HI_IDX]) { + } else if (a.VsrD(0) > b.VsrD(0)) { return 1; - } else if (a.u64[LO_IDX] < b.u64[LO_IDX]) { + } else if (a.VsrD(1) < b.VsrD(1)) { return -1; - } else if (a.u64[LO_IDX] > b.u64[LO_IDX]) { + } else if (a.VsrD(1) > b.VsrD(1)) { return 1; } else { return 0; @@ -2367,17 +2359,17 @@ static int avr_qw_cmpu(ppc_avr_t a, ppc_avr_t b) =20 static void avr_qw_add(ppc_avr_t *t, ppc_avr_t a, ppc_avr_t b) { - t->u64[LO_IDX] =3D a.u64[LO_IDX] + b.u64[LO_IDX]; - t->u64[HI_IDX] =3D a.u64[HI_IDX] + b.u64[HI_IDX] + - (~a.u64[LO_IDX] < b.u64[LO_IDX]); + t->VsrD(1) =3D a.VsrD(1) + b.VsrD(1); + t->VsrD(0) =3D a.VsrD(0) + b.VsrD(0) + + (~a.VsrD(1) < b.VsrD(1)); } =20 static int avr_qw_addc(ppc_avr_t *t, ppc_avr_t a, ppc_avr_t b) { ppc_avr_t not_a; - t->u64[LO_IDX] =3D a.u64[LO_IDX] + b.u64[LO_IDX]; - t->u64[HI_IDX] =3D a.u64[HI_IDX] + b.u64[HI_IDX] + - (~a.u64[LO_IDX] < b.u64[LO_IDX]); + t->VsrD(1) =3D a.VsrD(1) + b.VsrD(1); + t->VsrD(0) =3D a.VsrD(0) + b.VsrD(0) + + (~a.VsrD(1) < b.VsrD(1)); avr_qw_not(¬_a, a); return avr_qw_cmpu(not_a, b) < 0; } @@ -2399,11 +2391,11 @@ void helper_vaddeuqm(ppc_avr_t *r, ppc_avr_t *a, pp= c_avr_t *b, ppc_avr_t *c) r->u128 =3D a->u128 + b->u128 + (c->u128 & 1); #else =20 - if (c->u64[LO_IDX] & 1) { + if (c->VsrD(1) & 1) { ppc_avr_t tmp; =20 - tmp.u64[HI_IDX] =3D 0; - tmp.u64[LO_IDX] =3D c->u64[LO_IDX] & 1; + tmp.VsrD(0) =3D 0; + tmp.VsrD(1) =3D c->VsrD(1) & 1; avr_qw_add(&tmp, *a, tmp); avr_qw_add(r, tmp, *b); } else { @@ -2421,8 +2413,8 @@ void helper_vaddcuq(ppc_avr_t *r, ppc_avr_t *a, ppc_a= vr_t *b) =20 avr_qw_not(¬_a, *a); =20 - r->u64[HI_IDX] =3D 0; - r->u64[LO_IDX] =3D (avr_qw_cmpu(not_a, *b) < 0); + r->VsrD(0) =3D 0; + r->VsrD(1) =3D (avr_qw_cmpu(not_a, *b) < 0); #endif } =20 @@ -2437,7 +2429,7 @@ void helper_vaddecuq(ppc_avr_t *r, ppc_avr_t *a, ppc_= avr_t *b, ppc_avr_t *c) r->u128 =3D carry_out; #else =20 - int carry_in =3D c->u64[LO_IDX] & 1; + int carry_in =3D c->VsrD(1) & 1; int carry_out =3D 0; ppc_avr_t tmp; =20 @@ -2447,8 +2439,8 @@ void helper_vaddecuq(ppc_avr_t *r, ppc_avr_t *a, ppc_= avr_t *b, ppc_avr_t *c) ppc_avr_t one =3D QW_ONE; carry_out =3D avr_qw_addc(&tmp, tmp, one); } - r->u64[HI_IDX] =3D 0; - r->u64[LO_IDX] =3D carry_out; + r->VsrD(0) =3D 0; + r->VsrD(1) =3D carry_out; #endif } =20 @@ -2476,8 +2468,8 @@ void helper_vsubeuqm(ppc_avr_t *r, ppc_avr_t *a, ppc_= avr_t *b, ppc_avr_t *c) avr_qw_not(&tmp, *b); avr_qw_add(&sum, *a, tmp); =20 - tmp.u64[HI_IDX] =3D 0; - tmp.u64[LO_IDX] =3D c->u64[LO_IDX] & 1; + tmp.VsrD(0) =3D 0; + tmp.VsrD(1) =3D c->VsrD(1) & 1; avr_qw_add(r, sum, tmp); #endif } @@ -2493,10 +2485,10 @@ void helper_vsubcuq(ppc_avr_t *r, ppc_avr_t *a, ppc= _avr_t *b) ppc_avr_t tmp; avr_qw_not(&tmp, *b); avr_qw_add(&tmp, *a, tmp); - carry =3D ((tmp.s64[HI_IDX] =3D=3D -1ull) && (tmp.s64[LO_IDX] =3D= =3D -1ull)); + carry =3D ((tmp.VsrSD(0) =3D=3D -1ull) && (tmp.VsrSD(1) =3D=3D -1u= ll)); } - r->u64[HI_IDX] =3D 0; - r->u64[LO_IDX] =3D carry; + r->VsrD(0) =3D 0; + r->VsrD(1) =3D carry; #endif } =20 @@ -2507,17 +2499,17 @@ void helper_vsubecuq(ppc_avr_t *r, ppc_avr_t *a, pp= c_avr_t *b, ppc_avr_t *c) (~a->u128 < ~b->u128) || ((c->u128 & 1) && (a->u128 + ~b->u128 =3D=3D (__uint128_t)-1)); #else - int carry_in =3D c->u64[LO_IDX] & 1; + int carry_in =3D c->VsrD(1) & 1; int carry_out =3D (avr_qw_cmpu(*a, *b) > 0); if (!carry_out && carry_in) { ppc_avr_t tmp; avr_qw_not(&tmp, *b); avr_qw_add(&tmp, *a, tmp); - carry_out =3D ((tmp.u64[HI_IDX] =3D=3D -1ull) && (tmp.u64[LO_IDX] = =3D=3D -1ull)); + carry_out =3D ((tmp.VsrD(0) =3D=3D -1ull) && (tmp.VsrD(1) =3D=3D -= 1ull)); } =20 - r->u64[HI_IDX] =3D 0; - r->u64[LO_IDX] =3D carry_out; + r->VsrD(0) =3D 0; + r->VsrD(1) =3D carry_out; #endif } =20 @@ -2615,7 +2607,7 @@ static bool bcd_is_valid(ppc_avr_t *bcd) =20 static int bcd_cmp_zero(ppc_avr_t *bcd) { - if (bcd->u64[HI_IDX] =3D=3D 0 && (bcd->u64[LO_IDX] >> 4) =3D=3D 0) { + if (bcd->VsrD(0) =3D=3D 0 && (bcd->VsrD(1) >> 4) =3D=3D 0) { return CRF_EQ; } else { return (bcd_get_sgn(bcd) =3D=3D 1) ? CRF_GT : CRF_LT; @@ -2735,7 +2727,7 @@ uint32_t helper_bcdadd(ppc_avr_t *r, ppc_avr_t *a, p= pc_avr_t *b, uint32_t ps) } =20 if (unlikely(invalid)) { - result.u64[HI_IDX] =3D result.u64[LO_IDX] =3D -1; + result.VsrD(0) =3D result.VsrD(1) =3D -1; cr =3D CRF_SO; } else if (overflow) { cr |=3D CRF_SO; @@ -2804,7 +2796,7 @@ uint32_t helper_bcdctn(ppc_avr_t *r, ppc_avr_t *b, ui= nt32_t ps) int invalid =3D (sgnb =3D=3D 0); ppc_avr_t ret =3D { .u64 =3D { 0, 0 } }; =20 - int ox_flag =3D (b->u64[HI_IDX] !=3D 0) || ((b->u64[LO_IDX] >> 32) != =3D 0); + int ox_flag =3D (b->VsrD(0) !=3D 0) || ((b->VsrD(1) >> 32) !=3D 0); =20 for (i =3D 1; i < 8; i++) { set_national_digit(&ret, 0x30 + bcd_get_digit(b, i, &invalid), i); @@ -2884,7 +2876,7 @@ uint32_t helper_bcdctz(ppc_avr_t *r, ppc_avr_t *b, ui= nt32_t ps) int invalid =3D (sgnb =3D=3D 0); ppc_avr_t ret =3D { .u64 =3D { 0, 0 } }; =20 - int ox_flag =3D ((b->u64[HI_IDX] >> 4) !=3D 0); + int ox_flag =3D ((b->VsrD(0) >> 4) !=3D 0); =20 for (i =3D 0; i < 16; i++) { digit =3D bcd_get_digit(b, i + 1, &invalid); @@ -2925,13 +2917,13 @@ uint32_t helper_bcdcfsq(ppc_avr_t *r, ppc_avr_t *b,= uint32_t ps) uint64_t hi_value; ppc_avr_t ret =3D { .u64 =3D { 0, 0 } }; =20 - if (b->s64[HI_IDX] < 0) { - lo_value =3D -b->s64[LO_IDX]; - hi_value =3D ~b->u64[HI_IDX] + !lo_value; + if (b->VsrSD(0) < 0) { + lo_value =3D -b->VsrSD(1); + hi_value =3D ~b->VsrD(0) + !lo_value; bcd_put_digit(&ret, 0xD, 0); } else { - lo_value =3D b->u64[LO_IDX]; - hi_value =3D b->u64[HI_IDX]; + lo_value =3D b->VsrD(1); + hi_value =3D b->VsrD(0); bcd_put_digit(&ret, bcd_preferred_sgn(0, ps), 0); } =20 @@ -2979,11 +2971,11 @@ uint32_t helper_bcdctsq(ppc_avr_t *r, ppc_avr_t *b,= uint32_t ps) } =20 if (sgnb =3D=3D -1) { - r->s64[LO_IDX] =3D -lo_value; - r->s64[HI_IDX] =3D ~hi_value + !r->s64[LO_IDX]; + r->VsrSD(1) =3D -lo_value; + r->VsrSD(0) =3D ~hi_value + !r->VsrSD(1); } else { - r->s64[LO_IDX] =3D lo_value; - r->s64[HI_IDX] =3D hi_value; + r->VsrSD(1) =3D lo_value; + r->VsrSD(0) =3D hi_value; } =20 cr =3D bcd_cmp_zero(b); @@ -3043,7 +3035,7 @@ uint32_t helper_bcds(ppc_avr_t *r, ppc_avr_t *a, ppc_= avr_t *b, uint32_t ps) bool ox_flag =3D false; int sgnb =3D bcd_get_sgn(b); ppc_avr_t ret =3D *b; - ret.u64[LO_IDX] &=3D ~0xf; + ret.VsrD(1) &=3D ~0xf; =20 if (bcd_is_valid(b) =3D=3D false) { return CRF_SO; @@ -3056,9 +3048,9 @@ uint32_t helper_bcds(ppc_avr_t *r, ppc_avr_t *a, ppc_= avr_t *b, uint32_t ps) } =20 if (i > 0) { - ulshift(&ret.u64[LO_IDX], &ret.u64[HI_IDX], i * 4, &ox_flag); + ulshift(&ret.VsrD(1), &ret.VsrD(0), i * 4, &ox_flag); } else { - urshift(&ret.u64[LO_IDX], &ret.u64[HI_IDX], -i * 4); + urshift(&ret.VsrD(1), &ret.VsrD(0), -i * 4); } bcd_put_digit(&ret, bcd_preferred_sgn(sgnb, ps), 0); =20 @@ -3095,13 +3087,13 @@ uint32_t helper_bcdus(ppc_avr_t *r, ppc_avr_t *a, p= pc_avr_t *b, uint32_t ps) #endif if (i >=3D 32) { ox_flag =3D true; - ret.u64[LO_IDX] =3D ret.u64[HI_IDX] =3D 0; + ret.VsrD(1) =3D ret.VsrD(0) =3D 0; } else if (i <=3D -32) { - ret.u64[LO_IDX] =3D ret.u64[HI_IDX] =3D 0; + ret.VsrD(1) =3D ret.VsrD(0) =3D 0; } else if (i > 0) { - ulshift(&ret.u64[LO_IDX], &ret.u64[HI_IDX], i * 4, &ox_flag); + ulshift(&ret.VsrD(1), &ret.VsrD(0), i * 4, &ox_flag); } else { - urshift(&ret.u64[LO_IDX], &ret.u64[HI_IDX], -i * 4); + urshift(&ret.VsrD(1), &ret.VsrD(0), -i * 4); } *r =3D ret; =20 @@ -3121,7 +3113,7 @@ uint32_t helper_bcdsr(ppc_avr_t *r, ppc_avr_t *a, ppc= _avr_t *b, uint32_t ps) bool ox_flag =3D false; int sgnb =3D bcd_get_sgn(b); ppc_avr_t ret =3D *b; - ret.u64[LO_IDX] &=3D ~0xf; + ret.VsrD(1) &=3D ~0xf; =20 #if defined(HOST_WORDS_BIGENDIAN) int i =3D a->s8[7]; @@ -3142,9 +3134,9 @@ uint32_t helper_bcdsr(ppc_avr_t *r, ppc_avr_t *a, ppc= _avr_t *b, uint32_t ps) } =20 if (i > 0) { - ulshift(&ret.u64[LO_IDX], &ret.u64[HI_IDX], i * 4, &ox_flag); + ulshift(&ret.VsrD(1), &ret.VsrD(0), i * 4, &ox_flag); } else { - urshift(&ret.u64[LO_IDX], &ret.u64[HI_IDX], -i * 4); + urshift(&ret.VsrD(1), &ret.VsrD(0), -i * 4); =20 if (bcd_get_digit(&ret, 0, &invalid) >=3D 5) { bcd_add_mag(&ret, &ret, &bcd_one, &invalid, &unused); @@ -3178,19 +3170,19 @@ uint32_t helper_bcdtrunc(ppc_avr_t *r, ppc_avr_t *a= , ppc_avr_t *b, uint32_t ps) =20 if (i > 16 && i < 32) { mask =3D (uint64_t)-1 >> (128 - i * 4); - if (ret.u64[HI_IDX] & ~mask) { + if (ret.VsrD(0) & ~mask) { ox_flag =3D CRF_SO; } =20 - ret.u64[HI_IDX] &=3D mask; + ret.VsrD(0) &=3D mask; } else if (i >=3D 0 && i <=3D 16) { mask =3D (uint64_t)-1 >> (64 - i * 4); - if (ret.u64[HI_IDX] || (ret.u64[LO_IDX] & ~mask)) { + if (ret.VsrD(0) || (ret.VsrD(1) & ~mask)) { ox_flag =3D CRF_SO; } =20 - ret.u64[LO_IDX] &=3D mask; - ret.u64[HI_IDX] =3D 0; + ret.VsrD(1) &=3D mask; + ret.VsrD(0) =3D 0; } bcd_put_digit(&ret, bcd_preferred_sgn(bcd_get_sgn(b), ps), 0); *r =3D ret; @@ -3221,28 +3213,28 @@ uint32_t helper_bcdutrunc(ppc_avr_t *r, ppc_avr_t *= a, ppc_avr_t *b, uint32_t ps) #endif if (i > 16 && i < 33) { mask =3D (uint64_t)-1 >> (128 - i * 4); - if (ret.u64[HI_IDX] & ~mask) { + if (ret.VsrD(0) & ~mask) { ox_flag =3D CRF_SO; } =20 - ret.u64[HI_IDX] &=3D mask; + ret.VsrD(0) &=3D mask; } else if (i > 0 && i <=3D 16) { mask =3D (uint64_t)-1 >> (64 - i * 4); - if (ret.u64[HI_IDX] || (ret.u64[LO_IDX] & ~mask)) { + if (ret.VsrD(0) || (ret.VsrD(1) & ~mask)) { ox_flag =3D CRF_SO; } =20 - ret.u64[LO_IDX] &=3D mask; - ret.u64[HI_IDX] =3D 0; + ret.VsrD(1) &=3D mask; + ret.VsrD(0) =3D 0; } else if (i =3D=3D 0) { - if (ret.u64[HI_IDX] || ret.u64[LO_IDX]) { + if (ret.VsrD(0) || ret.VsrD(1)) { ox_flag =3D CRF_SO; } - ret.u64[HI_IDX] =3D ret.u64[LO_IDX] =3D 0; + ret.VsrD(0) =3D ret.VsrD(1) =3D 0; } =20 *r =3D ret; - if (r->u64[HI_IDX] =3D=3D 0 && r->u64[LO_IDX] =3D=3D 0) { + if (r->VsrD(0) =3D=3D 0 && r->VsrD(1) =3D=3D 0) { return ox_flag | CRF_EQ; } =20 @@ -3414,8 +3406,6 @@ void helper_vpermxor(ppc_avr_t *r, ppc_avr_t *a, ppc= _avr_t *b, ppc_avr_t *c) } =20 #undef VECTOR_FOR_INORDER_I -#undef HI_IDX -#undef LO_IDX =20 /*************************************************************************= ****/ /* SPE extension helpers */ --=20 2.11.0 From nobody Sun Apr 28 10:17:21 2024 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1548881027253373.0466624592382; Wed, 30 Jan 2019 12:43:47 -0800 (PST) Received: from localhost ([127.0.0.1]:43924 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gowi0-0004lX-7c for importer@patchew.org; Wed, 30 Jan 2019 15:43:44 -0500 Received: from eggs.gnu.org ([209.51.188.92]:47596) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gowbX-0007w6-Iu for qemu-devel@nongnu.org; Wed, 30 Jan 2019 15:37:04 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gowbV-0006iY-LO for qemu-devel@nongnu.org; Wed, 30 Jan 2019 15:37:03 -0500 Received: from chuckie.co.uk ([82.165.15.123]:45696 helo=s16892447.onlinehome-server.info) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gowbT-0006g7-66; Wed, 30 Jan 2019 15:36:59 -0500 Received: from host86-138-240-60.range86-138.btcentralplus.com ([86.138.240.60] helo=kentang.home) by s16892447.onlinehome-server.info with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.76) (envelope-from ) id 1gowbf-0006Io-BJ; Wed, 30 Jan 2019 20:37:12 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, qemu-ppc@nongnu.org, richard.henderson@linaro.org, david@gibson.dropbear.id.au Date: Wed, 30 Jan 2019 20:36:35 +0000 Message-Id: <20190130203638.21179-6-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190130203638.21179-1-mark.cave-ayland@ilande.co.uk> References: <20190130203638.21179-1-mark.cave-ayland@ilande.co.uk> X-SA-Exim-Connect-IP: 86.138.240.60 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk X-SA-Exim-Version: 4.2.1 (built Sun, 08 Jan 2012 02:45:44 +0000) X-SA-Exim-Scanned: Yes (on s16892447.onlinehome-server.info) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 82.165.15.123 Subject: [Qemu-devel] [PATCH v5 5/8] target/ppc: eliminate use of EL_IDX macros from int_helper.c 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" These macros can be eliminated by instead using the relavant Vsr* macros in the few locations where they appear. Signed-off-by: Mark Cave-Ayland Reviewed-by: Richard Henderson --- target/ppc/int_helper.c | 66 ++++++++++++++++++++-------------------------= ---- 1 file changed, 27 insertions(+), 39 deletions(-) diff --git a/target/ppc/int_helper.c b/target/ppc/int_helper.c index 7a9c02d4bb..355b6630a2 100644 --- a/target/ppc/int_helper.c +++ b/target/ppc/int_helper.c @@ -3306,12 +3306,7 @@ void helper_vncipherlast(ppc_avr_t *r, ppc_avr_t *a,= ppc_avr_t *b) *r =3D result; } =20 -#define ROTRu32(v, n) (((v) >> (n)) | ((v) << (32-n))) -#if defined(HOST_WORDS_BIGENDIAN) -#define EL_IDX(i) (i) -#else -#define EL_IDX(i) (3 - (i)) -#endif +#define ROTRu32(v, n) (((v) >> (n)) | ((v) << (32 - n))) =20 void helper_vshasigmaw(ppc_avr_t *r, ppc_avr_t *a, uint32_t st_six) { @@ -3319,40 +3314,34 @@ void helper_vshasigmaw(ppc_avr_t *r, ppc_avr_t *a,= uint32_t st_six) int six =3D st_six & 0xF; int i; =20 - VECTOR_FOR_INORDER_I(i, u32) { + for (i =3D 0; i < ARRAY_SIZE(r->u32); i++) { if (st =3D=3D 0) { if ((six & (0x8 >> i)) =3D=3D 0) { - r->u32[EL_IDX(i)] =3D ROTRu32(a->u32[EL_IDX(i)], 7) ^ - ROTRu32(a->u32[EL_IDX(i)], 18) ^ - (a->u32[EL_IDX(i)] >> 3); + r->VsrW(i) =3D ROTRu32(a->VsrW(i), 7) ^ + ROTRu32(a->VsrW(i), 18) ^ + (a->VsrW(i) >> 3); } else { /* six.bit[i] =3D=3D 1 */ - r->u32[EL_IDX(i)] =3D ROTRu32(a->u32[EL_IDX(i)], 17) ^ - ROTRu32(a->u32[EL_IDX(i)], 19) ^ - (a->u32[EL_IDX(i)] >> 10); + r->VsrW(i) =3D ROTRu32(a->VsrW(i), 17) ^ + ROTRu32(a->VsrW(i), 19) ^ + (a->VsrW(i) >> 10); } } else { /* st =3D=3D 1 */ if ((six & (0x8 >> i)) =3D=3D 0) { - r->u32[EL_IDX(i)] =3D ROTRu32(a->u32[EL_IDX(i)], 2) ^ - ROTRu32(a->u32[EL_IDX(i)], 13) ^ - ROTRu32(a->u32[EL_IDX(i)], 22); + r->VsrW(i) =3D ROTRu32(a->VsrW(i), 2) ^ + ROTRu32(a->VsrW(i), 13) ^ + ROTRu32(a->VsrW(i), 22); } else { /* six.bit[i] =3D=3D 1 */ - r->u32[EL_IDX(i)] =3D ROTRu32(a->u32[EL_IDX(i)], 6) ^ - ROTRu32(a->u32[EL_IDX(i)], 11) ^ - ROTRu32(a->u32[EL_IDX(i)], 25); + r->VsrW(i) =3D ROTRu32(a->VsrW(i), 6) ^ + ROTRu32(a->VsrW(i), 11) ^ + ROTRu32(a->VsrW(i), 25); } } } } =20 #undef ROTRu32 -#undef EL_IDX =20 #define ROTRu64(v, n) (((v) >> (n)) | ((v) << (64-n))) -#if defined(HOST_WORDS_BIGENDIAN) -#define EL_IDX(i) (i) -#else -#define EL_IDX(i) (1 - (i)) -#endif =20 void helper_vshasigmad(ppc_avr_t *r, ppc_avr_t *a, uint32_t st_six) { @@ -3360,33 +3349,32 @@ void helper_vshasigmad(ppc_avr_t *r, ppc_avr_t *a,= uint32_t st_six) int six =3D st_six & 0xF; int i; =20 - VECTOR_FOR_INORDER_I(i, u64) { + for (i =3D 0; i < ARRAY_SIZE(r->u64); i++) { if (st =3D=3D 0) { if ((six & (0x8 >> (2*i))) =3D=3D 0) { - r->u64[EL_IDX(i)] =3D ROTRu64(a->u64[EL_IDX(i)], 1) ^ - ROTRu64(a->u64[EL_IDX(i)], 8) ^ - (a->u64[EL_IDX(i)] >> 7); + r->VsrD(i) =3D ROTRu64(a->VsrD(i), 1) ^ + ROTRu64(a->VsrD(i), 8) ^ + (a->VsrD(i) >> 7); } else { /* six.bit[2*i] =3D=3D 1 */ - r->u64[EL_IDX(i)] =3D ROTRu64(a->u64[EL_IDX(i)], 19) ^ - ROTRu64(a->u64[EL_IDX(i)], 61) ^ - (a->u64[EL_IDX(i)] >> 6); + r->VsrD(i) =3D ROTRu64(a->VsrD(i), 19) ^ + ROTRu64(a->VsrD(i), 61) ^ + (a->VsrD(i) >> 6); } } else { /* st =3D=3D 1 */ if ((six & (0x8 >> (2*i))) =3D=3D 0) { - r->u64[EL_IDX(i)] =3D ROTRu64(a->u64[EL_IDX(i)], 28) ^ - ROTRu64(a->u64[EL_IDX(i)], 34) ^ - ROTRu64(a->u64[EL_IDX(i)], 39); + r->VsrD(i) =3D ROTRu64(a->VsrD(i), 28) ^ + ROTRu64(a->VsrD(i), 34) ^ + ROTRu64(a->VsrD(i), 39); } else { /* six.bit[2*i] =3D=3D 1 */ - r->u64[EL_IDX(i)] =3D ROTRu64(a->u64[EL_IDX(i)], 14) ^ - ROTRu64(a->u64[EL_IDX(i)], 18) ^ - ROTRu64(a->u64[EL_IDX(i)], 41); + r->VsrD(i) =3D ROTRu64(a->VsrD(i), 14) ^ + ROTRu64(a->VsrD(i), 18) ^ + ROTRu64(a->VsrD(i), 41); } } } } =20 #undef ROTRu64 -#undef EL_IDX =20 void helper_vpermxor(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t = *c) { --=20 2.11.0 From nobody Sun Apr 28 10:17:21 2024 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 Return-Path: Received: from lists.gnu.org (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1548880913466209.3239810827405; Wed, 30 Jan 2019 12:41:53 -0800 (PST) Received: from localhost ([127.0.0.1]:43901 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gowg7-00038o-FC for importer@patchew.org; Wed, 30 Jan 2019 15:41:47 -0500 Received: from eggs.gnu.org ([209.51.188.92]:47595) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gowbX-0007w5-Im for qemu-devel@nongnu.org; Wed, 30 Jan 2019 15:37:04 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gowbV-0006j3-VB for qemu-devel@nongnu.org; Wed, 30 Jan 2019 15:37:03 -0500 Received: from chuckie.co.uk ([82.165.15.123]:45702 helo=s16892447.onlinehome-server.info) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gowbV-0006iJ-NX; Wed, 30 Jan 2019 15:37:01 -0500 Received: from host86-138-240-60.range86-138.btcentralplus.com ([86.138.240.60] helo=kentang.home) by s16892447.onlinehome-server.info with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.76) (envelope-from ) id 1gowbg-0006Io-SV; Wed, 30 Jan 2019 20:37:13 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, qemu-ppc@nongnu.org, richard.henderson@linaro.org, david@gibson.dropbear.id.au Date: Wed, 30 Jan 2019 20:36:36 +0000 Message-Id: <20190130203638.21179-7-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190130203638.21179-1-mark.cave-ayland@ilande.co.uk> References: <20190130203638.21179-1-mark.cave-ayland@ilande.co.uk> X-SA-Exim-Connect-IP: 86.138.240.60 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk X-SA-Exim-Version: 4.2.1 (built Sun, 08 Jan 2012 02:45:44 +0000) X-SA-Exim-Scanned: Yes (on s16892447.onlinehome-server.info) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 82.165.15.123 Subject: [Qemu-devel] [PATCH v5 6/8] target/ppc: simplify VEXT_SIGNED macro in int_helper.c 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" As pointed out by Richard: it does not need the mask argument, nor does it = need the recast argument. The masking is implied by the cast argument, and the recast is implied by the assignment. Signed-off-by: Mark Cave-Ayland Reviewed-by: Richard Henderson --- target/ppc/int_helper.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/target/ppc/int_helper.c b/target/ppc/int_helper.c index 355b6630a2..ffc9cbc4ed 100644 --- a/target/ppc/int_helper.c +++ b/target/ppc/int_helper.c @@ -2024,19 +2024,19 @@ void helper_xxinsertw(CPUPPCState *env, target_ulon= g xtn, putVSR(xtn, &xt, env); } =20 -#define VEXT_SIGNED(name, element, mask, cast, recast) \ +#define VEXT_SIGNED(name, element, cast) \ void helper_##name(ppc_avr_t *r, ppc_avr_t *b) \ { \ int i; \ VECTOR_FOR_INORDER_I(i, element) { \ - r->element[i] =3D (recast)((cast)(b->element[i] & mask)); \ + r->element[i] =3D (cast)b->element[i]; \ } \ } -VEXT_SIGNED(vextsb2w, s32, UINT8_MAX, int8_t, int32_t) -VEXT_SIGNED(vextsb2d, s64, UINT8_MAX, int8_t, int64_t) -VEXT_SIGNED(vextsh2w, s32, UINT16_MAX, int16_t, int32_t) -VEXT_SIGNED(vextsh2d, s64, UINT16_MAX, int16_t, int64_t) -VEXT_SIGNED(vextsw2d, s64, UINT32_MAX, int32_t, int64_t) +VEXT_SIGNED(vextsb2w, s32, int8_t) +VEXT_SIGNED(vextsb2d, s64, int8_t) +VEXT_SIGNED(vextsh2w, s32, int16_t) +VEXT_SIGNED(vextsh2d, s64, int16_t) +VEXT_SIGNED(vextsw2d, s64, int32_t) #undef VEXT_SIGNED =20 #define VNEG(name, element) \ --=20 2.11.0 From nobody Sun Apr 28 10:17:21 2024 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1548880907798423.7576466680391; Wed, 30 Jan 2019 12:41:47 -0800 (PST) Received: from localhost ([127.0.0.1]:43897 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gowg4-000367-Pd for importer@patchew.org; Wed, 30 Jan 2019 15:41:44 -0500 Received: from eggs.gnu.org ([209.51.188.92]:47626) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gowbY-0007xU-OV for qemu-devel@nongnu.org; Wed, 30 Jan 2019 15:37:06 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gowbX-0006jo-I2 for qemu-devel@nongnu.org; Wed, 30 Jan 2019 15:37:04 -0500 Received: from chuckie.co.uk ([82.165.15.123]:45706 helo=s16892447.onlinehome-server.info) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gowbW-0006iV-7Z; Wed, 30 Jan 2019 15:37:02 -0500 Received: from host86-138-240-60.range86-138.btcentralplus.com ([86.138.240.60] helo=kentang.home) by s16892447.onlinehome-server.info with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.76) (envelope-from ) id 1gowbi-0006Io-4k; Wed, 30 Jan 2019 20:37:15 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, qemu-ppc@nongnu.org, richard.henderson@linaro.org, david@gibson.dropbear.id.au Date: Wed, 30 Jan 2019 20:36:37 +0000 Message-Id: <20190130203638.21179-8-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190130203638.21179-1-mark.cave-ayland@ilande.co.uk> References: <20190130203638.21179-1-mark.cave-ayland@ilande.co.uk> X-SA-Exim-Connect-IP: 86.138.240.60 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk X-SA-Exim-Version: 4.2.1 (built Sun, 08 Jan 2012 02:45:44 +0000) X-SA-Exim-Scanned: Yes (on s16892447.onlinehome-server.info) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 82.165.15.123 Subject: [Qemu-devel] [PATCH v5 7/8] target/ppc: remove ROTRu32 and ROTRu64 macros from int_helper.c 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Richard points out that these macros suffer from a -fsanitize=3Dshift bug i= n that they improperly handle n =3D=3D 0 turning it into a shift by 32/64 respecti= vely. Replace them with QEMU's existing ror32() and ror64() functions instead. Signed-off-by: Mark Cave-Ayland Reviewed-by: Richard Henderson --- target/ppc/int_helper.c | 48 ++++++++++++++++++++-------------------------= --- 1 file changed, 20 insertions(+), 28 deletions(-) diff --git a/target/ppc/int_helper.c b/target/ppc/int_helper.c index ffc9cbc4ed..916d10c25b 100644 --- a/target/ppc/int_helper.c +++ b/target/ppc/int_helper.c @@ -3306,8 +3306,6 @@ void helper_vncipherlast(ppc_avr_t *r, ppc_avr_t *a, = ppc_avr_t *b) *r =3D result; } =20 -#define ROTRu32(v, n) (((v) >> (n)) | ((v) << (32 - n))) - void helper_vshasigmaw(ppc_avr_t *r, ppc_avr_t *a, uint32_t st_six) { int st =3D (st_six & 0x10) !=3D 0; @@ -3317,32 +3315,28 @@ void helper_vshasigmaw(ppc_avr_t *r, ppc_avr_t *a,= uint32_t st_six) for (i =3D 0; i < ARRAY_SIZE(r->u32); i++) { if (st =3D=3D 0) { if ((six & (0x8 >> i)) =3D=3D 0) { - r->VsrW(i) =3D ROTRu32(a->VsrW(i), 7) ^ - ROTRu32(a->VsrW(i), 18) ^ + r->VsrW(i) =3D ror32(a->VsrW(i), 7) ^ + ror32(a->VsrW(i), 18) ^ (a->VsrW(i) >> 3); } else { /* six.bit[i] =3D=3D 1 */ - r->VsrW(i) =3D ROTRu32(a->VsrW(i), 17) ^ - ROTRu32(a->VsrW(i), 19) ^ + r->VsrW(i) =3D ror32(a->VsrW(i), 17) ^ + ror32(a->VsrW(i), 19) ^ (a->VsrW(i) >> 10); } } else { /* st =3D=3D 1 */ if ((six & (0x8 >> i)) =3D=3D 0) { - r->VsrW(i) =3D ROTRu32(a->VsrW(i), 2) ^ - ROTRu32(a->VsrW(i), 13) ^ - ROTRu32(a->VsrW(i), 22); + r->VsrW(i) =3D ror32(a->VsrW(i), 2) ^ + ror32(a->VsrW(i), 13) ^ + ror32(a->VsrW(i), 22); } else { /* six.bit[i] =3D=3D 1 */ - r->VsrW(i) =3D ROTRu32(a->VsrW(i), 6) ^ - ROTRu32(a->VsrW(i), 11) ^ - ROTRu32(a->VsrW(i), 25); + r->VsrW(i) =3D ror32(a->VsrW(i), 6) ^ + ror32(a->VsrW(i), 11) ^ + ror32(a->VsrW(i), 25); } } } } =20 -#undef ROTRu32 - -#define ROTRu64(v, n) (((v) >> (n)) | ((v) << (64-n))) - void helper_vshasigmad(ppc_avr_t *r, ppc_avr_t *a, uint32_t st_six) { int st =3D (st_six & 0x10) !=3D 0; @@ -3352,30 +3346,28 @@ void helper_vshasigmad(ppc_avr_t *r, ppc_avr_t *a,= uint32_t st_six) for (i =3D 0; i < ARRAY_SIZE(r->u64); i++) { if (st =3D=3D 0) { if ((six & (0x8 >> (2*i))) =3D=3D 0) { - r->VsrD(i) =3D ROTRu64(a->VsrD(i), 1) ^ - ROTRu64(a->VsrD(i), 8) ^ + r->VsrD(i) =3D ror64(a->VsrD(i), 1) ^ + ror64(a->VsrD(i), 8) ^ (a->VsrD(i) >> 7); } else { /* six.bit[2*i] =3D=3D 1 */ - r->VsrD(i) =3D ROTRu64(a->VsrD(i), 19) ^ - ROTRu64(a->VsrD(i), 61) ^ + r->VsrD(i) =3D ror64(a->VsrD(i), 19) ^ + ror64(a->VsrD(i), 61) ^ (a->VsrD(i) >> 6); } } else { /* st =3D=3D 1 */ if ((six & (0x8 >> (2*i))) =3D=3D 0) { - r->VsrD(i) =3D ROTRu64(a->VsrD(i), 28) ^ - ROTRu64(a->VsrD(i), 34) ^ - ROTRu64(a->VsrD(i), 39); + r->VsrD(i) =3D ror64(a->VsrD(i), 28) ^ + ror64(a->VsrD(i), 34) ^ + ror64(a->VsrD(i), 39); } else { /* six.bit[2*i] =3D=3D 1 */ - r->VsrD(i) =3D ROTRu64(a->VsrD(i), 14) ^ - ROTRu64(a->VsrD(i), 18) ^ - ROTRu64(a->VsrD(i), 41); + r->VsrD(i) =3D ror64(a->VsrD(i), 14) ^ + ror64(a->VsrD(i), 18) ^ + ror64(a->VsrD(i), 41); } } } } =20 -#undef ROTRu64 - void helper_vpermxor(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t = *c) { ppc_avr_t result; --=20 2.11.0 From nobody Sun Apr 28 10:17:21 2024 Delivered-To: importer@patchew.org Received-SPF: temperror (zoho.com: Error in retrieving data from DNS) 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=temperror (zoho.com: Error in retrieving data from DNS) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1548881122998947.5178624790328; Wed, 30 Jan 2019 12:45:22 -0800 (PST) Received: from localhost ([127.0.0.1]:43942 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gowjM-00063C-Iu for importer@patchew.org; Wed, 30 Jan 2019 15:45:08 -0500 Received: from eggs.gnu.org ([209.51.188.92]:47673) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gowbZ-0007yy-W7 for qemu-devel@nongnu.org; Wed, 30 Jan 2019 15:37:07 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gowbY-0006ka-0Q for qemu-devel@nongnu.org; Wed, 30 Jan 2019 15:37:05 -0500 Received: from chuckie.co.uk ([82.165.15.123]:45708 helo=s16892447.onlinehome-server.info) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gowbX-0006jR-Lh; Wed, 30 Jan 2019 15:37:03 -0500 Received: from host86-138-240-60.range86-138.btcentralplus.com ([86.138.240.60] helo=kentang.home) by s16892447.onlinehome-server.info with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.76) (envelope-from ) id 1gowbj-0006Io-RQ; Wed, 30 Jan 2019 20:37:17 +0000 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, qemu-ppc@nongnu.org, richard.henderson@linaro.org, david@gibson.dropbear.id.au Date: Wed, 30 Jan 2019 20:36:38 +0000 Message-Id: <20190130203638.21179-9-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20190130203638.21179-1-mark.cave-ayland@ilande.co.uk> References: <20190130203638.21179-1-mark.cave-ayland@ilande.co.uk> X-SA-Exim-Connect-IP: 86.138.240.60 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk X-SA-Exim-Version: 4.2.1 (built Sun, 08 Jan 2012 02:45:44 +0000) X-SA-Exim-Scanned: Yes (on s16892447.onlinehome-server.info) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 82.165.15.123 Subject: [Qemu-devel] [PATCH v5 8/8] target/ppc: remove various HOST_WORDS_BIGENDIAN hacks in int_helper.c 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: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Following on from the previous work, there are numerous endian-related hacks in int_helper.c that can now be replaced with Vsr* macros. There are also a few places where the VECTOR_FOR_INORDER_I macro can be replaced with a normal iterator since the processing order is irrelevant. Signed-off-by: Mark Cave-Ayland Reviewed-by: Richard Henderson --- target/ppc/int_helper.c | 155 ++++++++++++++------------------------------= ---- 1 file changed, 45 insertions(+), 110 deletions(-) diff --git a/target/ppc/int_helper.c b/target/ppc/int_helper.c index 916d10c25b..8efc283388 100644 --- a/target/ppc/int_helper.c +++ b/target/ppc/int_helper.c @@ -443,8 +443,8 @@ void helper_lvsl(ppc_avr_t *r, target_ulong sh) { int i, j =3D (sh & 0xf); =20 - VECTOR_FOR_INORDER_I(i, u8) { - r->u8[i] =3D j++; + for (i =3D 0; i < ARRAY_SIZE(r->u8); i++) { + r->VsrB(i) =3D j++; } } =20 @@ -452,18 +452,14 @@ void helper_lvsr(ppc_avr_t *r, target_ulong sh) { int i, j =3D 0x10 - (sh & 0xf); =20 - VECTOR_FOR_INORDER_I(i, u8) { - r->u8[i] =3D j++; + for (i =3D 0; i < ARRAY_SIZE(r->u8); i++) { + r->VsrB(i) =3D j++; } } =20 void helper_mtvscr(CPUPPCState *env, ppc_avr_t *r) { -#if defined(HOST_WORDS_BIGENDIAN) - env->vscr =3D r->u32[3]; -#else - env->vscr =3D r->u32[0]; -#endif + env->vscr =3D r->VsrW(3); set_flush_to_zero(vscr_nj, &env->vec_status); } =20 @@ -870,8 +866,8 @@ target_ulong helper_vclzlsbb(ppc_avr_t *r) { target_ulong count =3D 0; int i; - VECTOR_FOR_INORDER_I(i, u8) { - if (r->u8[i] & 0x01) { + for (i =3D 0; i < ARRAY_SIZE(r->u8); i++) { + if (r->VsrB(i) & 0x01) { break; } count++; @@ -883,12 +879,8 @@ target_ulong helper_vctzlsbb(ppc_avr_t *r) { target_ulong count =3D 0; int i; -#if defined(HOST_WORDS_BIGENDIAN) for (i =3D ARRAY_SIZE(r->u8) - 1; i >=3D 0; i--) { -#else - for (i =3D 0; i < ARRAY_SIZE(r->u8); i++) { -#endif - if (r->u8[i] & 0x01) { + if (r->VsrB(i) & 0x01) { break; } count++; @@ -1137,18 +1129,14 @@ void helper_vperm(CPUPPCState *env, ppc_avr_t *r, p= pc_avr_t *a, ppc_avr_t *b, ppc_avr_t result; int i; =20 - VECTOR_FOR_INORDER_I(i, u8) { - int s =3D c->u8[i] & 0x1f; -#if defined(HOST_WORDS_BIGENDIAN) + for (i =3D 0; i < ARRAY_SIZE(r->u8); i++) { + int s =3D c->VsrB(i) & 0x1f; int index =3D s & 0xf; -#else - int index =3D 15 - (s & 0xf); -#endif =20 if (s & 0x10) { - result.u8[i] =3D b->u8[index]; + result.VsrB(i) =3D b->VsrB(index); } else { - result.u8[i] =3D a->u8[index]; + result.VsrB(i) =3D a->VsrB(index); } } *r =3D result; @@ -1160,18 +1148,14 @@ void helper_vpermr(CPUPPCState *env, ppc_avr_t *r, = ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t result; int i; =20 - VECTOR_FOR_INORDER_I(i, u8) { - int s =3D c->u8[i] & 0x1f; -#if defined(HOST_WORDS_BIGENDIAN) + for (i =3D 0; i < ARRAY_SIZE(r->u8); i++) { + int s =3D c->VsrB(i) & 0x1f; int index =3D 15 - (s & 0xf); -#else - int index =3D s & 0xf; -#endif =20 if (s & 0x10) { - result.u8[i] =3D a->u8[index]; + result.VsrB(i) =3D a->VsrB(index); } else { - result.u8[i] =3D b->u8[index]; + result.VsrB(i) =3D b->VsrB(index); } } *r =3D result; @@ -1868,25 +1852,14 @@ void helper_vsldoi(ppc_avr_t *r, ppc_avr_t *a, ppc_= avr_t *b, uint32_t shift) int i; ppc_avr_t result; =20 -#if defined(HOST_WORDS_BIGENDIAN) for (i =3D 0; i < ARRAY_SIZE(r->u8); i++) { int index =3D sh + i; if (index > 0xf) { - result.u8[i] =3D b->u8[index - 0x10]; - } else { - result.u8[i] =3D a->u8[index]; - } - } -#else - for (i =3D 0; i < ARRAY_SIZE(r->u8); i++) { - int index =3D (16 - sh) + i; - if (index > 0xf) { - result.u8[i] =3D a->u8[index - 0x10]; + result.VsrB(i) =3D b->VsrB(index - 0x10); } else { - result.u8[i] =3D b->u8[index]; + result.VsrB(i) =3D a->VsrB(index); } } -#endif *r =3D result; } =20 @@ -1905,25 +1878,20 @@ void helper_vslo(ppc_avr_t *r, ppc_avr_t *a, ppc_av= r_t *b) =20 /* Experimental testing shows that hardware masks the immediate. */ #define _SPLAT_MASKED(element) (splat & (ARRAY_SIZE(r->element) - 1)) -#if defined(HOST_WORDS_BIGENDIAN) #define SPLAT_ELEMENT(element) _SPLAT_MASKED(element) -#else -#define SPLAT_ELEMENT(element) \ - (ARRAY_SIZE(r->element) - 1 - _SPLAT_MASKED(element)) -#endif -#define VSPLT(suffix, element) \ +#define VSPLT(suffix, element, access) \ void helper_vsplt##suffix(ppc_avr_t *r, ppc_avr_t *b, uint32_t splat) \ { \ - uint32_t s =3D b->element[SPLAT_ELEMENT(element)]; \ + uint32_t s =3D b->access(SPLAT_ELEMENT(element)); \ int i; \ \ for (i =3D 0; i < ARRAY_SIZE(r->element); i++) { \ - r->element[i] =3D s; \ + r->access(i) =3D s; \ } \ } -VSPLT(b, u8) -VSPLT(h, u16) -VSPLT(w, u32) +VSPLT(b, u8, VsrB) +VSPLT(h, u16, VsrH) +VSPLT(w, u32, VsrW) #undef VSPLT #undef SPLAT_ELEMENT #undef _SPLAT_MASKED @@ -1984,17 +1952,10 @@ void helper_xxextractuw(CPUPPCState *env, target_ul= ong xtn, getVSR(xbn, &xb, env); memset(&xt, 0, sizeof(xt)); =20 -#if defined(HOST_WORDS_BIGENDIAN) ext_index =3D index; for (i =3D 0; i < es; i++, ext_index++) { - xt.u8[8 - es + i] =3D xb.u8[ext_index % 16]; - } -#else - ext_index =3D 15 - index; - for (i =3D es - 1; i >=3D 0; i--, ext_index--) { - xt.u8[8 + i] =3D xb.u8[ext_index % 16]; + xt.VsrB(8 - es + i) =3D xb.VsrB(ext_index % 16); } -#endif =20 putVSR(xtn, &xt, env); } @@ -2009,17 +1970,10 @@ void helper_xxinsertw(CPUPPCState *env, target_ulon= g xtn, getVSR(xbn, &xb, env); getVSR(xtn, &xt, env); =20 -#if defined(HOST_WORDS_BIGENDIAN) ins_index =3D index; for (i =3D 0; i < es && ins_index < 16; i++, ins_index++) { - xt.u8[ins_index] =3D xb.u8[8 - es + i]; - } -#else - ins_index =3D 15 - index; - for (i =3D es - 1; i >=3D 0 && ins_index >=3D 0; i--, ins_index--) { - xt.u8[ins_index] =3D xb.u8[8 + i]; + xt.VsrB(ins_index) =3D xb.VsrB(8 - es + i); } -#endif =20 putVSR(xtn, &xt, env); } @@ -2028,7 +1982,7 @@ void helper_xxinsertw(CPUPPCState *env, target_ulong = xtn, void helper_##name(ppc_avr_t *r, ppc_avr_t *b) \ { \ int i; \ - VECTOR_FOR_INORDER_I(i, element) { \ + for (i =3D 0; i < ARRAY_SIZE(r->element); i++) { \ r->element[i] =3D (cast)b->element[i]; \ } \ } @@ -2043,7 +1997,7 @@ VEXT_SIGNED(vextsw2d, s64, int32_t) void helper_##name(ppc_avr_t *r, ppc_avr_t *b) \ { \ int i; \ - VECTOR_FOR_INORDER_I(i, element) { \ + for (i =3D 0; i < ARRAY_SIZE(r->element); i++) { \ r->element[i] =3D -b->element[i]; \ } \ } @@ -2115,17 +2069,13 @@ void helper_vsumsws(CPUPPCState *env, ppc_avr_t *r,= ppc_avr_t *a, ppc_avr_t *b) ppc_avr_t result; int sat =3D 0; =20 -#if defined(HOST_WORDS_BIGENDIAN) - upper =3D ARRAY_SIZE(r->s32)-1; -#else - upper =3D 0; -#endif - t =3D (int64_t)b->s32[upper]; + upper =3D ARRAY_SIZE(r->s32) - 1; + t =3D (int64_t)b->VsrSW(upper); for (i =3D 0; i < ARRAY_SIZE(r->s32); i++) { - t +=3D a->s32[i]; - result.s32[i] =3D 0; + t +=3D a->VsrSW(i); + result.VsrSW(i) =3D 0; } - result.s32[upper] =3D cvtsdsw(t, &sat); + result.VsrSW(upper) =3D cvtsdsw(t, &sat); *r =3D result; =20 if (sat) { @@ -2139,19 +2089,15 @@ void helper_vsum2sws(CPUPPCState *env, ppc_avr_t *r= , ppc_avr_t *a, ppc_avr_t *b) ppc_avr_t result; int sat =3D 0; =20 -#if defined(HOST_WORDS_BIGENDIAN) upper =3D 1; -#else - upper =3D 0; -#endif for (i =3D 0; i < ARRAY_SIZE(r->u64); i++) { - int64_t t =3D (int64_t)b->s32[upper + i * 2]; + int64_t t =3D (int64_t)b->VsrSW(upper + i * 2); =20 - result.u64[i] =3D 0; + result.VsrW(i) =3D 0; for (j =3D 0; j < ARRAY_SIZE(r->u64); j++) { - t +=3D a->s32[2 * i + j]; + t +=3D a->VsrSW(2 * i + j); } - result.s32[upper + i * 2] =3D cvtsdsw(t, &sat); + result.VsrSW(upper + i * 2) =3D cvtsdsw(t, &sat); } =20 *r =3D result; @@ -2276,7 +2222,7 @@ VUPK(lsw, s64, s32, UPKLO) { \ int i; \ \ - VECTOR_FOR_INORDER_I(i, element) { \ + for (i =3D 0; i < ARRAY_SIZE(r->element); i++) { \ r->element[i] =3D name(b->element[i]); \ } \ } @@ -2616,20 +2562,12 @@ static int bcd_cmp_zero(ppc_avr_t *bcd) =20 static uint16_t get_national_digit(ppc_avr_t *reg, int n) { -#if defined(HOST_WORDS_BIGENDIAN) - return reg->u16[7 - n]; -#else - return reg->u16[n]; -#endif + return reg->VsrH(7 - n); } =20 static void set_national_digit(ppc_avr_t *reg, uint8_t val, int n) { -#if defined(HOST_WORDS_BIGENDIAN) - reg->u16[7 - n] =3D val; -#else - reg->u16[n] =3D val; -#endif + reg->VsrH(7 - n) =3D val; } =20 static int bcd_cmp_mag(ppc_avr_t *a, ppc_avr_t *b) @@ -3373,14 +3311,11 @@ void helper_vpermxor(ppc_avr_t *r, ppc_avr_t *a, p= pc_avr_t *b, ppc_avr_t *c) ppc_avr_t result; int i; =20 - VECTOR_FOR_INORDER_I(i, u8) { - int indexA =3D c->u8[i] >> 4; - int indexB =3D c->u8[i] & 0xF; -#if defined(HOST_WORDS_BIGENDIAN) - result.u8[i] =3D a->u8[indexA] ^ b->u8[indexB]; -#else - result.u8[i] =3D a->u8[15-indexA] ^ b->u8[15-indexB]; -#endif + for (i =3D 0; i < ARRAY_SIZE(r->u8); i++) { + int indexA =3D c->VsrB(i) >> 4; + int indexB =3D c->VsrB(i) & 0xF; + + result.VsrB(i) =3D a->VsrB(indexA) ^ b->VsrB(indexB); } *r =3D result; } --=20 2.11.0