All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/7] Define "deposit" tcg operation
@ 2011-01-07 22:42 Richard Henderson
  2011-01-07 22:42 ` [Qemu-devel] [PATCH 1/7] tcg: Define "deposit" as an optional operation Richard Henderson
                   ` (7 more replies)
  0 siblings, 8 replies; 24+ messages in thread
From: Richard Henderson @ 2011-01-07 22:42 UTC (permalink / raw)
  To: qemu-devel; +Cc: Alexander Graf, Aurelien Jarno

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

^ permalink raw reply	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2011-01-10 20:29 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-01-07 22:42 [Qemu-devel] [PATCH 0/7] Define "deposit" tcg operation Richard Henderson
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

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.