3974 bs->BarrierSetAssembler::load_at(this, decorators, type, dst, src, tmp1, thread_tmp); 3975 } else { 3976 bs->load_at(this, decorators, type, dst, src, tmp1, thread_tmp); 3977 } 3978 } 3979 3980 void MacroAssembler::access_store_at(BasicType type, DecoratorSet decorators, 3981 Address dst, Register src, 3982 Register tmp1, Register thread_tmp) { 3983 BarrierSetAssembler *bs = BarrierSet::barrier_set()->barrier_set_assembler(); 3984 decorators = AccessInternal::decorator_fixup(decorators); 3985 bool as_raw = (decorators & AS_RAW) != 0; 3986 if (as_raw) { 3987 bs->BarrierSetAssembler::store_at(this, decorators, type, dst, src, tmp1, thread_tmp); 3988 } else { 3989 bs->store_at(this, decorators, type, dst, src, tmp1, thread_tmp); 3990 } 3991 } 3992 3993 void MacroAssembler::resolve(DecoratorSet decorators, Register obj) { 3994 if ((decorators & ACCESS_READ) == 0) { 3995 decorators |= ACCESS_WRITE; 3996 } 3997 BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler(); 3998 return bs->resolve(this, decorators, obj); 3999 } 4000 4001 void MacroAssembler::load_heap_oop(Register dst, Address src, Register tmp1, 4002 Register thread_tmp, DecoratorSet decorators) { 4003 access_load_at(T_OBJECT, IN_HEAP | decorators, dst, src, tmp1, thread_tmp); 4004 } 4005 4006 void MacroAssembler::load_heap_oop_not_null(Register dst, Address src, Register tmp1, 4007 Register thread_tmp, DecoratorSet decorators) { 4008 access_load_at(T_OBJECT, IN_HEAP | IS_NOT_NULL | decorators, dst, src, tmp1, thread_tmp); 4009 } 4010 4011 void MacroAssembler::store_heap_oop(Address dst, Register src, Register tmp1, 4012 Register thread_tmp, DecoratorSet decorators) { 4013 access_store_at(T_OBJECT, IN_HEAP | decorators, dst, src, tmp1, thread_tmp); 4014 } 4015 | 3974 bs->BarrierSetAssembler::load_at(this, decorators, type, dst, src, tmp1, thread_tmp); 3975 } else { 3976 bs->load_at(this, decorators, type, dst, src, tmp1, thread_tmp); 3977 } 3978 } 3979 3980 void MacroAssembler::access_store_at(BasicType type, DecoratorSet decorators, 3981 Address dst, Register src, 3982 Register tmp1, Register thread_tmp) { 3983 BarrierSetAssembler *bs = BarrierSet::barrier_set()->barrier_set_assembler(); 3984 decorators = AccessInternal::decorator_fixup(decorators); 3985 bool as_raw = (decorators & AS_RAW) != 0; 3986 if (as_raw) { 3987 bs->BarrierSetAssembler::store_at(this, decorators, type, dst, src, tmp1, thread_tmp); 3988 } else { 3989 bs->store_at(this, decorators, type, dst, src, tmp1, thread_tmp); 3990 } 3991 } 3992 3993 void MacroAssembler::resolve(DecoratorSet decorators, Register obj) { 3994 // Use stronger ACCESS_WRITE|ACCESS_READ by default. 3995 if ((decorators & (ACCESS_READ | ACCESS_WRITE)) == 0) { 3996 decorators |= ACCESS_READ | ACCESS_WRITE; 3997 } 3998 BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler(); 3999 return bs->resolve(this, decorators, obj); 4000 } 4001 4002 void MacroAssembler::load_heap_oop(Register dst, Address src, Register tmp1, 4003 Register thread_tmp, DecoratorSet decorators) { 4004 access_load_at(T_OBJECT, IN_HEAP | decorators, dst, src, tmp1, thread_tmp); 4005 } 4006 4007 void MacroAssembler::load_heap_oop_not_null(Register dst, Address src, Register tmp1, 4008 Register thread_tmp, DecoratorSet decorators) { 4009 access_load_at(T_OBJECT, IN_HEAP | IS_NOT_NULL | decorators, dst, src, tmp1, thread_tmp); 4010 } 4011 4012 void MacroAssembler::store_heap_oop(Address dst, Register src, Register tmp1, 4013 Register thread_tmp, DecoratorSet decorators) { 4014 access_store_at(T_OBJECT, IN_HEAP | decorators, dst, src, tmp1, thread_tmp); 4015 } 4016 |