175 break;
176 #endif // INCLUDE_ALL_GCS
177 case BarrierSet::CardTableModRef:
178 case BarrierSet::CardTableExtension:
179 {
180 if (val == noreg) {
181 __ store_heap_oop_null(obj);
182 } else {
183 __ store_heap_oop(obj, val);
184 // flatten object address if needed
185 if (!precise || (obj.index() == noreg && obj.disp() == 0)) {
186 __ store_check(obj.base());
187 } else {
188 __ leaq(rdx, obj);
189 __ store_check(rdx);
190 }
191 }
192 }
193 break;
194 case BarrierSet::ModRef:
195 case BarrierSet::Other:
196 if (val == noreg) {
197 __ store_heap_oop_null(obj);
198 } else {
199 __ store_heap_oop(obj, val);
200 }
201 break;
202 default :
203 ShouldNotReachHere();
204
205 }
206 }
207
208 Address TemplateTable::at_bcp(int offset) {
209 assert(_desc->uses_bcp(), "inconsistent uses_bcp information");
210 return Address(r13, offset);
211 }
212
213 void TemplateTable::patch_bytecode(Bytecodes::Code bc, Register bc_reg,
214 Register temp_reg, bool load_bc_into_bc_reg/*=true*/,
|
175 break;
176 #endif // INCLUDE_ALL_GCS
177 case BarrierSet::CardTableModRef:
178 case BarrierSet::CardTableExtension:
179 {
180 if (val == noreg) {
181 __ store_heap_oop_null(obj);
182 } else {
183 __ store_heap_oop(obj, val);
184 // flatten object address if needed
185 if (!precise || (obj.index() == noreg && obj.disp() == 0)) {
186 __ store_check(obj.base());
187 } else {
188 __ leaq(rdx, obj);
189 __ store_check(rdx);
190 }
191 }
192 }
193 break;
194 case BarrierSet::ModRef:
195 case BarrierSet::Epsilon:
196 case BarrierSet::Other:
197 if (val == noreg) {
198 __ store_heap_oop_null(obj);
199 } else {
200 __ store_heap_oop(obj, val);
201 }
202 break;
203 default :
204 ShouldNotReachHere();
205
206 }
207 }
208
209 Address TemplateTable::at_bcp(int offset) {
210 assert(_desc->uses_bcp(), "inconsistent uses_bcp information");
211 return Address(r13, offset);
212 }
213
214 void TemplateTable::patch_bytecode(Bytecodes::Code bc, Register bc_reg,
215 Register temp_reg, bool load_bc_into_bc_reg/*=true*/,
|