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 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.