_LP64, int32_t and intptr_t

Xiaobin Lu Xiaobin.Lu at Sun.COM
Wed Dec 17 16:48:43 PST 2008


I am now working on a short term solution (I believe we can live with 
that for now). A bug will be filed and if that works well on other 
platforms, I am going to put back the change and let your folks know.

Thanks,
-Xiaobin

On 12/13/08 18:34, Michael Franz wrote:
> Hi,
>
> Looking at assembler_x86.hpp and the usage of _LP64.  It seems that 
> _LP64 is used to decide whether or not to define 32 bit version of
>   void movptr(Address dst, int32_t imm32);
>   void movptr(Register dst, int32_t imm32);
> to work around casting calls when imm32 would be zero or NULL on 64 
> bit platforms.  Wouldn't it be better to use the NOT_LP64 and 
> LP64_ONLY macros with
> void MacroAssembler::movptr(Address dst, intptr_t src)
> void MacroAssembler::movptr(Register dst, intptr_t src)
> instead?  This would change the casting to use the intptr_t instead of 
> int32_t.  This would allow the compiler to pick the correct method and 
> reduce the need for 32 bit only versions.
>
> The the implementation would be:
> void MacroAssembler::movptr(Address dst, intptr_t src) {
> #ifdef _LP64
>   mov64(rscratch1, src);
>   movq(dst, rscratch1);   
> #else
>   movslq(dst, src);
> #endif
> }
>
> void MacroAssembler::movptr(Register dst, intptr_t src) {
>   LP64_ONLY(mov64(dst, src)) NOT_LP64(movl(dst, src));
> }
> would not need to be changed as it already uses the LP64 macros.
>
> What is interesting that
> void MacroAssembler::movptr(Register dst, int32_t src) {
>   mov64(dst, (intptr_t)src);
> }
> uses mov64 instead of movl.
>
>
> I have attached the changes I did to get the OS X build to work again.
>
> Michael




More information about the bsd-port-dev mailing list