[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 08/15] tcg-mips: Adjust calling conventions for mips
From: |
Richard Henderson |
Subject: |
[Qemu-devel] [PATCH 08/15] tcg-mips: Adjust calling conventions for mips64 |
Date: |
Tue, 9 Feb 2016 21:39:56 +1100 |
Signed-off-by: Richard Henderson <address@hidden>
---
tcg/mips/tcg-target.c | 21 +++++++++++++++------
tcg/mips/tcg-target.h | 19 +++++++++++++++----
2 files changed, 30 insertions(+), 10 deletions(-)
diff --git a/tcg/mips/tcg-target.c b/tcg/mips/tcg-target.c
index 242db14..b5982de 100644
--- a/tcg/mips/tcg-target.c
+++ b/tcg/mips/tcg-target.c
@@ -96,10 +96,6 @@ static const TCGReg tcg_target_reg_alloc_order[] = {
TCG_REG_S8,
/* Call clobbered registers. */
- TCG_REG_T0,
- TCG_REG_T1,
- TCG_REG_T2,
- TCG_REG_T3,
TCG_REG_T4,
TCG_REG_T5,
TCG_REG_T6,
@@ -110,17 +106,27 @@ static const TCGReg tcg_target_reg_alloc_order[] = {
TCG_REG_V0,
/* Argument registers, opposite order of allocation. */
+ TCG_REG_T3,
+ TCG_REG_T2,
+ TCG_REG_T1,
+ TCG_REG_T0,
TCG_REG_A3,
TCG_REG_A2,
TCG_REG_A1,
TCG_REG_A0,
};
-static const TCGReg tcg_target_call_iarg_regs[4] = {
+static const TCGReg tcg_target_call_iarg_regs[] = {
TCG_REG_A0,
TCG_REG_A1,
TCG_REG_A2,
- TCG_REG_A3
+ TCG_REG_A3,
+#if _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64
+ TCG_REG_T0,
+ TCG_REG_T1,
+ TCG_REG_T2,
+ TCG_REG_T3,
+#endif
};
static const TCGReg tcg_target_call_oarg_regs[2] = {
@@ -2352,6 +2358,9 @@ static void tcg_target_init(TCGContext *s)
{
tcg_target_detect_isa();
tcg_regset_set(tcg_target_available_regs[TCG_TYPE_I32], 0xffffffff);
+ if (TCG_TARGET_REG_BITS == 64) {
+ tcg_regset_set(tcg_target_available_regs[TCG_TYPE_I64], 0xffffffff);
+ }
tcg_regset_set(tcg_target_call_clobber_regs,
(1 << TCG_REG_V0) |
(1 << TCG_REG_V1) |
diff --git a/tcg/mips/tcg-target.h b/tcg/mips/tcg-target.h
index 3de58ae..0dab62b 100644
--- a/tcg/mips/tcg-target.h
+++ b/tcg/mips/tcg-target.h
@@ -26,7 +26,14 @@
#ifndef TCG_TARGET_MIPS
#define TCG_TARGET_MIPS 1
-#define TCG_TARGET_REG_BITS 32
+#if _MIPS_SIM == _ABIO32
+# define TCG_TARGET_REG_BITS 32
+#elif _MIPS_SIM == _ABIN32 || _MIPS_SIM == _ABI64
+# define TCG_TARGET_REG_BITS 64
+#else
+# error "Unknown ABI"
+#endif
+
#define TCG_TARGET_INSN_UNIT_SIZE 4
#define TCG_TARGET_TLB_DISPLACEMENT_BITS 16
#define TCG_TARGET_NB_REGS 32
@@ -70,9 +77,13 @@ typedef enum {
} TCGReg;
/* used for function call generation */
-#define TCG_TARGET_STACK_ALIGN 8
-#define TCG_TARGET_CALL_STACK_OFFSET 16
-#define TCG_TARGET_CALL_ALIGN_ARGS 1
+#define TCG_TARGET_STACK_ALIGN 16
+#if _MIPS_SIM == _ABIO32
+# define TCG_TARGET_CALL_STACK_OFFSET 16
+#else
+# define TCG_TARGET_CALL_STACK_OFFSET 0
+#endif
+#define TCG_TARGET_CALL_ALIGN_ARGS 1
/* MOVN/MOVZ instructions detection */
#if (defined(__mips_isa_rev) && (__mips_isa_rev >= 1)) || \
--
2.5.0
- [Qemu-devel] [PATCH 00/15] tcg mips64 and mipsr6 improvements, Richard Henderson, 2016/02/09
- [Qemu-devel] [PATCH 01/15] tcg-mips: Add mips64 opcodes, Richard Henderson, 2016/02/09
- [Qemu-devel] [PATCH 02/15] tcg-mips: Support 64-bit opcodes, Richard Henderson, 2016/02/09
- [Qemu-devel] [PATCH 04/15] tcg-mips: Adjust load/store functions for mips64, Richard Henderson, 2016/02/09
- [Qemu-devel] [PATCH 03/15] tcg-mips: Adjust move functions for mips64, Richard Henderson, 2016/02/09
- [Qemu-devel] [PATCH 05/15] tcg-mips: Adjust prologue for mips64, Richard Henderson, 2016/02/09
- [Qemu-devel] [PATCH 06/15] tcg-mips: Add tcg unwind info, Richard Henderson, 2016/02/09
- [Qemu-devel] [PATCH 08/15] tcg-mips: Adjust calling conventions for mips64,
Richard Henderson <=
- [Qemu-devel] [PATCH 09/15] tcg-mips: Fix exit_tb for mips64, Richard Henderson, 2016/02/09
- [Qemu-devel] [PATCH 10/15] tcg-mips: Move bswap code to subroutines, Richard Henderson, 2016/02/09
- [Qemu-devel] [PATCH 07/15] tcg-mips: Adjust qemu_ld/st for mips64, Richard Henderson, 2016/02/09
- [Qemu-devel] [PATCH 12/15] tcg-mips: Use mips64r6 instructions in tcg_out_ldst, Richard Henderson, 2016/02/09
- [Qemu-devel] [PATCH 13/15] tcg-mips: Use mips64r6 instructions in constant addition, Richard Henderson, 2016/02/09
- [Qemu-devel] [PATCH 11/15] tcg-mips: Use mips64r6 instructions in tcg_out_movi, Richard Henderson, 2016/02/09