[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v4 56/64] target-ppc: Use ctpop helper
From: |
Richard Henderson |
Subject: |
[Qemu-devel] [PATCH v4 56/64] target-ppc: Use ctpop helper |
Date: |
Wed, 23 Nov 2016 14:01:53 +0100 |
Signed-off-by: Richard Henderson <address@hidden>
---
target-ppc/helper.h | 3 +--
target-ppc/int_helper.c | 18 +++---------------
target-ppc/translate.c | 6 +++++-
3 files changed, 9 insertions(+), 18 deletions(-)
diff --git a/target-ppc/helper.h b/target-ppc/helper.h
index 1ed1d2c..0a8fbba 100644
--- a/target-ppc/helper.h
+++ b/target-ppc/helper.h
@@ -39,12 +39,11 @@ DEF_HELPER_4(divweu, tl, env, tl, tl, i32)
DEF_HELPER_4(divwe, tl, env, tl, tl, i32)
DEF_HELPER_FLAGS_1(popcntb, TCG_CALL_NO_RWG_SE, tl, tl)
-DEF_HELPER_FLAGS_1(popcntw, TCG_CALL_NO_RWG_SE, tl, tl)
DEF_HELPER_FLAGS_2(cmpb, TCG_CALL_NO_RWG_SE, tl, tl, tl)
DEF_HELPER_3(sraw, tl, env, tl, tl)
#if defined(TARGET_PPC64)
DEF_HELPER_FLAGS_2(cmpeqb, TCG_CALL_NO_RWG_SE, i32, tl, tl)
-DEF_HELPER_FLAGS_1(popcntd, TCG_CALL_NO_RWG_SE, tl, tl)
+DEF_HELPER_FLAGS_1(popcntw, TCG_CALL_NO_RWG_SE, tl, tl)
DEF_HELPER_FLAGS_2(bpermd, TCG_CALL_NO_RWG_SE, i64, i64, i64)
DEF_HELPER_3(srad, tl, env, tl, tl)
DEF_HELPER_0(darn32, tl)
diff --git a/target-ppc/int_helper.c b/target-ppc/int_helper.c
index a6486ce..dcd5d42 100644
--- a/target-ppc/int_helper.c
+++ b/target-ppc/int_helper.c
@@ -272,6 +272,7 @@ target_ulong helper_srad(CPUPPCState *env, target_ulong
value,
#if defined(TARGET_PPC64)
target_ulong helper_popcntb(target_ulong val)
{
+ /* Note that we don't fold past bytes */
val = (val & 0x5555555555555555ULL) + ((val >> 1) &
0x5555555555555555ULL);
val = (val & 0x3333333333333333ULL) + ((val >> 2) &
@@ -283,6 +284,7 @@ target_ulong helper_popcntb(target_ulong val)
target_ulong helper_popcntw(target_ulong val)
{
+ /* Note that we don't fold past words. */
val = (val & 0x5555555555555555ULL) + ((val >> 1) &
0x5555555555555555ULL);
val = (val & 0x3333333333333333ULL) + ((val >> 2) &
@@ -295,29 +297,15 @@ target_ulong helper_popcntw(target_ulong val)
0x0000ffff0000ffffULL);
return val;
}
-
-target_ulong helper_popcntd(target_ulong val)
-{
- return ctpop64(val);
-}
#else
target_ulong helper_popcntb(target_ulong val)
{
+ /* Note that we don't fold past bytes */
val = (val & 0x55555555) + ((val >> 1) & 0x55555555);
val = (val & 0x33333333) + ((val >> 2) & 0x33333333);
val = (val & 0x0f0f0f0f) + ((val >> 4) & 0x0f0f0f0f);
return val;
}
-
-target_ulong helper_popcntw(target_ulong val)
-{
- val = (val & 0x55555555) + ((val >> 1) & 0x55555555);
- val = (val & 0x33333333) + ((val >> 2) & 0x33333333);
- val = (val & 0x0f0f0f0f) + ((val >> 4) & 0x0f0f0f0f);
- val = (val & 0x00ff00ff) + ((val >> 8) & 0x00ff00ff);
- val = (val & 0x0000ffff) + ((val >> 16) & 0x0000ffff);
- return val;
-}
#endif
/*****************************************************************************/
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index 1224f56..1212180 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -1844,14 +1844,18 @@ static void gen_popcntb(DisasContext *ctx)
static void gen_popcntw(DisasContext *ctx)
{
+#if defined(TARGET_PPC64)
gen_helper_popcntw(cpu_gpr[rA(ctx->opcode)], cpu_gpr[rS(ctx->opcode)]);
+#else
+ tcg_gen_ctpop_i32(cpu_gpr[rA(ctx->opcode)], cpu_gpr[rS(ctx->opcode)]);
+#endif
}
#if defined(TARGET_PPC64)
/* popcntd: PowerPC 2.06 specification */
static void gen_popcntd(DisasContext *ctx)
{
- gen_helper_popcntd(cpu_gpr[rA(ctx->opcode)], cpu_gpr[rS(ctx->opcode)]);
+ tcg_gen_ctpop_i64(cpu_gpr[rA(ctx->opcode)], cpu_gpr[rS(ctx->opcode)]);
}
#endif
--
2.7.4
- [Qemu-devel] [PATCH v4 45/64] tcg/i386: Fuly convert tcg_target_op_def, (continued)
- [Qemu-devel] [PATCH v4 45/64] tcg/i386: Fuly convert tcg_target_op_def, Richard Henderson, 2016/11/23
- [Qemu-devel] [PATCH v4 51/64] target-arm: Use clrsb helper, Richard Henderson, 2016/11/23
- [Qemu-devel] [PATCH v4 49/64] tcg/i386: Rely on undefined/undocumented behaviour of BSF/BSR, Richard Henderson, 2016/11/23
- [Qemu-devel] [PATCH v4 48/64] tcg/i386: Handle ctz and clz opcodes, Richard Henderson, 2016/11/23
- [Qemu-devel] [PATCH v4 50/64] tcg: Add helpers for clrsb, Richard Henderson, 2016/11/23
- [Qemu-devel] [PATCH v4 52/64] target-tricore: Use clrsb helper, Richard Henderson, 2016/11/23
- [Qemu-devel] [PATCH v4 53/64] target-xtensa: Use clrsb helper, Richard Henderson, 2016/11/23
- [Qemu-devel] [PATCH v4 54/64] tcg: Add opcode for ctpop, Richard Henderson, 2016/11/23
- [Qemu-devel] [PATCH v4 55/64] target-alpha: Use ctpop helper, Richard Henderson, 2016/11/23
- [Qemu-devel] [PATCH v4 56/64] target-ppc: Use ctpop helper,
Richard Henderson <=
- [Qemu-devel] [PATCH v4 57/64] target-s390x: Avoid a loop for popcnt, Richard Henderson, 2016/11/23
- [Qemu-devel] [PATCH v4 58/64] target-sparc: Use ctpop helper, Richard Henderson, 2016/11/23
- [Qemu-devel] [PATCH v4 59/64] target-tilegx: Use ctpop helper, Richard Henderson, 2016/11/23
- [Qemu-devel] [PATCH v4 60/64] target-i386: Use ctpop helper, Richard Henderson, 2016/11/23
- [Qemu-devel] [PATCH v4 61/64] qemu/host-utils.h: Reduce the operation count in the fallback ctpop, Richard Henderson, 2016/11/23
- [Qemu-devel] [PATCH v4 63/64] tcg/ppc: Handle ctpop opcode, Richard Henderson, 2016/11/23
- [Qemu-devel] [PATCH v4 62/64] tcg: Use ctpop to generate ctz if needed, Richard Henderson, 2016/11/23
- [Qemu-devel] [PATCH v4 64/64] tcg/i386: Handle ctpop opcode, Richard Henderson, 2016/11/23
- Re: [Qemu-devel] [PATCH v4 00/64] tcg 2.9 patch queue, no-reply, 2016/11/29