[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 30/35] tcg-s390: Implement GUEST_BASE.
From: |
Richard Henderson |
Subject: |
[Qemu-devel] [PATCH 30/35] tcg-s390: Implement GUEST_BASE. |
Date: |
Fri, 4 Jun 2010 12:14:38 -0700 |
Signed-off-by: Richard Henderson <address@hidden>
---
configure | 2 ++
tcg/s390/tcg-target.c | 24 ++++++++++++++++++++++--
tcg/s390/tcg-target.h | 2 ++
3 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/configure b/configure
index 7f5b5b2..e80b820 100755
--- a/configure
+++ b/configure
@@ -699,10 +699,12 @@ case "$cpu" in
s390)
QEMU_CFLAGS="-m31 -march=z990 $QEMU_CFLAGS"
LDFLAGS="-m31 $LDFLAGS"
+ host_guest_base="yes"
;;
s390x)
QEMU_CFLAGS="-m64 -march=z990 $QEMU_CFLAGS"
LDFLAGS="-m64 $LDFLAGS"
+ host_guest_base="yes"
;;
i386)
QEMU_CFLAGS="-m32 $QEMU_CFLAGS"
diff --git a/tcg/s390/tcg-target.c b/tcg/s390/tcg-target.c
index ef1f69e..13c4de6 100644
--- a/tcg/s390/tcg-target.c
+++ b/tcg/s390/tcg-target.c
@@ -48,6 +48,16 @@
/* A scratch register that may be be used throughout the backend. */
#define TCG_TMP0 TCG_REG_R14
+#ifdef CONFIG_USE_GUEST_BASE
+#define TCG_GUEST_BASE_REG TCG_REG_R13
+#else
+#define TCG_GUEST_BASE_REG TCG_REG_R0
+#endif
+
+#ifndef GUEST_BASE
+#define GUEST_BASE 0
+#endif
+
/* All of the following instructions are prefixed with their instruction
format, and are defined as 8- or 16-bit quantities, even when the two
@@ -1317,12 +1327,17 @@ static void tcg_finish_qemu_ldst(TCGContext* s,
uint16_t *label2_ptr)
static void tcg_prepare_user_ldst(TCGContext *s, TCGReg *addr_reg,
TCGReg *index_reg, tcg_target_long *disp)
{
- *index_reg = TCG_REG_NONE;
- *disp = 0;
if (TARGET_LONG_BITS == 32) {
tgen_ext32u(s, TCG_TMP0, *addr_reg);
*addr_reg = TCG_TMP0;
}
+ if (GUEST_BASE < 0x80000) {
+ *index_reg = TCG_REG_NONE;
+ *disp = GUEST_BASE;
+ } else {
+ *index_reg = TCG_GUEST_BASE_REG;
+ *disp = 0;
+ }
}
#endif /* CONFIG_SOFTMMU */
@@ -2061,6 +2076,11 @@ void tcg_target_qemu_prologue(TCGContext *s)
/* aghi %r15,-160 (stack frame) */
tcg_out_insn(s, RI, AGHI, TCG_REG_R15, -160);
+ if (GUEST_BASE >= 0x80000) {
+ tcg_out_movi(s, TCG_TYPE_PTR, TCG_GUEST_BASE_REG, GUEST_BASE);
+ tcg_regset_set_reg(s->reserved_regs, TCG_GUEST_BASE_REG);
+ }
+
/* br %r2 (go to TB) */
tcg_out_insn(s, RR, BCR, S390_CC_ALWAYS, TCG_REG_R2);
diff --git a/tcg/s390/tcg-target.h b/tcg/s390/tcg-target.h
index 9135c7a..390c587 100644
--- a/tcg/s390/tcg-target.h
+++ b/tcg/s390/tcg-target.h
@@ -83,6 +83,8 @@ typedef enum TCGReg {
// #define TCG_TARGET_HAS_nand_i64
// #define TCG_TARGET_HAS_nor_i64
+#define TCG_TARGET_HAS_GUEST_BASE
+
/* used for function call generation */
#define TCG_REG_CALL_STACK TCG_REG_R15
#define TCG_TARGET_STACK_ALIGN 8
--
1.7.0.1
- Re: [Qemu-devel] [PATCH 20/35] tcg-s390: Use LOAD COMPLIMENT for negate., (continued)
- [Qemu-devel] [PATCH 21/35] tcg-s390: Use the ADD IMMEDIATE instructions., Richard Henderson, 2010/06/04
- [Qemu-devel] [PATCH 22/35] tcg-s390: Use the AND IMMEDIATE instructions., Richard Henderson, 2010/06/04
- [Qemu-devel] [PATCH 23/35] tcg-s390: Use the OR IMMEDIATE instructions., Richard Henderson, 2010/06/04
- [Qemu-devel] [PATCH 24/35] tcg-s390: Use the XOR IMMEDIATE instructions., Richard Henderson, 2010/06/04
- [Qemu-devel] [PATCH 25/35] tcg-s390: Use the MULTIPLY IMMEDIATE instructions., Richard Henderson, 2010/06/04
- [Qemu-devel] [PATCH 26/35] tcg-s390: Tidy goto_tb., Richard Henderson, 2010/06/04
- [Qemu-devel] [PATCH 27/35] tcg-s390: Rearrange qemu_ld/st to avoid register copy., Richard Henderson, 2010/06/04
- [Qemu-devel] [PATCH 28/35] tcg-s390: Tidy tcg_prepare_qemu_ldst., Richard Henderson, 2010/06/04
- [Qemu-devel] [PATCH 29/35] tcg-s390: Tidy user qemu_ld/st., Richard Henderson, 2010/06/04
- [Qemu-devel] [PATCH 30/35] tcg-s390: Implement GUEST_BASE.,
Richard Henderson <=
- [Qemu-devel] [PATCH 31/35] tcg-s390: Use 16-bit branches for forward jumps., Richard Henderson, 2010/06/04
- [Qemu-devel] [PATCH 33/35] tcg-s390: Use the COMPARE IMMEDIATE instrucions for compares., Richard Henderson, 2010/06/04
- [Qemu-devel] [PATCH 34/35] tcg-s390: Use COMPARE AND BRANCH instructions., Richard Henderson, 2010/06/04
- [Qemu-devel] [PATCH 32/35] tcg-s390: Use the LOAD AND TEST instruction for compares., Richard Henderson, 2010/06/04
- [Qemu-devel] [PATCH 35/35] tcg-s390: Enable compile in 32-bit mode., Richard Henderson, 2010/06/04
- [Qemu-devel] Re: [PATCH 00/35] S390 TCG target, version 2, Alexander Graf, 2010/06/08