< prev index next >

src/cpu/x86/vm/templateTable_x86_64.cpp

Print this page
rev 8396 : imported patch epsilon-base


 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*/,


< prev index next >