WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

RE: [Xen-devel] Definition of eax and rax

To: "Petersson, Mats" <Mats.Petersson@xxxxxxx>, "Keir Fraser" <Keir.Fraser@xxxxxxxxxxxx>
Subject: RE: [Xen-devel] Definition of eax and rax
From: "Li, Xin B" <xin.b.li@xxxxxxxxx>
Date: Wed, 13 Dec 2006 20:31:28 +0800
Cc: Xen Development Mailing List <xen-devel@xxxxxxxxxxxxxxxxxxx>
Delivery-date: Wed, 13 Dec 2006 04:31:37 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Thread-index: Accer/ms2OKzy1XYQWG36/j6Txq+WgAADaTgAAB5vvA=
Thread-topic: [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?
>
>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

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel