[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 0/7] Define "deposit" tcg operation
From: |
Richard Henderson |
Subject: |
[Qemu-devel] [PATCH 0/7] Define "deposit" tcg operation |
Date: |
Fri, 7 Jan 2011 14:42:56 -0800 |
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
- [Qemu-devel] [PATCH 0/7] Define "deposit" tcg operation,
Richard Henderson <=
- [Qemu-devel] [PATCH 6/7] target-i386: Use deposit operation., Richard Henderson, 2011/01/07
- [Qemu-devel] [PATCH 3/7] tcg-hppa: Implement deposit operation., Richard Henderson, 2011/01/07
- [Qemu-devel] [PATCH 7/7] target-ppc: Use deposit operation., Richard Henderson, 2011/01/07
- [Qemu-devel] [PATCH 4/7] tcg-ia64: Implement deposit operation., Richard Henderson, 2011/01/07
- [Qemu-devel] [PATCH 5/7] tcg-i386: Implement deposit operation., Richard Henderson, 2011/01/07