From: Richard Henderson <rth@twiddle.net>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH for-2.11 00/23] tcg constant pools
Date: Thu, 3 Aug 2017 22:44:03 -0700 [thread overview]
Message-ID: <20170804054426.10590-1-rth@twiddle.net> (raw)
RISC machines often require many instructions in order to construct large
constants from the immediate values available to individual instructions.
Static compilers like GCC often place these large constants into read-only
memory and use one load instruction to fetch the constant instead; a
collection of these is known as a "constant pool".
TCG currently generates all constants from immediate values. This can
require 4 insns for a full 64-bit value for AArch64, 4 insns for a
full 32-bit value for AArch32 v6. s390x z9 needs 4, ppc64 and sparc64
need 5, mips64 needs 6.
Moreover, entries in the constant pool may be used more than once. For
instance, if there are 3 consecutive guest stores, then we can enter the
host address of helper_le_ldul_mmu into the constant pool once for the 3
call invocations. Depending on the host memory map, the result may be a
savings of (4*3*4) - (1*3*4+1*8) = 28 bytes.
This last is even true for the x86_64 host, where
movq $helper_ld_ldul_mmu, %rax; call *%rax
costs 10+6 bytes, but
call *label(%rip); .quad helper_ld_ldul_mmu
costs 6+8 bytes, plus the ability to share the 8 bytes for the entry.
r~
Richard Henderson (23):
tcg: Move USE_DIRECT_JUMP discriminator to tcg/cpu/tcg-target.h
tcg: Rearrange ldst label tracking
tcg: Infrastructure for managing constant pools
tcg/i386: Store out-of-range call targets in constant pool
tcg/s390: Introduce TCG_REG_TB
tcg/s390: Fix sign of patch_reloc addend
tcg/s390: Use constant pool for movi
tcg/s390: Use constant pool for andi
tcg/s390: Use constant pool for ori
tcg/s390: Use constant pool for xori
tcg/s390: Use constant pool for cmpi
tcg/aarch64: Use constant pool for movi
tcg/sparc: Introduce TCG_REG_TB
tcg/sparc: Use constant pool for movi
tcg/arm: Improve tlb load for armv7
tcg/arm: Tighten tlb indexing offset test
tcg/arm: Code rearrangement
tcg/arm: Extract INSN_NOP
tcg/arm: Use constant pool for movi
tcg/arm: Use constant pool for call
tcg/ppc: Change TCG_REG_RA to TCG_REG_TB
tcg/ppc: Look for shifted constants
tcg/ppc: Use constant pool for movi
include/elf.h | 3 +-
include/exec/exec-all.h | 95 +----
tcg/aarch64/tcg-target.h | 8 +
tcg/arm/tcg-target.h | 9 +
tcg/i386/tcg-target.h | 14 +
tcg/ia64/tcg-target.h | 8 +
tcg/mips/tcg-target.h | 7 +
tcg/ppc/tcg-target.h | 7 +
tcg/s390/tcg-target.h | 15 +
tcg/sparc/tcg-target.h | 5 +
tcg/tcg-be-null.h | 44 --
tcg/tcg.h | 14 +-
tcg/tci/tcg-target.h | 9 +
accel/tcg/cpu-exec.c | 35 ++
accel/tcg/translate-all.c | 36 +-
tcg/aarch64/tcg-target.inc.c | 78 ++--
tcg/arm/tcg-target.inc.c | 780 +++++++++++++++++++---------------
tcg/i386/tcg-target.inc.c | 20 +-
tcg/ia64/tcg-target.inc.c | 19 +-
tcg/mips/tcg-target.inc.c | 7 +-
tcg/ppc/tcg-target.inc.c | 320 +++++++-------
tcg/s390/tcg-target.inc.c | 527 +++++++++++++----------
tcg/sparc/tcg-target.inc.c | 240 ++++++++---
tcg/{tcg-be-ldst.h => tcg-ldst.inc.c} | 27 +-
tcg/tcg-pool.inc.c | 85 ++++
tcg/tcg.c | 26 +-
tcg/tci/tcg-target.inc.c | 2 -
27 files changed, 1422 insertions(+), 1018 deletions(-)
delete mode 100644 tcg/tcg-be-null.h
rename tcg/{tcg-be-ldst.h => tcg-ldst.inc.c} (85%)
create mode 100644 tcg/tcg-pool.inc.c
--
2.13.3
next reply other threads:[~2017-08-04 5:44 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-04 5:44 Richard Henderson [this message]
2017-08-04 5:44 ` [Qemu-devel] [PATCH for-2.11 01/23] tcg: Move USE_DIRECT_JUMP discriminator to tcg/cpu/tcg-target.h Richard Henderson
2017-08-04 5:44 ` [Qemu-devel] [PATCH for-2.11 02/23] tcg: Rearrange ldst label tracking Richard Henderson
2017-08-04 10:33 ` Paolo Bonzini
2017-08-04 5:44 ` [Qemu-devel] [PATCH for-2.11 03/23] tcg: Infrastructure for managing constant pools Richard Henderson
2017-08-04 5:44 ` [Qemu-devel] [PATCH for-2.11 04/23] tcg/i386: Store out-of-range call targets in constant pool Richard Henderson
2017-08-04 5:44 ` [Qemu-devel] [PATCH for-2.11 05/23] tcg/s390: Introduce TCG_REG_TB Richard Henderson
2017-08-04 5:44 ` [Qemu-devel] [PATCH for-2.11 06/23] tcg/s390: Fix sign of patch_reloc addend Richard Henderson
2017-08-04 5:44 ` [Qemu-devel] [PATCH for-2.11 07/23] tcg/s390: Use constant pool for movi Richard Henderson
2017-08-04 5:44 ` [Qemu-devel] [PATCH for-2.11 08/23] tcg/s390: Use constant pool for andi Richard Henderson
2017-08-04 5:44 ` [Qemu-devel] [PATCH for-2.11 09/23] tcg/s390: Use constant pool for ori Richard Henderson
2017-08-04 5:44 ` [Qemu-devel] [PATCH for-2.11 10/23] tcg/s390: Use constant pool for xori Richard Henderson
2017-08-04 5:44 ` [Qemu-devel] [PATCH for-2.11 11/23] tcg/s390: Use constant pool for cmpi Richard Henderson
2017-08-04 5:44 ` [Qemu-devel] [PATCH for-2.11 12/23] tcg/aarch64: Use constant pool for movi Richard Henderson
2017-08-04 5:44 ` [Qemu-devel] [PATCH for-2.11 13/23] tcg/sparc: Introduce TCG_REG_TB Richard Henderson
2017-08-04 5:44 ` [Qemu-devel] [PATCH for-2.11 14/23] tcg/sparc: Use constant pool for movi Richard Henderson
2017-08-04 5:44 ` [Qemu-devel] [PATCH for-2.11 15/23] tcg/arm: Improve tlb load for armv7 Richard Henderson
2017-08-04 5:44 ` [Qemu-devel] [PATCH for-2.11 16/23] tcg/arm: Tighten tlb indexing offset test Richard Henderson
2017-08-04 5:44 ` [Qemu-devel] [PATCH for-2.11 17/23] tcg/arm: Code rearrangement Richard Henderson
2017-08-04 5:44 ` [Qemu-devel] [PATCH for-2.11 18/23] tcg/arm: Extract INSN_NOP Richard Henderson
2017-08-04 5:44 ` [Qemu-devel] [PATCH for-2.11 19/23] tcg/arm: Use constant pool for movi Richard Henderson
2017-08-04 5:44 ` [Qemu-devel] [PATCH for-2.11 20/23] tcg/arm: Use constant pool for call Richard Henderson
2017-08-04 5:44 ` [Qemu-devel] [PATCH for-2.11 21/23] tcg/ppc: Change TCG_REG_RA to TCG_REG_TB Richard Henderson
2017-08-04 5:44 ` [Qemu-devel] [PATCH for-2.11 22/23] tcg/ppc: Look for shifted constants Richard Henderson
2017-08-04 16:39 ` Philippe Mathieu-Daudé
2017-08-04 16:58 ` Richard Henderson
2017-08-04 5:44 ` [Qemu-devel] [PATCH for-2.11 23/23] tcg/ppc: Use constant pool for movi 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=20170804054426.10590-1-rth@twiddle.net \
--to=rth@twiddle.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.