Additional type corrections

Kurt Miller kurt at intricatesoftware.com
Tue Jan 20 08:20:58 PST 2009


Here are more datatype corrections for the bsd-port tree. I've
tested a variation of this diff on my OpenBSD port (the bsd-port
tree doesn't build yet on OpenBSD; still a work in progress). These
should be committed and then we need to extract all the datatype
corrections for submitting a new bug report for the main tree.

The changes are as follows:
- There is no movptr(Address, int32_t) function for x86/32 bit.
Casting to int32_t for movptr on x86/32 should be avoided. Instead
cast directly to intptr_t where needed.
- Several places in the x86/32 code movl is directly used where
movptr is the correct function. movptr on x86/32 ends up using
movl but deals with the type variations without the need for
additional casts.
- Use NULL_WORD to assign a NULL value to intptr_t instead of
(intptr_t) NULL

diff -r b86ce5362022 src/cpu/x86/vm/interp_masm_x86_32.cpp
--- a/src/cpu/x86/vm/interp_masm_x86_32.cpp	Sun Jan 18 21:42:26 2009 -0800
+++ b/src/cpu/x86/vm/interp_masm_x86_32.cpp	Tue Jan 20 10:49:33 2009 -0500
@@ -149,7 +149,7 @@
   // Clean up tos value in the thread object
   movl(tos_addr,  (int32_t) ilgl);
   movptr(val_addr,  NULL_WORD);
-  NOT_LP64(movl(val_addr1, (int32_t)NULL_WORD));
+  NOT_LP64(movptr(val_addr1, NULL_WORD));
 }
 
 
@@ -473,7 +473,7 @@
       movptr(Address(rdi, Interpreter::local_tag_offset_in_bytes(n+1)), (intptr_t)frame::TagValue);
       movptr(Address(rdi, Interpreter::local_tag_offset_in_bytes(n)), (intptr_t)frame::TagValue);
     } else {
-      movptr(Address(rdi, Interpreter::local_tag_offset_in_bytes(n)), (int32_t)tag);
+      movptr(Address(rdi, Interpreter::local_tag_offset_in_bytes(n)), (intptr_t)tag);
     }
   }
 }
@@ -487,7 +487,7 @@
                     Interpreter::local_tag_offset_in_bytes(0)), (intptr_t)frame::TagValue);
     } else {
       movptr(Address(rdi, idx, Interpreter::stackElementScale(),
-                               Interpreter::local_tag_offset_in_bytes(0)), (int32_t)tag);
+                               Interpreter::local_tag_offset_in_bytes(0)), (intptr_t)tag);
     }
   }
 }
@@ -1319,7 +1319,7 @@
   int recvr_offset = in_bytes(VirtualCallData::receiver_offset(start_row));
   set_mdp_data_at(mdp, recvr_offset, receiver);
   int count_offset = in_bytes(VirtualCallData::receiver_count_offset(start_row));
-  movptr(reg2, (int32_t)DataLayout::counter_increment);
+  movptr(reg2, (intptr_t)DataLayout::counter_increment);
   set_mdp_data_at(mdp, count_offset, reg2);
   jmp(done);
 }
@@ -1458,7 +1458,7 @@
     test_method_data_pointer(mdp, profile_continue);
 
     // Build the base (index * per_case_size_in_bytes()) + case_array_offset_in_bytes()
-    movptr(reg2, (int32_t)in_bytes(MultiBranchData::per_case_size()));
+    movptr(reg2, (intptr_t)in_bytes(MultiBranchData::per_case_size()));
     // index is positive and so should have correct value if this code were
     // used on 64bits
     imulptr(index, reg2);
diff -r b86ce5362022 src/cpu/x86/vm/interpreterRT_x86_32.cpp
--- a/src/cpu/x86/vm/interpreterRT_x86_32.cpp	Sun Jan 18 21:42:26 2009 -0800
+++ b/src/cpu/x86/vm/interpreterRT_x86_32.cpp	Tue Jan 20 10:49:33 2009 -0500
@@ -110,7 +110,7 @@
   virtual void pass_object() {
     // pass address of from
     intptr_t from_addr = (intptr_t)(_from + Interpreter::local_offset_in_bytes(0));
-    *_to++ = (*(intptr_t*)from_addr == 0) ? (intptr_t) NULL : from_addr;
+    *_to++ = (*(intptr_t*)from_addr == 0) ? NULL_WORD : from_addr;
     debug_only(verify_tag(frame::TagReference));
     _from -= Interpreter::stackElementSize();
    }
diff -r b86ce5362022 src/cpu/x86/vm/templateTable_x86_32.cpp
--- a/src/cpu/x86/vm/templateTable_x86_32.cpp	Sun Jan 18 21:42:26 2009 -0800
+++ b/src/cpu/x86/vm/templateTable_x86_32.cpp	Tue Jan 20 10:49:33 2009 -0500
@@ -137,10 +137,10 @@
         // Do the actual store
         // noreg means NULL
         if (val == noreg) {
-          __ movl(Address(rdx, 0), (int32_t)NULL_WORD);
+          __ movptr(Address(rdx, 0), NULL_WORD);
           // No post barrier for NULL
         } else {
-          __ movl(Address(rdx, 0), val);
+          __ movptr(Address(rdx, 0), val);
           __ g1_write_barrier_post(rdx, rax, rcx, rbx, rsi);
         }
         __ restore_bcp();
@@ -152,9 +152,9 @@
     case BarrierSet::CardTableExtension:
       {
         if (val == noreg) {
-          __ movl(obj, (int32_t) NULL_WORD);
+          __ movptr(obj, NULL_WORD);
         } else {
-          __ movl(obj, val);
+          __ movptr(obj, val);
           // flatten object address if needed
           if (!precise || (obj.index() == noreg && obj.disp() == 0)) {
             __ store_check(obj.base());
@@ -168,9 +168,9 @@
     case BarrierSet::ModRef:
     case BarrierSet::Other:
       if (val == noreg) {
-        __ movl(obj, (int32_t) NULL_WORD);
+        __ movptr(obj, NULL_WORD);
       } else {
-        __ movl(obj, val);
+        __ movptr(obj, val);
       }
       break;
     default      :



More information about the bsd-port-dev mailing list