src/cpu/sparc/vm/templateInterpreter_sparc.cpp

Print this page

        

@@ -492,12 +492,10 @@
   //    is necessary.
   //
   // (gri - 2/25/2000)
 
 
-  const Address size_of_parameters(G5_method, Method::size_of_parameters_offset());
-  const Address size_of_locals    (G5_method, Method::size_of_locals_offset());
   const Address constMethod       (G5_method, Method::const_offset());
   int rounded_vm_local_words = round_to( frame::interpreter_frame_vm_local_words, WordsPerLong );
 
   const int extra_space =
     rounded_vm_local_words +                   // frame local scratch space

@@ -509,11 +507,12 @@
   const Register Otmp1 = O3;
   const Register Otmp2 = O4;
   // Lscratch can't be used as a temporary because the call_stub uses
   // it to assert that the stack frame was setup correctly.
 
-  __ lduh( size_of_parameters, Glocals_size);
+  __ ld_ptr( constMethod, Glocals_size );
+  __ lduh( Glocals_size, in_bytes(ConstMethod::size_of_parameters_offset()), Glocals_size);
 
   // Gargs points to first local + BytesPerWord
   // Set the saved SP after the register window save
   //
   assert_different_registers(Gargs, Glocals_size, Gframe_size, O5_savedSP);

@@ -528,11 +527,12 @@
   } else {
 
     //
     // Compute number of locals in method apart from incoming parameters
     //
-    __ lduh( size_of_locals, Otmp1 );
+    __ ld_ptr( G5_method, Method::const_offset(), Otmp1 );
+    __ lduh( Otmp1, in_bytes(ConstMethod::size_of_locals_offset()), Otmp1 );
     __ sub( Otmp1, Glocals_size, Glocals_size );
     __ round_to( Glocals_size, WordsPerLong );
     __ sll( Glocals_size, Interpreter::logStackElementSize, Glocals_size );
 
     // see if the frame is greater than one page in size. If so,

@@ -1254,12 +1254,10 @@
   const Register Gtmp2 = G1_scratch;
 
   // make sure registers are different!
   assert_different_registers(G2_thread, G5_method, Gargs, Gtmp1, Gtmp2);
 
-  const Address size_of_parameters(G5_method, Method::size_of_parameters_offset());
-  const Address size_of_locals    (G5_method, Method::size_of_locals_offset());
   // Seems like G5_method is live at the point this is used. So we could make this look consistent
   // and use in the asserts.
   const Address access_flags      (Lmethod,   Method::access_flags_offset());
 
   const Register Glocals_size = G3;

@@ -1307,12 +1305,13 @@
   init_value = G0;
   Label clear_loop;
 
   // NOTE: If you change the frame layout, this code will need to
   // be updated!
-  __ lduh( size_of_locals, O2 );
-  __ lduh( size_of_parameters, O1 );
+  __ ld_ptr( G5_method, Method::const_offset(), O1 ); 
+  __ lduh( O1, in_bytes(ConstMethod::size_of_locals_offset()), O2 );
+  __ lduh( O1, in_bytes(ConstMethod::size_of_parameters_offset()), O1 );
   __ sll( O2, Interpreter::logStackElementSize, O2);
   __ sll( O1, Interpreter::logStackElementSize, O1 );
   __ sub( Llocals, O2, O2 );
   __ sub( Llocals, O1, O1 );
 

@@ -1823,11 +1822,12 @@
 
     const Register Gtmp1 = G3_scratch;
     const Register Gtmp2 = G1_scratch;
 
     // Compute size of arguments for saving when returning to deoptimized caller
-    __ lduh(Lmethod, in_bytes(Method::size_of_parameters_offset()), Gtmp1);
+    __ ld_ptr(Lmethod, in_bytes(Method::const_offset()), Gtmp1);
+    __ lduh(Gtmp1, in_bytes(ConstMethod::size_of_parameters_offset()), Gtmp1);
     __ sll(Gtmp1, Interpreter::logStackElementSize, Gtmp1);
     __ sub(Llocals, Gtmp1, Gtmp2);
     __ add(Gtmp2, wordSize, Gtmp2);
     // Save these arguments
     __ call_VM_leaf(L7_thread_cache, CAST_FROM_FN_PTR(address, Deoptimization::popframe_preserve_args), G2_thread, Gtmp1, Gtmp2);