< prev index next >

src/cpu/sparc/vm/templateInterpreterGenerator_sparc.cpp

Print this page

        

*** 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. --- 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.
*** 1514,1540 **** { Label no_oop, store_result; __ set((intptr_t)AbstractInterpreter::result_handler(T_OBJECT), G3_scratch); __ cmp_and_brx_short(G3_scratch, Lscratch, Assembler::notEqual, Assembler::pt, no_oop); ! // Unbox oop result, e.g. JNIHandles::resolve value in O0. ! __ br_null(O0, false, Assembler::pn, store_result); // Use NULL as-is. ! __ delayed()->andcc(O0, JNIHandles::weak_tag_mask, G0); // Test for jweak ! __ brx(Assembler::zero, true, Assembler::pt, store_result); ! __ delayed()->ld_ptr(O0, 0, O0); // Maybe resolve (untagged) jobject. ! // Resolve jweak. ! __ ld_ptr(O0, -JNIHandles::weak_tag_value, O0); ! #if INCLUDE_ALL_GCS ! if (UseG1GC) { ! __ g1_write_barrier_pre(noreg /* obj */, ! noreg /* index */, ! 0 /* offset */, ! O0 /* pre_val */, ! G3_scratch /* tmp */, ! true /* preserve_o_regs */); ! } ! #endif // INCLUDE_ALL_GCS __ bind(store_result); // Store it where gc will look for it and result handler expects it. __ st_ptr(O0, FP, (frame::interpreter_frame_oop_temp_offset*wordSize) + STACK_BIAS); __ bind(no_oop); --- 1514,1528 ---- { Label no_oop, store_result; __ set((intptr_t)AbstractInterpreter::result_handler(T_OBJECT), G3_scratch); __ cmp_and_brx_short(G3_scratch, Lscratch, Assembler::notEqual, Assembler::pt, no_oop); ! __ addcc(G0, O0, O0); ! __ brx(Assembler::notZero, true, Assembler::pt, store_result); // if result is not NULL: ! __ delayed()->ld_ptr(O0, 0, O0); // unbox it ! __ mov(G0, O0); ! __ bind(store_result); // Store it where gc will look for it and result handler expects it. __ st_ptr(O0, FP, (frame::interpreter_frame_oop_temp_offset*wordSize) + STACK_BIAS); __ bind(no_oop);
< prev index next >