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(); |