766 Register Rscratch1, Register Rscratch2) { |
766 Register Rscratch1, Register Rscratch2) { |
767 // Pop interpreter frame. |
767 // Pop interpreter frame. |
768 ld(Rscratch1, 0, R1_SP); // *SP |
768 ld(Rscratch1, 0, R1_SP); // *SP |
769 ld(Rsender_sp, _ijava_state_neg(sender_sp), Rscratch1); // top_frame_sp |
769 ld(Rsender_sp, _ijava_state_neg(sender_sp), Rscratch1); // top_frame_sp |
770 ld(Rscratch2, 0, Rscratch1); // **SP |
770 ld(Rscratch2, 0, Rscratch1); // **SP |
771 #ifdef ASSERT |
|
772 { |
|
773 Label Lok; |
|
774 ld(R0, _ijava_state_neg(ijava_reserved), Rscratch1); |
|
775 cmpdi(CCR0, R0, 0x5afe); |
|
776 beq(CCR0, Lok); |
|
777 stop("frame corrupted (remove activation)", 0x5afe); |
|
778 bind(Lok); |
|
779 } |
|
780 #endif |
|
781 if (return_pc!=noreg) { |
771 if (return_pc!=noreg) { |
782 ld(return_pc, _abi(lr), Rscratch1); // LR |
772 ld(return_pc, _abi(lr), Rscratch1); // LR |
783 } |
773 } |
784 |
774 |
785 // Merge top frames. |
775 // Merge top frames. |
2261 cmpdi(CCR0, R0, frame::abi_reg_args_size + frame::ijava_state_size); |
2251 cmpdi(CCR0, R0, frame::abi_reg_args_size + frame::ijava_state_size); |
2262 bge(CCR0, Lok); |
2252 bge(CCR0, Lok); |
2263 stop("frame too small (restore istate)", 0x5432); |
2253 stop("frame too small (restore istate)", 0x5432); |
2264 bind(Lok); |
2254 bind(Lok); |
2265 } |
2255 } |
2266 { |
|
2267 Label Lok; |
|
2268 ld(R0, _ijava_state_neg(ijava_reserved), scratch); |
|
2269 cmpdi(CCR0, R0, 0x5afe); |
|
2270 beq(CCR0, Lok); |
|
2271 stop("frame corrupted (restore istate)", 0x5afe); |
|
2272 bind(Lok); |
|
2273 } |
|
2274 #endif |
2256 #endif |
2275 } |
2257 } |
2276 |
2258 |
2277 void InterpreterMacroAssembler::get_method_counters(Register method, |
2259 void InterpreterMacroAssembler::get_method_counters(Register method, |
2278 Register Rcounters, |
2260 Register Rcounters, |