hotspot/src/share/vm/runtime/sharedRuntime.cpp
changeset 5419 f2e8cc8c12ea
parent 5334 b2d040a8d375
child 5420 586d3988e72b
equal deleted inserted replaced
5418:c4955cb6ed33 5419:f2e8cc8c12ea
  1840         // There are all promoted to T_INT in the calling convention
  1840         // There are all promoted to T_INT in the calling convention
  1841         return T_INT;
  1841         return T_INT;
  1842 
  1842 
  1843       case T_OBJECT:
  1843       case T_OBJECT:
  1844       case T_ARRAY:
  1844       case T_ARRAY:
  1845         if (!TaggedStackInterpreter) {
       
  1846 #ifdef _LP64
  1845 #ifdef _LP64
  1847           return T_LONG;
  1846         return T_LONG;
  1848 #else
  1847 #else
  1849           return T_INT;
  1848         return T_INT;
  1850 #endif
  1849 #endif
  1851         }
       
  1852         return T_OBJECT;
       
  1853 
  1850 
  1854       case T_INT:
  1851       case T_INT:
  1855       case T_LONG:
  1852       case T_LONG:
  1856       case T_FLOAT:
  1853       case T_FLOAT:
  1857       case T_DOUBLE:
  1854       case T_DOUBLE:
  2593   intptr_t *buf = NEW_C_HEAP_ARRAY(intptr_t,buf_size_words);
  2590   intptr_t *buf = NEW_C_HEAP_ARRAY(intptr_t,buf_size_words);
  2594 
  2591 
  2595   // Copy the locals.  Order is preserved so that loading of longs works.
  2592   // Copy the locals.  Order is preserved so that loading of longs works.
  2596   // Since there's no GC I can copy the oops blindly.
  2593   // Since there's no GC I can copy the oops blindly.
  2597   assert( sizeof(HeapWord)==sizeof(intptr_t), "fix this code");
  2594   assert( sizeof(HeapWord)==sizeof(intptr_t), "fix this code");
  2598   if (TaggedStackInterpreter) {
  2595   Copy::disjoint_words((HeapWord*)fr.interpreter_frame_local_at(max_locals-1),
  2599     for (int i = 0; i < max_locals; i++) {
       
  2600       // copy only each local separately to the buffer avoiding the tag
       
  2601       buf[i] = *fr.interpreter_frame_local_at(max_locals-i-1);
       
  2602     }
       
  2603   } else {
       
  2604     Copy::disjoint_words(
       
  2605                        (HeapWord*)fr.interpreter_frame_local_at(max_locals-1),
       
  2606                        (HeapWord*)&buf[0],
  2596                        (HeapWord*)&buf[0],
  2607                        max_locals);
  2597                        max_locals);
  2608   }
       
  2609 
  2598 
  2610   // Inflate locks.  Copy the displaced headers.  Be careful, there can be holes.
  2599   // Inflate locks.  Copy the displaced headers.  Be careful, there can be holes.
  2611   int i = max_locals;
  2600   int i = max_locals;
  2612   for( BasicObjectLock *kptr2 = fr.interpreter_frame_monitor_end();
  2601   for( BasicObjectLock *kptr2 = fr.interpreter_frame_monitor_end();
  2613        kptr2 < fr.interpreter_frame_monitor_begin();
  2602        kptr2 < fr.interpreter_frame_monitor_begin();