213 DecoratorSet decorators = access.decorators(); |
213 DecoratorSet decorators = access.decorators(); |
214 if ((decorators & IN_NATIVE) != 0) { |
214 if ((decorators & IN_NATIVE) != 0) { |
215 assert(access.is_oop(), "IN_NATIVE access only for oop values"); |
215 assert(access.is_oop(), "IN_NATIVE access only for oop values"); |
216 BarrierSetC1::load_at_resolved(access, result); |
216 BarrierSetC1::load_at_resolved(access, result); |
217 LIR_OprList* args = new LIR_OprList(); |
217 LIR_OprList* args = new LIR_OprList(); |
|
218 LIR_Opr addr = access.resolved_addr(); |
|
219 addr = ensure_in_register(gen, addr); |
218 args->append(result); |
220 args->append(result); |
|
221 args->append(addr); |
219 BasicTypeList signature; |
222 BasicTypeList signature; |
220 signature.append(T_OBJECT); |
223 signature.append(T_OBJECT); |
|
224 signature.append(T_ADDRESS); |
221 LIR_Opr call_result = gen->call_runtime(&signature, args, |
225 LIR_Opr call_result = gen->call_runtime(&signature, args, |
222 CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier_native), |
226 CAST_FROM_FN_PTR(address, ShenandoahRuntime::load_reference_barrier_native), |
223 objectType, NULL); |
227 objectType, NULL); |
224 __ move(call_result, result); |
228 __ move(call_result, result); |
225 return; |
229 return; |