From: David Gibson <david@gibson.dropbear.id.au>
To: "Philippe Mathieu-Daudé" <f4bug@amsat.org>
Cc: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>,
qemu-devel@nongnu.org, Aurelien Jarno <aurelien@aurel32.net>,
Laurent Vivier <lvivier@redhat.com>,
Alexander Graf <agraf@suse.de>,
qemu-ppc@nongnu.org, Richard Henderson <rth@twiddle.net>
Subject: Re: [Qemu-devel] [PATCH 7/8] target/ppc: optimize various functions using extract op
Date: Fri, 12 May 2017 15:16:10 +1000 [thread overview]
Message-ID: <20170512051610.GC12908@umbus.fritz.box> (raw)
In-Reply-To: <3109e990-3c5a-fb7d-515d-af3771ddfa50@amsat.org>
[-- Attachment #1: Type: text/plain, Size: 4093 bytes --]
On Thu, May 11, 2017 at 10:48:42PM -0300, Philippe Mathieu-Daudé wrote:
> Hi Nikunj,
>
> On 05/11/2017 01:54 AM, Nikunj A Dadhania wrote:
> > Philippe Mathieu-Daudé <f4bug@amsat.org> writes:
> >
> > > Applied using Coccinelle script.
> > >
> > > Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> > > ---
> > > target/ppc/translate.c | 9 +++------
> > > target/ppc/translate/vsx-impl.inc.c | 21 +++++++--------------
> > > 2 files changed, 10 insertions(+), 20 deletions(-)
> > >
> > > diff --git a/target/ppc/translate.c b/target/ppc/translate.c
> > > index f40b5a1abf..64ab412bf3 100644
> > > --- a/target/ppc/translate.c
> > > +++ b/target/ppc/translate.c
> > > @@ -868,8 +868,7 @@ static inline void gen_op_arith_add(DisasContext *ctx, TCGv ret, TCGv arg1,
> > > }
> > > tcg_gen_xor_tl(cpu_ca, t0, t1); /* bits changed w/ carry */
> > > tcg_temp_free(t1);
> > > - tcg_gen_shri_tl(cpu_ca, cpu_ca, 32); /* extract bit 32 */
> > > - tcg_gen_andi_tl(cpu_ca, cpu_ca, 1);
> > > + tcg_gen_extract_tl(cpu_ca, cpu_ca, 32, 1);
> > > if (is_isa300(ctx)) {
> > > tcg_gen_mov_tl(cpu_ca32, cpu_ca);
> > > }
> > > @@ -1399,8 +1398,7 @@ static inline void gen_op_arith_subf(DisasContext *ctx, TCGv ret, TCGv arg1,
> > > tcg_temp_free(inv1);
> > > tcg_gen_xor_tl(cpu_ca, t0, t1); /* bits changes w/ carry */
> > > tcg_temp_free(t1);
> > > - tcg_gen_shri_tl(cpu_ca, cpu_ca, 32); /* extract bit 32 */
> > > - tcg_gen_andi_tl(cpu_ca, cpu_ca, 1);
> > > + tcg_gen_extract_tl(cpu_ca, cpu_ca, 32, 1);
> > > if (is_isa300(ctx)) {
> > > tcg_gen_mov_tl(cpu_ca32, cpu_ca);
> > > }
> >
> > Above changes are correct.
> >
> > Rest of them are wrong as discussed above in the thread with Richard.
> >
>
> I tried to correct the cocci script and ran it again (will post in few min
> as v3) and got:
>
> $ docker run -it -v `pwd`:`pwd` -w `pwd` petersenna/coccinelle --sp-file
> scripts/coccinelle/tcg_gen_extract.cocci --macro-file
> scripts/cocci-macro-file.h --dir target/ppc
> init_defs_builtins: /usr/lib64/coccinelle/standard.h
> init_defs: scripts/cocci-macro-file.h
> HANDLING: target/ppc/mfrom_table_gen.c
> HANDLING: target/ppc/user_only_helper.c
> HANDLING: target/ppc/mmu-hash64.c
> HANDLING: target/ppc/timebase_helper.c
> HANDLING: target/ppc/gdbstub.c
> HANDLING: target/ppc/translate.c
> candidate at target/ppc/translate.c:5386
> op_size: tl/tl (same)
> low_bits: 4 (value: 0xf)
> len: 0xf
> len_bits == low_bits
> candidate IS optimizable
>
> candidate at target/ppc/translate.c:871
> op_size: tl/tl (same)
> low_bits: 1 (value: 0x1)
> len: 0x1
> len_bits == low_bits
> candidate IS optimizable
>
> candidate at target/ppc/translate.c:1402
> op_size: tl/tl (same)
> low_bits: 1 (value: 0x1)
> len: 0x1
> len_bits == low_bits
> candidate IS optimizable
>
> > > @@ -5383,8 +5381,7 @@ static void gen_mfsri(DisasContext *ctx)
> > > CHK_SV;
> > > t0 = tcg_temp_new();
> > > gen_addr_reg_index(ctx, t0);
> > > - tcg_gen_shri_tl(t0, t0, 28);
> > > - tcg_gen_andi_tl(t0, t0, 0xF);
> > > + tcg_gen_extract_tl(t0, t0, 28, 0xF);
> > > gen_helper_load_sr(cpu_gpr[rd], cpu_env, t0);
> > > tcg_temp_free(t0);
> > > if (ra != 0 && ra != rd)
>
> 0xF = 0b1111 so this one seems correct to, right?
No, I don't think so. AFAICT tcg_gen_extract_tl() takes a field
width, not a mask as the last parameter. So this would need to be
tcg_gen_extract_tl(t0, t0, 28, 4);
Your script needs to do essentially a log-base-2 of the mask. I don't
know if Coccinelle can do that..
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
next prev parent reply other threads:[~2017-05-12 5:17 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-10 20:05 [Qemu-devel] [PATCH 0/8] optimize various tcg_gen() functions using extract op Philippe Mathieu-Daudé
2017-05-10 20:05 ` [Qemu-devel] [PATCH 1/8] coccinelle: add a script to optimize tcg op using tcg_gen_extract() Philippe Mathieu-Daudé
2017-05-10 20:12 ` Eric Blake
2017-05-10 20:23 ` Philippe Mathieu-Daudé
2017-05-10 20:19 ` Richard Henderson
2017-05-10 20:23 ` Eric Blake
2017-05-10 21:27 ` Philippe Mathieu-Daudé
2017-05-10 23:52 ` [Qemu-devel] [RFC PATCH v2] " Philippe Mathieu-Daudé
2017-05-11 0:13 ` Philippe Mathieu-Daudé
2017-05-11 9:03 ` Markus Armbruster
2017-05-12 2:01 ` Philippe Mathieu-Daudé
2017-05-12 2:04 ` Philippe Mathieu-Daudé
2017-05-15 7:04 ` Markus Armbruster
2017-05-10 20:05 ` [Qemu-devel] [PATCH 2/8] target/arm: optimize smul_dual() and neon_trn_u8() using extract op Philippe Mathieu-Daudé
2017-05-10 20:15 ` [Qemu-arm] " Eric Blake
2017-05-10 20:15 ` Eric Blake
2017-05-12 2:49 ` [Qemu-arm] " Philippe Mathieu-Daudé
2017-05-12 2:49 ` Philippe Mathieu-Daudé
2017-05-10 20:20 ` [Qemu-arm] " Richard Henderson
2017-05-10 20:20 ` [Qemu-devel] " Richard Henderson
2017-05-10 20:32 ` [Qemu-arm] " Philippe Mathieu-Daudé
2017-05-10 20:32 ` [Qemu-devel] " Philippe Mathieu-Daudé
2017-05-12 1:31 ` [Qemu-arm] " Philippe Mathieu-Daudé
2017-05-12 1:31 ` [Qemu-devel] " Philippe Mathieu-Daudé
2017-05-10 20:05 ` [Qemu-devel] [PATCH 3/8] target/arm: optimize rev16() " Philippe Mathieu-Daudé
2017-05-12 1:54 ` Philippe Mathieu-Daudé
2017-05-10 20:05 ` [Qemu-devel] [PATCH 4/8] target/cris: optimize gen_swapb() " Philippe Mathieu-Daudé
2017-05-12 1:29 ` Philippe Mathieu-Daudé
2017-05-10 20:05 ` [Qemu-devel] [PATCH 5/8] target/m68k: optimize bcd_flags() " Philippe Mathieu-Daudé
2017-05-11 8:41 ` Laurent Vivier
2017-05-12 1:52 ` Philippe Mathieu-Daudé
2017-05-10 20:05 ` [Qemu-devel] [PATCH 6/8] target/mips: optimize bshfl() " Philippe Mathieu-Daudé
2017-05-12 2:13 ` Philippe Mathieu-Daudé
2017-05-10 20:05 ` [Qemu-devel] [PATCH 7/8] target/ppc: optimize various functions " Philippe Mathieu-Daudé
2017-05-11 0:41 ` David Gibson
2017-05-11 8:46 ` [Qemu-devel] [Qemu-ppc] " Laurent Vivier
2017-05-12 5:13 ` David Gibson
2017-05-11 4:54 ` [Qemu-devel] " Nikunj A Dadhania
2017-05-12 1:48 ` Philippe Mathieu-Daudé
2017-05-12 5:16 ` David Gibson [this message]
2017-05-10 20:05 ` [Qemu-devel] [PATCH 8/8] target/sparc: " Philippe Mathieu-Daudé
2017-05-12 1:50 ` Philippe Mathieu-Daudé
2017-05-10 20:20 ` [Qemu-devel] [PATCH 0/8] optimize various tcg_gen() " no-reply
2017-05-12 2:34 ` Philippe Mathieu-Daudé
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170512051610.GC12908@umbus.fritz.box \
--to=david@gibson.dropbear.id.au \
--cc=agraf@suse.de \
--cc=aurelien@aurel32.net \
--cc=f4bug@amsat.org \
--cc=lvivier@redhat.com \
--cc=nikunj@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=rth@twiddle.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.