4034 z_ltgr(Z_R0, Rop1);
4035 z_bre(done);
4036 }
4037
4038 add2reg_with_index(Z_R0, pow2_offset, Z_R1, Rop1);
4039 z_srlg(Z_R0, Z_R0, shift);
4040
4041 bind(done);
4042 z_cl(Z_R0, disp, Rindex, Rbase);
4043 #ifdef ASSERT
4044 if (used_R0) preset_reg(Z_R0, 0xb05bUL, 2);
4045 if (used_R1) preset_reg(Z_R1, 0xb06bUL, 2);
4046 #endif
4047 }
4048 BLOCK_COMMENT("} compare heap oop");
4049 }
4050
4051 void MacroAssembler::access_store_at(BasicType type, DecoratorSet decorators,
4052 const Address& addr, Register val,
4053 Register tmp1, Register tmp2, Register tmp3) {
4054 assert((decorators & ~(AS_RAW | IN_HEAP | IN_HEAP_ARRAY | IN_ROOT | OOP_NOT_NULL |
4055 ON_UNKNOWN_OOP_REF)) == 0, "unsupported decorator");
4056 BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler();
4057 decorators = AccessInternal::decorator_fixup(decorators);
4058 bool as_raw = (decorators & AS_RAW) != 0;
4059 if (as_raw) {
4060 bs->BarrierSetAssembler::store_at(this, decorators, type,
4061 addr, val,
4062 tmp1, tmp2, tmp3);
4063 } else {
4064 bs->store_at(this, decorators, type,
4065 addr, val,
4066 tmp1, tmp2, tmp3);
4067 }
4068 }
4069
4070 void MacroAssembler::access_load_at(BasicType type, DecoratorSet decorators,
4071 const Address& addr, Register dst,
4072 Register tmp1, Register tmp2, Label *is_null) {
4073 assert((decorators & ~(AS_RAW | IN_HEAP | IN_HEAP_ARRAY | IN_ROOT | OOP_NOT_NULL |
4074 ON_PHANTOM_OOP_REF | ON_WEAK_OOP_REF)) == 0, "unsupported decorator");
4075 BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler();
4076 decorators = AccessInternal::decorator_fixup(decorators);
4077 bool as_raw = (decorators & AS_RAW) != 0;
4078 if (as_raw) {
4079 bs->BarrierSetAssembler::load_at(this, decorators, type,
4080 addr, dst,
4081 tmp1, tmp2, is_null);
4082 } else {
4083 bs->load_at(this, decorators, type,
4084 addr, dst,
4085 tmp1, tmp2, is_null);
4086 }
4087 }
4088
4089 void MacroAssembler::load_heap_oop(Register dest, const Address &a,
4090 Register tmp1, Register tmp2,
4091 DecoratorSet decorators, Label *is_null) {
4092 access_load_at(T_OBJECT, IN_HEAP | decorators, a, dest, tmp1, tmp2, is_null);
4093 }
|
4034 z_ltgr(Z_R0, Rop1);
4035 z_bre(done);
4036 }
4037
4038 add2reg_with_index(Z_R0, pow2_offset, Z_R1, Rop1);
4039 z_srlg(Z_R0, Z_R0, shift);
4040
4041 bind(done);
4042 z_cl(Z_R0, disp, Rindex, Rbase);
4043 #ifdef ASSERT
4044 if (used_R0) preset_reg(Z_R0, 0xb05bUL, 2);
4045 if (used_R1) preset_reg(Z_R1, 0xb06bUL, 2);
4046 #endif
4047 }
4048 BLOCK_COMMENT("} compare heap oop");
4049 }
4050
4051 void MacroAssembler::access_store_at(BasicType type, DecoratorSet decorators,
4052 const Address& addr, Register val,
4053 Register tmp1, Register tmp2, Register tmp3) {
4054 assert((decorators & ~(AS_RAW | IN_HEAP | IN_HEAP_ARRAY | IN_NATIVE | OOP_NOT_NULL |
4055 ON_UNKNOWN_OOP_REF)) == 0, "unsupported decorator");
4056 BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler();
4057 decorators = AccessInternal::decorator_fixup(decorators);
4058 bool as_raw = (decorators & AS_RAW) != 0;
4059 if (as_raw) {
4060 bs->BarrierSetAssembler::store_at(this, decorators, type,
4061 addr, val,
4062 tmp1, tmp2, tmp3);
4063 } else {
4064 bs->store_at(this, decorators, type,
4065 addr, val,
4066 tmp1, tmp2, tmp3);
4067 }
4068 }
4069
4070 void MacroAssembler::access_load_at(BasicType type, DecoratorSet decorators,
4071 const Address& addr, Register dst,
4072 Register tmp1, Register tmp2, Label *is_null) {
4073 assert((decorators & ~(AS_RAW | IN_HEAP | IN_HEAP_ARRAY | IN_NATIVE | OOP_NOT_NULL |
4074 ON_PHANTOM_OOP_REF | ON_WEAK_OOP_REF)) == 0, "unsupported decorator");
4075 BarrierSetAssembler* bs = BarrierSet::barrier_set()->barrier_set_assembler();
4076 decorators = AccessInternal::decorator_fixup(decorators);
4077 bool as_raw = (decorators & AS_RAW) != 0;
4078 if (as_raw) {
4079 bs->BarrierSetAssembler::load_at(this, decorators, type,
4080 addr, dst,
4081 tmp1, tmp2, is_null);
4082 } else {
4083 bs->load_at(this, decorators, type,
4084 addr, dst,
4085 tmp1, tmp2, is_null);
4086 }
4087 }
4088
4089 void MacroAssembler::load_heap_oop(Register dest, const Address &a,
4090 Register tmp1, Register tmp2,
4091 DecoratorSet decorators, Label *is_null) {
4092 access_load_at(T_OBJECT, IN_HEAP | decorators, a, dest, tmp1, tmp2, is_null);
4093 }
|