< prev index next >

src/hotspot/cpu/x86/gc/g1/g1BarrierSetAssembler_x86.cpp

BarrierSetC1_v3

433   G1BarrierSetC1* bs = (G1BarrierSetC1*)BarrierSet::barrier_set()->barrier_set_c1();                                                 
434   __ bind(*stub->entry());                                                                                                           
435   assert(stub->addr()->is_register(), "Precondition.");                                                                              
436   assert(stub->new_val()->is_register(), "Precondition.");                                                                           
437   Register new_val_reg = stub->new_val()->as_register();                                                                             
438   __ cmpptr(new_val_reg, (int32_t) NULL_WORD);                                                                                       
439   __ jcc(Assembler::equal, *stub->continuation());                                                                                   
440   ce->store_parameter(stub->addr()->as_pointer_register(), 0);                                                                       
441   __ call(RuntimeAddress(bs->post_barrier_c1_runtime_code_blob()->code_begin()));                                                    
442   __ jmp(*stub->continuation());                                                                                                     
443 }                                                                                                                                    
444 
445 #undef __                                                                                                                            
446 
447 #define __ sasm->                                                                                                                    
448 
449 void G1BarrierSetAssembler::generate_c1_pre_barrier_runtime_stub(StubAssembler* sasm) {                                              
450   __ prologue("g1_pre_barrier", false);                                                                                              
451   // arg0 : previous value of memory                                                                                                 
452 
453   BarrierSet* bs = BarrierSet::barrier_set();                                                                                        
454   __ push(rax);                                                                                                                      
455   __ push(rdx);                                                                                                                      
456 
457   const Register pre_val = rax;                                                                                                      
458   const Register thread = NOT_LP64(rax) LP64_ONLY(r15_thread);                                                                       
459   const Register tmp = rdx;                                                                                                          
460 
461   NOT_LP64(__ get_thread(thread);)                                                                                                   
462 
463   Address queue_active(thread, in_bytes(G1ThreadLocalData::satb_mark_queue_active_offset()));                                        
464   Address queue_index(thread, in_bytes(G1ThreadLocalData::satb_mark_queue_index_offset()));                                          
465   Address buffer(thread, in_bytes(G1ThreadLocalData::satb_mark_queue_buffer_offset()));                                              
466 
467   Label done;                                                                                                                        
468   Label runtime;                                                                                                                     
469 
470   // Is marking still active?                                                                                                        
471   if (in_bytes(SATBMarkQueue::byte_width_of_active()) == 4) {                                                                        
472     __ cmpl(queue_active, 0);                                                                                                        

433   G1BarrierSetC1* bs = (G1BarrierSetC1*)BarrierSet::barrier_set()->barrier_set_c1();
434   __ bind(*stub->entry());
435   assert(stub->addr()->is_register(), "Precondition.");
436   assert(stub->new_val()->is_register(), "Precondition.");
437   Register new_val_reg = stub->new_val()->as_register();
438   __ cmpptr(new_val_reg, (int32_t) NULL_WORD);
439   __ jcc(Assembler::equal, *stub->continuation());
440   ce->store_parameter(stub->addr()->as_pointer_register(), 0);
441   __ call(RuntimeAddress(bs->post_barrier_c1_runtime_code_blob()->code_begin()));
442   __ jmp(*stub->continuation());
443 }
444 
445 #undef __
446 
447 #define __ sasm->
448 
449 void G1BarrierSetAssembler::generate_c1_pre_barrier_runtime_stub(StubAssembler* sasm) {
450   __ prologue("g1_pre_barrier", false);
451   // arg0 : previous value of memory
452 

453   __ push(rax);
454   __ push(rdx);
455 
456   const Register pre_val = rax;
457   const Register thread = NOT_LP64(rax) LP64_ONLY(r15_thread);
458   const Register tmp = rdx;
459 
460   NOT_LP64(__ get_thread(thread);)
461 
462   Address queue_active(thread, in_bytes(G1ThreadLocalData::satb_mark_queue_active_offset()));
463   Address queue_index(thread, in_bytes(G1ThreadLocalData::satb_mark_queue_index_offset()));
464   Address buffer(thread, in_bytes(G1ThreadLocalData::satb_mark_queue_buffer_offset()));
465 
466   Label done;
467   Label runtime;
468 
469   // Is marking still active?
470   if (in_bytes(SATBMarkQueue::byte_width_of_active()) == 4) {
471     __ cmpl(queue_active, 0);
< prev index next >