6271 if (as_raw) { 6272 bs->BarrierSetAssembler::load_at(this, decorators, type, dst, src, tmp1, thread_tmp); 6273 } else { 6274 bs->load_at(this, decorators, type, dst, src, tmp1, thread_tmp); 6275 } 6276 } 6277 6278 void MacroAssembler::access_store_at(BasicType type, DecoratorSet decorators, Address dst, Register src, 6279 Register tmp1, Register tmp2) { 6280 BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler(); 6281 decorators = AccessInternal::decorator_fixup(decorators); 6282 bool as_raw = (decorators & AS_RAW) != 0; 6283 if (as_raw) { 6284 bs->BarrierSetAssembler::store_at(this, decorators, type, dst, src, tmp1, tmp2); 6285 } else { 6286 bs->store_at(this, decorators, type, dst, src, tmp1, tmp2); 6287 } 6288 } 6289 6290 void MacroAssembler::resolve(DecoratorSet decorators, Register obj) { 6291 // Use stronger ACCESS_WRITE by default. 6292 if ((decorators & ACCESS_READ) == 0) { 6293 decorators |= ACCESS_WRITE; 6294 } 6295 BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler(); 6296 return bs->resolve(this, decorators, obj); 6297 } 6298 6299 void MacroAssembler::load_heap_oop(Register dst, Address src, Register tmp1, 6300 Register thread_tmp, DecoratorSet decorators) { 6301 access_load_at(T_OBJECT, IN_HEAP | decorators, dst, src, tmp1, thread_tmp); 6302 } 6303 6304 // Doesn't do verfication, generates fixed size code 6305 void MacroAssembler::load_heap_oop_not_null(Register dst, Address src, Register tmp1, 6306 Register thread_tmp, DecoratorSet decorators) { 6307 access_load_at(T_OBJECT, IN_HEAP | IS_NOT_NULL | decorators, dst, src, tmp1, thread_tmp); 6308 } 6309 6310 void MacroAssembler::store_heap_oop(Address dst, Register src, Register tmp1, 6311 Register tmp2, DecoratorSet decorators) { 6312 access_store_at(T_OBJECT, IN_HEAP | decorators, dst, src, tmp1, tmp2); 6313 } | 6271 if (as_raw) { 6272 bs->BarrierSetAssembler::load_at(this, decorators, type, dst, src, tmp1, thread_tmp); 6273 } else { 6274 bs->load_at(this, decorators, type, dst, src, tmp1, thread_tmp); 6275 } 6276 } 6277 6278 void MacroAssembler::access_store_at(BasicType type, DecoratorSet decorators, Address dst, Register src, 6279 Register tmp1, Register tmp2) { 6280 BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler(); 6281 decorators = AccessInternal::decorator_fixup(decorators); 6282 bool as_raw = (decorators & AS_RAW) != 0; 6283 if (as_raw) { 6284 bs->BarrierSetAssembler::store_at(this, decorators, type, dst, src, tmp1, tmp2); 6285 } else { 6286 bs->store_at(this, decorators, type, dst, src, tmp1, tmp2); 6287 } 6288 } 6289 6290 void MacroAssembler::resolve(DecoratorSet decorators, Register obj) { 6291 // Use stronger ACCESS_WRITE|ACCESS_READ by default. 6292 if ((decorators & (ACCESS_READ | ACCESS_WRITE)) == 0) { 6293 decorators |= ACCESS_READ | ACCESS_WRITE; 6294 } 6295 BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler(); 6296 return bs->resolve(this, decorators, obj); 6297 } 6298 6299 void MacroAssembler::load_heap_oop(Register dst, Address src, Register tmp1, 6300 Register thread_tmp, DecoratorSet decorators) { 6301 access_load_at(T_OBJECT, IN_HEAP | decorators, dst, src, tmp1, thread_tmp); 6302 } 6303 6304 // Doesn't do verfication, generates fixed size code 6305 void MacroAssembler::load_heap_oop_not_null(Register dst, Address src, Register tmp1, 6306 Register thread_tmp, DecoratorSet decorators) { 6307 access_load_at(T_OBJECT, IN_HEAP | IS_NOT_NULL | decorators, dst, src, tmp1, thread_tmp); 6308 } 6309 6310 void MacroAssembler::store_heap_oop(Address dst, Register src, Register tmp1, 6311 Register tmp2, DecoratorSet decorators) { 6312 access_store_at(T_OBJECT, IN_HEAP | decorators, dst, src, tmp1, tmp2); 6313 } |