< prev index next >

src/hotspot/cpu/s390/macroAssembler_s390.cpp

8199604_cardtablemodrefbs_rename

12  * version 2 for more details (a copy is included in the LICENSE file that                                                           
13  * accompanied this code).                                                                                                           
14  *                                                                                                                                   
15  * You should have received a copy of the GNU General Public License version                                                         
16  * 2 along with this work; if not, write to the Free Software Foundation,                                                            
17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.                                                                     
18  *                                                                                                                                   
19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA                                                           
20  * or visit www.oracle.com if you need additional information or have any                                                            
21  * questions.                                                                                                                        
22  *                                                                                                                                   
23  */                                                                                                                                  
24 
25 #include "precompiled.hpp"                                                                                                           
26 #include "asm/codeBuffer.hpp"                                                                                                        
27 #include "asm/macroAssembler.inline.hpp"                                                                                             
28 #include "compiler/disassembler.hpp"                                                                                                 
29 #include "gc/shared/cardTable.hpp"                                                                                                   
30 #include "gc/shared/collectedHeap.inline.hpp"                                                                                        
31 #include "interpreter/interpreter.hpp"                                                                                               
32 #include "gc/shared/cardTableModRefBS.hpp"                                                                                           
33 #include "memory/resourceArea.hpp"                                                                                                   
34 #include "memory/universe.hpp"                                                                                                       
35 #include "oops/klass.inline.hpp"                                                                                                     
36 #include "opto/compile.hpp"                                                                                                          
37 #include "opto/intrinsicnode.hpp"                                                                                                    
38 #include "opto/matcher.hpp"                                                                                                          
39 #include "prims/methodHandles.hpp"                                                                                                   
40 #include "registerSaver_s390.hpp"                                                                                                    
41 #include "runtime/biasedLocking.hpp"                                                                                                 
42 #include "runtime/icache.hpp"                                                                                                        
43 #include "runtime/interfaceSupport.hpp"                                                                                              
44 #include "runtime/objectMonitor.hpp"                                                                                                 
45 #include "runtime/os.hpp"                                                                                                            
46 #include "runtime/safepoint.hpp"                                                                                                     
47 #include "runtime/safepointMechanism.hpp"                                                                                            
48 #include "runtime/sharedRuntime.hpp"                                                                                                 
49 #include "runtime/stubRoutines.hpp"                                                                                                  
50 #include "utilities/events.hpp"                                                                                                      
51 #include "utilities/macros.hpp"                                                                                                      

12  * version 2 for more details (a copy is included in the LICENSE file that
13  * accompanied this code).
14  *
15  * You should have received a copy of the GNU General Public License version
16  * 2 along with this work; if not, write to the Free Software Foundation,
17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20  * or visit www.oracle.com if you need additional information or have any
21  * questions.
22  *
23  */
24 
25 #include "precompiled.hpp"
26 #include "asm/codeBuffer.hpp"
27 #include "asm/macroAssembler.inline.hpp"
28 #include "compiler/disassembler.hpp"
29 #include "gc/shared/cardTable.hpp"
30 #include "gc/shared/collectedHeap.inline.hpp"
31 #include "interpreter/interpreter.hpp"
32 #include "gc/shared/cardTableBarrierSet.hpp"
33 #include "memory/resourceArea.hpp"
34 #include "memory/universe.hpp"
35 #include "oops/klass.inline.hpp"
36 #include "opto/compile.hpp"
37 #include "opto/intrinsicnode.hpp"
38 #include "opto/matcher.hpp"
39 #include "prims/methodHandles.hpp"
40 #include "registerSaver_s390.hpp"
41 #include "runtime/biasedLocking.hpp"
42 #include "runtime/icache.hpp"
43 #include "runtime/interfaceSupport.hpp"
44 #include "runtime/objectMonitor.hpp"
45 #include "runtime/os.hpp"
46 #include "runtime/safepoint.hpp"
47 #include "runtime/safepointMechanism.hpp"
48 #include "runtime/sharedRuntime.hpp"
49 #include "runtime/stubRoutines.hpp"
50 #include "utilities/events.hpp"
51 #include "utilities/macros.hpp"

3487     load_and_test_long(temp, Address(currentHeader, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner)));                                         
3488     z_brne(done);                                                                                                                    
3489     load_and_test_long(temp, Address(currentHeader, OM_OFFSET_NO_MONITOR_VALUE_TAG(EntryList)));                                     
3490     z_brne(done);                                                                                                                    
3491     load_and_test_long(temp, Address(currentHeader, OM_OFFSET_NO_MONITOR_VALUE_TAG(cxq)));                                           
3492     z_brne(done);                                                                                                                    
3493     z_release();                                                                                                                     
3494     z_stg(temp/*=0*/, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner), currentHeader);                                                         
3495   }                                                                                                                                  
3496 
3497   bind(done);                                                                                                                        
3498 
3499   BLOCK_COMMENT("} compiler_fast_unlock_object");                                                                                    
3500   // flag == EQ indicates success                                                                                                    
3501   // flag == NE indicates failure                                                                                                    
3502 }                                                                                                                                    
3503 
3504 // Write to card table for modification at store_addr - register is destroyed afterwards.                                            
3505 void MacroAssembler::card_write_barrier_post(Register store_addr, Register tmp) {                                                    
3506   BarrierSet* bs = Universe::heap()->barrier_set();                                                                                  
3507   CardTableModRefBS* ctbs = barrier_set_cast<CardTableModRefBS>(bs);                                                                 
3508   CardTable* ct = ctbs->card_table();                                                                                                
3509   assert(bs->kind() == BarrierSet::CardTableModRef, "wrong barrier");                                                                
3510   assert_different_registers(store_addr, tmp);                                                                                       
3511   z_srlg(store_addr, store_addr, CardTable::card_shift);                                                                             
3512   load_absolute_address(tmp, (address)ct->byte_map_base());                                                                          
3513   z_agr(store_addr, tmp);                                                                                                            
3514   z_mvi(0, store_addr, 0); // Store byte 0.                                                                                          
3515 }                                                                                                                                    
3516 
3517 void MacroAssembler::resolve_jobject(Register value, Register tmp1, Register tmp2) {                                                 
3518   NearLabel Ldone;                                                                                                                   
3519   z_ltgr(tmp1, value);                                                                                                               
3520   z_bre(Ldone);          // Use NULL result as-is.                                                                                   
3521 
3522   z_nill(value, ~JNIHandles::weak_tag_mask);                                                                                         
3523   z_lg(value, 0, value); // Resolve (untagged) jobject.                                                                              
3524 
3525 #if INCLUDE_ALL_GCS                                                                                                                  
3526   if (UseG1GC) {                                                                                                                     
3527     NearLabel Lnot_weak;                                                                                                             
3528     z_tmll(tmp1, JNIHandles::weak_tag_mask); // Test for jweak tag.                                                                  

3487     load_and_test_long(temp, Address(currentHeader, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner)));
3488     z_brne(done);
3489     load_and_test_long(temp, Address(currentHeader, OM_OFFSET_NO_MONITOR_VALUE_TAG(EntryList)));
3490     z_brne(done);
3491     load_and_test_long(temp, Address(currentHeader, OM_OFFSET_NO_MONITOR_VALUE_TAG(cxq)));
3492     z_brne(done);
3493     z_release();
3494     z_stg(temp/*=0*/, OM_OFFSET_NO_MONITOR_VALUE_TAG(owner), currentHeader);
3495   }
3496 
3497   bind(done);
3498 
3499   BLOCK_COMMENT("} compiler_fast_unlock_object");
3500   // flag == EQ indicates success
3501   // flag == NE indicates failure
3502 }
3503 
3504 // Write to card table for modification at store_addr - register is destroyed afterwards.
3505 void MacroAssembler::card_write_barrier_post(Register store_addr, Register tmp) {
3506   BarrierSet* bs = Universe::heap()->barrier_set();
3507   CardTableBarrierSet* ctbs = barrier_set_cast<CardTableBarrierSet>(bs);
3508   CardTable* ct = ctbs->card_table();
3509   assert(bs->kind() == BarrierSet::CardTableBarrierSet, "wrong barrier");
3510   assert_different_registers(store_addr, tmp);
3511   z_srlg(store_addr, store_addr, CardTable::card_shift);
3512   load_absolute_address(tmp, (address)ct->byte_map_base());
3513   z_agr(store_addr, tmp);
3514   z_mvi(0, store_addr, 0); // Store byte 0.
3515 }
3516 
3517 void MacroAssembler::resolve_jobject(Register value, Register tmp1, Register tmp2) {
3518   NearLabel Ldone;
3519   z_ltgr(tmp1, value);
3520   z_bre(Ldone);          // Use NULL result as-is.
3521 
3522   z_nill(value, ~JNIHandles::weak_tag_mask);
3523   z_lg(value, 0, value); // Resolve (untagged) jobject.
3524 
3525 #if INCLUDE_ALL_GCS
3526   if (UseG1GC) {
3527     NearLabel Lnot_weak;
3528     z_tmll(tmp1, JNIHandles::weak_tag_mask); // Test for jweak tag.
< prev index next >