From: Richard Henderson <rth@twiddle.net>
To: qemu-devel@nongnu.org
Cc: Alexander Graf <agraf@suse.de>, Aurelien Jarno <aurelien@aurel32.net>
Subject: [Qemu-devel] [PATCH 0/7] Define "deposit" tcg operation
Date: Fri, 7 Jan 2011 14:42:56 -0800 [thread overview]
Message-ID: <1294440183-885-1-git-send-email-rth@twiddle.net> (raw)
Emulating i386 -- particularly in 16-bit mode -- requires quite a few
bitfield insert operations, to handle byte and word stores into the
dword registers. On several hosts, this can be done natively, without
resorting to a sequence of and and or instructions. Even i386 as a
host can do better than the naive approach, and not merely for the set
that's implementable with byte/word stores.
Examples from i386-on-amd64:
0x4080d274: movzbw -0x1335(%ebx),%ax
before:
0x60219f5d: movzbl 0x0(%r13),%ebp
0x60219f62: movzwl %bp,%ebp
0x60219f65: mov (%r14),%ebx
0x60219f68: and $0xffff0000,%ebx
0x60219f6e: or %ebp,%ebx
after:
0x6021aa5d: movzbl 0x0(%r13),%ebp
0x6021aa62: mov (%r14),%ebx
0x6021aa65: mov %bp,%bx
Note that we were able to use the word store.
0x4080e259: mov %dl,%dh
before:
0x6021d035: mov %ebp,%ebx
0x6021d037: movzbl %bl,%ebx
0x6021d03a: shl $0x8,%ebx
0x6021d03d: and $0xffff00ff,%ebp
0x6021d043: or %ebx,%ebp
after:
0x6021da95: mov %ebp,%ebx
0x6021da97: ror $0x8,%ebp
0x6021da9a: shrd $0x8,%ebx,%ebp
0x6021da9e: rol $0x10,%ebp
Note that the replacement is 1 insn and 4 bytes shorter.
Counts as seen in -d in_asm:
byte word
i386/ls: 240 28
fedora 12 boot: 30938 11459
freedos boot: 6936 74803
Examples from ppc-on-amd64
0x4080add0: rlwimi r0,r25,30,0,1
before:
0x6027d886: mov 0x64(%r14),%ebx
0x6027d88a: mov %ebx,%r12d
0x6027d88d: rol $0x1e,%r12d
0x6027d891: and $0xc0000000,%r12d
0x6027d898: mov (%r14),%r13d
0x6027d89b: and $0x3fffffff,%r13d
0x6027d8a2: or %r13d,%r12d
after:
0x6027e186: mov (%r14),%ebx
0x6027e189: mov 0x64(%r14),%r12d
0x6027e18d: ror $0x1e,%ebx
0x6027e190: shrd $0x2,%r12d,%ebx
Counts as seen in -d in_asm:
rlwimi
ppc/ls: 9
(no ppc kernel in qemu.org downloads?)
r~
Richard Henderson (7):
tcg: Define "deposit" as an optional operation.
tcg-ppc: Implement deposit operation.
tcg-hppa: Implement deposit operation.
tcg-ia64: Implement deposit operation.
tcg-i386: Implement deposit operation.
target-i386: Use deposit operation.
target-ppc: Use deposit operation.
target-i386/translate.c | 34 +++--------------
target-ppc/translate.c | 10 +++++
tcg/README | 14 +++++++
tcg/hppa/tcg-target.c | 58 ++++++++++++++++++++++++++---
tcg/hppa/tcg-target.h | 1 +
tcg/i386/tcg-target.c | 68 +++++++++++++++++++++++++++++++++--
tcg/i386/tcg-target.h | 2 +
tcg/ia64/tcg-target.c | 92 +++++++++++++++++++++++++++++++++++++++++++++++
tcg/ia64/tcg-target.h | 2 +
tcg/ppc/tcg-target.c | 17 ++++++++-
tcg/ppc/tcg-target.h | 1 +
tcg/tcg-op.h | 40 ++++++++++++++++++++
tcg/tcg-opc.h | 6 +++
tcg/tcg.c | 15 ++++++++
14 files changed, 322 insertions(+), 38 deletions(-)
--
1.7.2.3
next reply other threads:[~2011-01-07 22:44 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-07 22:42 Richard Henderson [this message]
2011-01-07 22:42 ` [Qemu-devel] [PATCH 1/7] tcg: Define "deposit" as an optional operation Richard Henderson
2011-01-07 23:48 ` Stuart Brady
2011-01-09 21:38 ` Aurelien Jarno
2011-01-09 22:45 ` Richard Henderson
2011-01-07 22:42 ` [Qemu-devel] [PATCH 2/7] tcg-ppc: Implement deposit operation Richard Henderson
2011-01-07 23:33 ` [Qemu-devel] " malc
2011-01-07 22:42 ` [Qemu-devel] [PATCH 3/7] tcg-hppa: " Richard Henderson
2011-01-07 23:35 ` Stuart Brady
2011-01-07 23:41 ` Richard Henderson
2011-01-07 22:43 ` [Qemu-devel] [PATCH 4/7] tcg-ia64: " Richard Henderson
2011-01-09 22:04 ` [Qemu-devel] " Aurelien Jarno
2011-01-07 22:43 ` [Qemu-devel] [PATCH 5/7] tcg-i386: " Richard Henderson
2011-01-09 21:53 ` [Qemu-devel] " Aurelien Jarno
2011-01-09 22:55 ` Richard Henderson
2011-01-10 0:16 ` Aurelien Jarno
2011-01-10 0:43 ` Richard Henderson
2011-01-10 16:52 ` Aurelien Jarno
2011-01-10 18:37 ` Aurelien Jarno
2011-01-10 19:19 ` Richard Henderson
2011-01-07 22:43 ` [Qemu-devel] [PATCH 6/7] target-i386: Use " Richard Henderson
2011-01-07 22:43 ` [Qemu-devel] [PATCH 7/7] target-ppc: " Richard Henderson
2011-01-07 23:10 ` [Qemu-devel] [PATCH 0/7] Define "deposit" tcg operation Peter Maydell
2011-01-07 23:37 ` Richard Henderson
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=1294440183-885-1-git-send-email-rth@twiddle.net \
--to=rth@twiddle.net \
--cc=agraf@suse.de \
--cc=aurelien@aurel32.net \
--cc=qemu-devel@nongnu.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).