src/cpu/mips/vm/templateInterpreter_mips_64.cpp

changeset 9705
0b27fc8adf1b
parent 9645
ac996ba07f9d
child 9760
8b305ff8f6b6
equal deleted inserted replaced
9704:02fc94107aa2 9705:0b27fc8adf1b
1301 // reset handle block 1301 // reset handle block
1302 __ ld(t, thread, in_bytes(JavaThread::active_handles_offset())); 1302 __ ld(t, thread, in_bytes(JavaThread::active_handles_offset()));
1303 __ sw(R0, t, JNIHandleBlock::top_offset_in_bytes()); 1303 __ sw(R0, t, JNIHandleBlock::top_offset_in_bytes());
1304 1304
1305 // If result was an oop then unbox and save it in the frame 1305 // If result was an oop then unbox and save it in the frame
1306 { Label L; 1306 {
1307 Label no_oop, store_result; 1307 Label no_oop;
1308 //FIXME, addi only support 16-bit imeditate 1308 //FIXME, addi only support 16-bit imeditate
1309 __ ld(AT, FP, frame::interpreter_frame_result_handler_offset*wordSize); 1309 __ ld(AT, FP, frame::interpreter_frame_result_handler_offset*wordSize);
1310 __ li(T0, AbstractInterpreter::result_handler(T_OBJECT)); 1310 __ li(T0, AbstractInterpreter::result_handler(T_OBJECT));
1311 __ bne(AT, T0, no_oop); 1311 __ bne(AT, T0, no_oop);
1312 __ delayed()->nop(); 1312 __ delayed()->nop();
1313 __ pop(ltos); 1313 __ pop(ltos);
1314 __ beq(V0, R0, store_result); 1314 // Unbox oop result, e.g. JNIHandles::resolve value.
1315 __ delayed()->nop(); 1315 __ resolve_jobject(V0, thread, T9);
1316 // unbox
1317 __ ld(V0, V0, 0);
1318 __ bind(store_result);
1319 __ sd(V0, FP, (frame::interpreter_frame_oop_temp_offset)*wordSize); 1316 __ sd(V0, FP, (frame::interpreter_frame_oop_temp_offset)*wordSize);
1320 // keep stack depth as expected by pushing oop which will eventually be discarded 1317 // keep stack depth as expected by pushing oop which will eventually be discarded
1321 __ push(ltos); 1318 __ push(ltos);
1322 __ bind(no_oop); 1319 __ bind(no_oop);
1323 } 1320 }

mercurial