< prev index next >

src/cpu/x86/vm/templateInterpreter_x86_32.cpp

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 1294,1316 **** // reset handle block __ movptr(t, Address(thread, JavaThread::active_handles_offset())); __ movl(Address(t, JNIHandleBlock::top_offset_in_bytes()), NULL_WORD); // If result was an oop then unbox and save it in the frame ! { Label L; ! Label no_oop, store_result; ExternalAddress handler(AbstractInterpreter::result_handler(T_OBJECT)); __ cmpptr(Address(rbp, frame::interpreter_frame_result_handler_offset*wordSize), handler.addr()); __ jcc(Assembler::notEqual, no_oop); __ cmpptr(Address(rsp, 0), (int32_t)NULL_WORD); __ pop(ltos); ! __ testptr(rax, rax); ! __ jcc(Assembler::zero, store_result); ! // unbox ! __ movptr(rax, Address(rax, 0)); ! __ bind(store_result); __ movptr(Address(rbp, (frame::interpreter_frame_oop_temp_offset)*wordSize), rax); // keep stack depth as expected by pushing oop which will eventually be discarded __ push(ltos); __ bind(no_oop); } --- 1294,1315 ---- // reset handle block __ movptr(t, Address(thread, JavaThread::active_handles_offset())); __ movl(Address(t, JNIHandleBlock::top_offset_in_bytes()), NULL_WORD); // If result was an oop then unbox and save it in the frame ! { ! Label no_oop; ExternalAddress handler(AbstractInterpreter::result_handler(T_OBJECT)); __ cmpptr(Address(rbp, frame::interpreter_frame_result_handler_offset*wordSize), handler.addr()); __ jcc(Assembler::notEqual, no_oop); __ cmpptr(Address(rsp, 0), (int32_t)NULL_WORD); __ pop(ltos); ! // Unbox oop result, e.g. JNIHandles::resolve value. ! __ resolve_jobject(rax /* value */, ! thread /* thread */, ! t /* tmp */); __ movptr(Address(rbp, (frame::interpreter_frame_oop_temp_offset)*wordSize), rax); // keep stack depth as expected by pushing oop which will eventually be discarded __ push(ltos); __ bind(no_oop); }
< prev index next >