_LP64, int32_t and intptr_t

Michael Franz mvfranz at gmail.com
Sat Dec 13 18:34:02 PST 2008


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/bsd-port-dev/attachments/20081213/9b7550d6/attachment.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: hotspot.patches
Type: application/octet-stream
Size: 21340 bytes
Desc: not available
Url : http://mail.openjdk.java.net/pipermail/bsd-port-dev/attachments/20081213/9b7550d6/hotspot.patches 


More information about the bsd-port-dev mailing list