[Qemu-devel] Re: [PATCH 1/3] TCG: Mac OS X support for ppc64 target
Am 06.12.2009 um 07:28 schrieb malc: On Sun, 6 Dec 2009, Andreas F?rber wrote: Am 06.12.2009 um 06:13 schrieb malc: On Sun, 6 Dec 2009, Andreas Faerber wrote: Darwin/ppc64 does not use function descriptors, adapt prologue and tcg_out_call accordingly. GPR2 is available for general use, so let's use it. http://developer.apple.com/mac/library/documentation/DeveloperTools/Conceptual/LowLevelABI/110-64-bit_PowerPC_Function_Calling_Conventions/64bitPowerPC.html Signed-off-by: Andreas Faerber andreas.faer...@web.de Cc: malc av1...@comtv.ru --- tcg/ppc64/tcg-target.c | 30 ++ 1 files changed, 30 insertions(+), 0 deletions(-) diff --git a/tcg/ppc64/tcg-target.c b/tcg/ppc64/tcg-target.c index a612e10..bf9b7d9 100644 --- a/tcg/ppc64/tcg-target.c +++ b/tcg/ppc64/tcg-target.c Otherwise looks good.. Should i commit it with R13 fixed? About the callee-save stuff I was less certain. Feel free to make modifications (e.g., moving tcg_out_call up?) or have me resubmit. Sorry, i don't get this part, i was just thinking of removing R13 from the list. Moving tcg_out_call? Sorry, I meant tcg_out_b. Just declaring it was the least intrusive patch. I've sent a v2 series, doing the above plus silencing a warning. They are also available for pulling from git://repo.or.cz/qemu/ afaerber.git, branch tcg-osx-ppc64. Andreas
[Qemu-devel] Re: [PATCH 1/3] TCG: Mac OS X support for ppc64 target
On Sun, 6 Dec 2009, Andreas Faerber wrote: Darwin/ppc64 does not use function descriptors, adapt prologue and tcg_out_call accordingly. GPR2 is available for general use, so let's use it. http://developer.apple.com/mac/library/documentation/DeveloperTools/Conceptual/LowLevelABI/110-64-bit_PowerPC_Function_Calling_Conventions/64bitPowerPC.html Signed-off-by: Andreas Faerber andreas.faer...@web.de Cc: malc av1...@comtv.ru --- tcg/ppc64/tcg-target.c | 30 ++ 1 files changed, 30 insertions(+), 0 deletions(-) diff --git a/tcg/ppc64/tcg-target.c b/tcg/ppc64/tcg-target.c index a612e10..bf9b7d9 100644 --- a/tcg/ppc64/tcg-target.c +++ b/tcg/ppc64/tcg-target.c @@ -104,6 +104,9 @@ static const int tcg_target_reg_alloc_order[] = { TCG_REG_R29, TCG_REG_R30, TCG_REG_R31, +#ifdef __APPLE__ +TCG_REG_R2, +#endif TCG_REG_R3, TCG_REG_R4, TCG_REG_R5, @@ -112,7 +115,9 @@ static const int tcg_target_reg_alloc_order[] = { TCG_REG_R8, TCG_REG_R9, TCG_REG_R10, +#ifndef __APPLE__ TCG_REG_R11, +#endif TCG_REG_R12, TCG_REG_R24, TCG_REG_R25, @@ -136,6 +141,10 @@ static const int tcg_target_call_oarg_regs[2] = { }; static const int tcg_target_callee_save_regs[] = { +#ifdef __APPLE__ +TCG_REG_R11, +TCG_REG_R13, +#endif No need to add R13, it's reserved anyhow. TCG_REG_R14, TCG_REG_R15, TCG_REG_R16, @@ -477,8 +486,21 @@ static void tcg_out_movi (TCGContext *s, TCGType type, } } +#ifdef __APPLE__ +static void tcg_out_b (TCGContext *s, int mask, tcg_target_long target); +#endif + static void tcg_out_call (TCGContext *s, tcg_target_long arg, int const_arg) { +#ifdef __APPLE__ +if (const_arg) { +tcg_out_b (s, LK, arg); +} +else { +tcg_out32 (s, MTSPR | RS (arg) | LR); +tcg_out32 (s, BCLR | BO_ALWAYS | LK); +} +#else int reg; if (const_arg) { @@ -492,6 +514,7 @@ static void tcg_out_call (TCGContext *s, tcg_target_long arg, int const_arg) tcg_out32 (s, LD | RT (11) | RA (reg) | 16); tcg_out32 (s, LD | RT (2) | RA (reg) | 8); tcg_out32 (s, BCCTR | BO_ALWAYS | LK); +#endif } static void tcg_out_ldst (TCGContext *s, int ret, int addr, @@ -859,10 +882,12 @@ void tcg_target_qemu_prologue (TCGContext *s) ; frame_size = (frame_size + 15) ~15; +#ifndef __APPLE__ /* First emit adhoc function descriptor */ addr = (uint64_t) s-code_ptr + 24; tcg_out32 (s, addr 32); tcg_out32 (s, addr); /* entry point */ s-code_ptr += 16; /* skip TOC and environment pointer */ +#endif /* Prologue */ tcg_out32 (s, MFSPR | RT (0) | LR); The frame format is different to that of PPC-elf64abi, shouldn't really make a difference here, then again i don't have access to PPC64 Mac OSX, so can't really verify that. @@ -1516,6 +1541,9 @@ void tcg_target_init (TCGContext *s) tcg_regset_set32 (tcg_target_available_regs[TCG_TYPE_I64], 0, 0x); tcg_regset_set32 (tcg_target_call_clobber_regs, 0, (1 TCG_REG_R0) | +#ifdef __APPLE__ + (1 TCG_REG_R2) | +#endif (1 TCG_REG_R3) | (1 TCG_REG_R4) | (1 TCG_REG_R5) | @@ -1531,7 +1559,9 @@ void tcg_target_init (TCGContext *s) tcg_regset_clear (s-reserved_regs); tcg_regset_set_reg (s-reserved_regs, TCG_REG_R0); tcg_regset_set_reg (s-reserved_regs, TCG_REG_R1); +#ifndef __APPLE__ tcg_regset_set_reg (s-reserved_regs, TCG_REG_R2); +#endif tcg_regset_set_reg (s-reserved_regs, TCG_REG_R13); #ifdef CONFIG_USE_GUEST_BASE Otherwise looks good.. Should i commit it with R13 fixed? -- mailto:av1...@comtv.ru
[Qemu-devel] Re: [PATCH 1/3] TCG: Mac OS X support for ppc64 target
Am 06.12.2009 um 06:13 schrieb malc: On Sun, 6 Dec 2009, Andreas Faerber wrote: Darwin/ppc64 does not use function descriptors, adapt prologue and tcg_out_call accordingly. GPR2 is available for general use, so let's use it. http://developer.apple.com/mac/library/documentation/DeveloperTools/Conceptual/LowLevelABI/110-64-bit_PowerPC_Function_Calling_Conventions/64bitPowerPC.html Signed-off-by: Andreas Faerber andreas.faer...@web.de Cc: malc av1...@comtv.ru --- tcg/ppc64/tcg-target.c | 30 ++ 1 files changed, 30 insertions(+), 0 deletions(-) diff --git a/tcg/ppc64/tcg-target.c b/tcg/ppc64/tcg-target.c index a612e10..bf9b7d9 100644 --- a/tcg/ppc64/tcg-target.c +++ b/tcg/ppc64/tcg-target.c @@ -859,10 +882,12 @@ void tcg_target_qemu_prologue (TCGContext *s) ; frame_size = (frame_size + 15) ~15; +#ifndef __APPLE__ /* First emit adhoc function descriptor */ addr = (uint64_t) s-code_ptr + 24; tcg_out32 (s, addr 32); tcg_out32 (s, addr); /* entry point */ s-code_ptr += 16; /* skip TOC and environment pointer */ +#endif /* Prologue */ tcg_out32 (s, MFSPR | RT (0) | LR); The frame format is different to that of PPC-elf64abi, shouldn't really make a difference here, then again i don't have access to PPC64 Mac OSX, so can't really verify that. I checked that the linkage area is 48, too, the LR offset is 16, too. The parameter area was depicted as 64 128. So I guess we're good there. Otherwise looks good.. Should i commit it with R13 fixed? About the callee-save stuff I was less certain. Feel free to make modifications (e.g., moving tcg_out_call up?) or have me resubmit. Thanks, Andreas
[Qemu-devel] Re: [PATCH 1/3] TCG: Mac OS X support for ppc64 target
On Sun, 6 Dec 2009, Andreas F?rber wrote: Am 06.12.2009 um 06:13 schrieb malc: On Sun, 6 Dec 2009, Andreas Faerber wrote: Darwin/ppc64 does not use function descriptors, adapt prologue and tcg_out_call accordingly. GPR2 is available for general use, so let's use it. http://developer.apple.com/mac/library/documentation/DeveloperTools/Conceptual/LowLevelABI/110-64-bit_PowerPC_Function_Calling_Conventions/64bitPowerPC.html Signed-off-by: Andreas Faerber andreas.faer...@web.de Cc: malc av1...@comtv.ru --- tcg/ppc64/tcg-target.c | 30 ++ 1 files changed, 30 insertions(+), 0 deletions(-) diff --git a/tcg/ppc64/tcg-target.c b/tcg/ppc64/tcg-target.c index a612e10..bf9b7d9 100644 --- a/tcg/ppc64/tcg-target.c +++ b/tcg/ppc64/tcg-target.c @@ -859,10 +882,12 @@ void tcg_target_qemu_prologue (TCGContext *s) ; frame_size = (frame_size + 15) ~15; +#ifndef __APPLE__ /* First emit adhoc function descriptor */ addr = (uint64_t) s-code_ptr + 24; tcg_out32 (s, addr 32); tcg_out32 (s, addr); /* entry point */ s-code_ptr += 16; /* skip TOC and environment pointer */ +#endif /* Prologue */ tcg_out32 (s, MFSPR | RT (0) | LR); The frame format is different to that of PPC-elf64abi, shouldn't really make a difference here, then again i don't have access to PPC64 Mac OSX, so can't really verify that. I checked that the linkage area is 48, too, the LR offset is 16, too. The parameter area was depicted as 64 128. So I guess we're good there. Otherwise looks good.. Should i commit it with R13 fixed? About the callee-save stuff I was less certain. Feel free to make modifications (e.g., moving tcg_out_call up?) or have me resubmit. Sorry, i don't get this part, i was just thinking of removing R13 from the list. Moving tcg_out_call? -- mailto:av1...@comtv.ru