|
|
|
|
|
|
|
|
|
|
xen-devel
RE: [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
|
|
|
|
|