qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] 64-bit target
@ 2003-06-29 12:42 Johan Rydberg
  2003-06-29 13:22 ` Fabrice Bellard
  0 siblings, 1 reply; 6+ messages in thread
From: Johan Rydberg @ 2003-06-29 12:42 UTC (permalink / raw)
  To: qemu-devel

Hi,

what changes has to be done to make QEMU support 64-bit targets? 
Any big overall changes needed at all?

-- 
Johan Rydberg, Free Software Developer, Sweden
http://rtmk.sf.net | http://www.nongnu.org/guss/

Playing Deftones - Minerva

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] 64-bit target
  2003-06-29 12:42 [Qemu-devel] 64-bit target Johan Rydberg
@ 2003-06-29 13:22 ` Fabrice Bellard
  2003-06-29 18:32   ` Johan Rydberg
  0 siblings, 1 reply; 6+ messages in thread
From: Fabrice Bellard @ 2003-06-29 13:22 UTC (permalink / raw)
  To: qemu-devel

Johan Rydberg wrote:
> Hi,
> 
> what changes has to be done to make QEMU support 64-bit targets? 
> Any big overall changes needed at all?

No big changes, except that you must use a soft MMU if you want to use 
real 64 bit pointers.

Fabrice.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] 64-bit target
  2003-06-29 13:22 ` Fabrice Bellard
@ 2003-06-29 18:32   ` Johan Rydberg
  2003-06-29 21:15     ` Fabrice Bellard
  0 siblings, 1 reply; 6+ messages in thread
From: Johan Rydberg @ 2003-06-29 18:32 UTC (permalink / raw)
  To: qemu-devel

Fabrice Bellard <fabrice.bellard@free.fr> wrote:

: Johan Rydberg wrote:
: > Hi,
: > 
: > what changes has to be done to make QEMU support 64-bit targets? 
: > Any big overall changes needed at all?
: 
: No big changes, except that you must use a soft MMU if you want to use 
: real 64 bit pointers.

After doing a little research it seems that dyngen can not cope with 
64-bit immediates.  ie PARAMn can only be as large as sizeof (void *).
This must of course be fixed for a 64-bit target.  Any ideas how to
fix it?

-- 
Johan Rydberg, Free Software Developer, Sweden
http://rtmk.sf.net | http://www.nongnu.org/guss/

Playing Track No09

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] 64-bit target
  2003-06-29 18:32   ` Johan Rydberg
@ 2003-06-29 21:15     ` Fabrice Bellard
  2003-06-29 21:28       ` Johan Rydberg
  0 siblings, 1 reply; 6+ messages in thread
From: Fabrice Bellard @ 2003-06-29 21:15 UTC (permalink / raw)
  To: qemu-devel

Johan Rydberg wrote:
> Fabrice Bellard <fabrice.bellard@free.fr> wrote:
> 
> : Johan Rydberg wrote:
> : > Hi,
> : > 
> : > what changes has to be done to make QEMU support 64-bit targets? 
> : > Any big overall changes needed at all?
> : 
> : No big changes, except that you must use a soft MMU if you want to use 
> : real 64 bit pointers.
> 
> After doing a little research it seems that dyngen can not cope with 
> 64-bit immediates.  ie PARAMn can only be as large as sizeof (void *).
> This must of course be fixed for a 64-bit target.  Any ideas how to
> fix it?

You can just use two parameters and load two 32 bit values.

Fabrice.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] 64-bit target
  2003-06-29 21:15     ` Fabrice Bellard
@ 2003-06-29 21:28       ` Johan Rydberg
  2003-06-30 14:35         ` Johan Rydberg
  0 siblings, 1 reply; 6+ messages in thread
From: Johan Rydberg @ 2003-06-29 21:28 UTC (permalink / raw)
  To: qemu-devel

Fabrice Bellard <fabrice.bellard@free.fr> wrote:

: You can just use two parameters and load two 32 bit values.

Declaring T0 as a long long, and trying to set it to an immediate
value results in the following code:  Which is a bit of an overhead
I think :)

void OPPROTO
op_movdi_t0_uimm (void)
{
  34:   83 ec 14                sub    $0x14,%esp
  T0 = (unsigned long long) (PARAM1 << 32 | PARAM2);
  37:   b8 00 00 00 00          mov    $0x0,%eax
                        38: R_386_32    __op_param1
  3c:   89 04 24                mov    %eax,(%esp,1)
  3f:   99                      cltd   
  40:   8b 04 24                mov    (%esp,1),%eax
  43:   89 54 24 04             mov    %edx,0x4(%esp,1)
  47:   89 c2                   mov    %eax,%edx
  49:   31 c0                   xor    %eax,%eax
  4b:   89 04 24                mov    %eax,(%esp,1)
  4e:   b8 00 00 00 00          mov    $0x0,%eax
                        4f: R_386_32    __op_param2
  53:   89 54 24 04             mov    %edx,0x4(%esp,1)
  57:   99                      cltd   
  58:   89 44 24 08             mov    %eax,0x8(%esp,1)
  5c:   89 54 24 0c             mov    %edx,0xc(%esp,1)
  60:   8b 04 24                mov    (%esp,1),%eax
  63:   8b 54 24 04             mov    0x4(%esp,1),%edx
  67:   0b 44 24 08             or     0x8(%esp,1),%eax
  6b:   0b 54 24 0c             or     0xc(%esp,1),%edx
  6f:   89 c6                   mov    %eax,%esi
  71:   89 d7                   mov    %edx,%edi
}
  73:   83 c4 14                add    $0x14,%esp
  76:   c3                      ret    
  77:   90                      nop    


-- 
Johan Rydberg, Free Software Developer, Sweden
http://rtmk.sf.net | http://www.nongnu.org/guss/

Playing Track No03

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] 64-bit target
  2003-06-29 21:28       ` Johan Rydberg
@ 2003-06-30 14:35         ` Johan Rydberg
  0 siblings, 0 replies; 6+ messages in thread
From: Johan Rydberg @ 2003-06-30 14:35 UTC (permalink / raw)
  To: qemu-devel

Johan Rydberg <jrydberg@night.trouble.net> wrote:

: Fabrice Bellard <fabrice.bellard@free.fr> wrote:
: 
: : You can just use two parameters and load two 32 bit values.
: 
: Declaring T0 as a long long, and trying to set it to an immediate
: value results in the following code:  Which is a bit of an overhead
: I think :)

Using an union like this;

union fast_move { struct { USI hi; USI lo; } s; UDI d; } x;

And a macro like this;

#define GET_UDI_FROM_PARAMS(p1, p2) (((union fast_move) { { (USI) p1, (USI) p2 } }).d)

Reduces the code:

void OPPROTO
op_movdi_t0_uimm (void)
{
  T0 = GET_UDI_FROM_PARAMS (PARAM1, PARAM2);
}

To:

00000034 <op_movdi_t0_uimm>:
  34:   b8 00 00 00 00          mov    $0x0,%eax
                        35: R_386_32    __op_param1
  39:   ba 00 00 00 00          mov    $0x0,%edx
                        3a: R_386_32    __op_param2
  3e:   89 c6                   mov    %eax,%esi
  40:   89 d7                   mov    %edx,%edi

Can you figure out how to make it move to %esi and %edi directly?
I can, for one, not. 

-- 
Johan Rydberg, Free Software Developer, Sweden
http://rtmk.sf.net | http://www.nongnu.org/guss/

Playing Various Artists - Deftones / My Own Summer (Shove It)

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2003-06-30 14:39 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-06-29 12:42 [Qemu-devel] 64-bit target Johan Rydberg
2003-06-29 13:22 ` Fabrice Bellard
2003-06-29 18:32   ` Johan Rydberg
2003-06-29 21:15     ` Fabrice Bellard
2003-06-29 21:28       ` Johan Rydberg
2003-06-30 14:35         ` Johan Rydberg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).