[Qemu-devel] Re: [PATCH 1/3] TCG: Mac OS X support for ppc64 target

2009-12-06 Thread Andreas Färber


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

2009-12-05 Thread 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
 @@ -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

2009-12-05 Thread Andreas Färber


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

2009-12-05 Thread 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
 
   @@ -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