189
190 __ call_VM_leaf(ZBarrierSetRuntime::load_barrier_on_oop_array_addr(), 2);
191
192 __ popa();
193 BLOCK_COMMENT("} ZBarrierSetAssembler::arraycopy_prologue");
194 }
195
196 void ZBarrierSetAssembler::try_resolve_jobject_in_native(MacroAssembler* masm,
197 Register jni_env,
198 Register robj,
199 Register tmp,
200 Label& slowpath) {
201 BLOCK_COMMENT("ZBarrierSetAssembler::try_resolve_jobject_in_native {");
202
203 assert_different_registers(jni_env, robj, tmp);
204
205 // Resolve jobject
206 BarrierSetAssembler::try_resolve_jobject_in_native(masm, jni_env, robj, tmp, slowpath);
207
208 // The Address offset is too large to direct load - -784. Our range is +127, -128.
209 __ mov(tmp, (long int)(in_bytes(ZThreadLocalData::address_bad_mask_offset()) -
210 in_bytes(JavaThread::jni_environment_offset())));
211
212 // Load address bad mask
213 __ add(tmp, jni_env, tmp);
214 __ ldr(tmp, Address(tmp));
215
216 // Check address bad mask
217 __ tst(robj, tmp);
218 __ br(Assembler::NE, slowpath);
219
220 BLOCK_COMMENT("} ZBarrierSetAssembler::try_resolve_jobject_in_native");
221 }
222
223 #ifdef COMPILER1
224
225 #undef __
226 #define __ ce->masm()->
227
228 void ZBarrierSetAssembler::generate_c1_load_barrier_test(LIR_Assembler* ce,
229 LIR_Opr ref) const {
|
189
190 __ call_VM_leaf(ZBarrierSetRuntime::load_barrier_on_oop_array_addr(), 2);
191
192 __ popa();
193 BLOCK_COMMENT("} ZBarrierSetAssembler::arraycopy_prologue");
194 }
195
196 void ZBarrierSetAssembler::try_resolve_jobject_in_native(MacroAssembler* masm,
197 Register jni_env,
198 Register robj,
199 Register tmp,
200 Label& slowpath) {
201 BLOCK_COMMENT("ZBarrierSetAssembler::try_resolve_jobject_in_native {");
202
203 assert_different_registers(jni_env, robj, tmp);
204
205 // Resolve jobject
206 BarrierSetAssembler::try_resolve_jobject_in_native(masm, jni_env, robj, tmp, slowpath);
207
208 // The Address offset is too large to direct load - -784. Our range is +127, -128.
209 __ mov(tmp, (int64_t)(in_bytes(ZThreadLocalData::address_bad_mask_offset()) -
210 in_bytes(JavaThread::jni_environment_offset())));
211
212 // Load address bad mask
213 __ add(tmp, jni_env, tmp);
214 __ ldr(tmp, Address(tmp));
215
216 // Check address bad mask
217 __ tst(robj, tmp);
218 __ br(Assembler::NE, slowpath);
219
220 BLOCK_COMMENT("} ZBarrierSetAssembler::try_resolve_jobject_in_native");
221 }
222
223 #ifdef COMPILER1
224
225 #undef __
226 #define __ ce->masm()->
227
228 void ZBarrierSetAssembler::generate_c1_load_barrier_test(LIR_Assembler* ce,
229 LIR_Opr ref) const {
|