All of lore.kernel.org
 help / color / mirror / Atom feed
* Definition of eax and rax
@ 2006-12-13 12:12 Li, Xin B
  2006-12-13 12:22 ` Petersson, Mats
  2006-12-13 12:37 ` Jan Beulich
  0 siblings, 2 replies; 7+ messages in thread
From: Li, Xin B @ 2006-12-13 12:12 UTC (permalink / raw)
  To: Keir Fraser; +Cc: Xen Development Mailing List

Keir, just noticed the macro:
#define __DECL_REG(name) union { uint64_t r ## name, e ## name; }
So, rax and eax are both 64bit, but I think we'd better define eax to
32bit, how do you think?
-Xin

^ permalink raw reply	[flat|nested] 7+ messages in thread
* RE: Definition of eax and rax
@ 2006-12-13 12:15 Li, Xin B
  2006-12-13 12:35 ` Jan Beulich
  0 siblings, 1 reply; 7+ messages in thread
From: Li, Xin B @ 2006-12-13 12:15 UTC (permalink / raw)
  To: Li, Xin B, Keir Fraser; +Cc: Xen Development Mailing List

And I don't think it can work for none GCC compiler, since we use eax from time to time :-(
#ifdef __GNUC__
/* Anonymous union includes both 32- and 64-bit names (e.g., eax/rax). */
#define __DECL_REG(name) union { uint64_t r ## name, e ## name; }
#else
/* Non-gcc sources must always use the proper 64-bit name (e.g., rax). */
#define __DECL_REG(name) uint64_t r ## name
#endif

Am I right?
-Xin 

>-----Original Message-----
>From: xen-devel-bounces@lists.xensource.com 
>[mailto:xen-devel-bounces@lists.xensource.com] On Behalf Of Li, Xin B
>Sent: 2006年12月13日 20:13
>To: Keir Fraser
>Cc: Xen Development Mailing List
>Subject: [Xen-devel] Definition of eax and rax
>
>Keir, just noticed the macro:
>#define __DECL_REG(name) union { uint64_t r ## name, e ## name; }
>So, rax and eax are both 64bit, but I think we'd better define eax to
>32bit, how do you think?
>-Xin
>
>_______________________________________________
>Xen-devel mailing list
>Xen-devel@lists.xensource.com
>http://lists.xensource.com/xen-devel
>

^ permalink raw reply	[flat|nested] 7+ messages in thread
* RE: Definition of eax and rax
@ 2006-12-13 12:31 Li, Xin B
  2006-12-13 12:38 ` Petersson, Mats
  0 siblings, 1 reply; 7+ messages in thread
From: Li, Xin B @ 2006-12-13 12:31 UTC (permalink / raw)
  To: Petersson, Mats, Keir Fraser; +Cc: Xen Development Mailing List

>> Keir, just noticed the macro:
>> #define __DECL_REG(name) union { uint64_t r ## name, e ## name; }
>> So, rax and eax are both 64bit, but I think we'd better define eax to
>> 32bit, how do you think?
>
>I believe the purpose of the double-declaration is to have the ability
>to do generic code that uses eax for both 32- and 64-bit code, avoiding
>having to write two different pieces of code for 32- and 64-bit code. 
>
>If you want to use the lower 32-bits of rAX in 64-bit mode, I'd suggest
>a more explicit way (like casting it to 32-bit size, for exmple).

Still a little bit confusing if eax is 64bit here :-(, people need keep
this in mind when programming on x86_64 xen.

>
>Note also that the x86_64 specification says that a 32-bit write to a
>64-bit register should zero-fill the upper 32 bits, which won't happen
>if you have :
>
>	union { uint64_t rax; uint32_t eax } rAX;
>	rAX.eax = 7;
>
>You'd end up with whatever was there from before in the upper bits of
>rAX.rax... 
>

Agree! And a little bit hate of the zero-fill. 
Thanks
-Xin

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

end of thread, other threads:[~2006-12-13 12:38 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-12-13 12:12 Definition of eax and rax Li, Xin B
2006-12-13 12:22 ` Petersson, Mats
2006-12-13 12:37 ` Jan Beulich
  -- strict thread matches above, loose matches on Subject: below --
2006-12-13 12:15 Li, Xin B
2006-12-13 12:35 ` Jan Beulich
2006-12-13 12:31 Li, Xin B
2006-12-13 12:38 ` Petersson, Mats

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.