< prev index next >

src/cpu/x86/vm/c1_Runtime1_x86.cpp

Print this page
rev 8396 : imported patch epsilon-base


1686         __ pop(rsi);
1687         __ pop(rdi);
1688 #  endif
1689         __ pop(r11);
1690         __ pop(r10);
1691         __ pop(r9);
1692         __ pop(r8);
1693 #endif
1694         __ pop(rcx);
1695         __ bind(done);
1696 
1697         __ pop(rdx);
1698         __ pop(rax);
1699       }
1700       break;
1701 
1702     case g1_post_barrier_slow_id:
1703       {
1704         StubFrame f(sasm, "g1_post_barrier", dont_gc_arguments);
1705 








1706 
1707         // arg0: store_address
1708         Address store_addr(rbp, 2*BytesPerWord);
1709 
1710         BarrierSet* bs = Universe::heap()->barrier_set();
1711         CardTableModRefBS* ct = (CardTableModRefBS*)bs;
1712         assert(sizeof(*ct->byte_map_base) == sizeof(jbyte), "adjust this code");
1713 
1714         Label done;
1715         Label runtime;
1716 
1717         // At this point we know new_value is non-NULL and the new_value crosses regions.
1718         // Must check to see if card is already dirty
1719 
1720         const Register thread = NOT_LP64(rax) LP64_ONLY(r15_thread);
1721 
1722         Address queue_index(thread, in_bytes(JavaThread::dirty_card_queue_offset() +
1723                                              PtrQueue::byte_offset_of_index()));
1724         Address buffer(thread, in_bytes(JavaThread::dirty_card_queue_offset() +
1725                                         PtrQueue::byte_offset_of_buf()));
1726 
1727         __ push(rax);
1728         __ push(rcx);
1729 
1730         const Register cardtable = rax;




1686         __ pop(rsi);
1687         __ pop(rdi);
1688 #  endif
1689         __ pop(r11);
1690         __ pop(r10);
1691         __ pop(r9);
1692         __ pop(r8);
1693 #endif
1694         __ pop(rcx);
1695         __ bind(done);
1696 
1697         __ pop(rdx);
1698         __ pop(rax);
1699       }
1700       break;
1701 
1702     case g1_post_barrier_slow_id:
1703       {
1704         StubFrame f(sasm, "g1_post_barrier", dont_gc_arguments);
1705 
1706         BarrierSet* bs = Universe::heap()->barrier_set();
1707         if (bs->kind() != BarrierSet::G1SATBCT &&
1708             bs->kind() != BarrierSet::G1SATBCTLogging) {
1709           __ movptr(rax, (int)id);
1710           __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, unimplemented_entry), rax);
1711           __ should_not_reach_here();
1712           break;
1713         }
1714 
1715         // arg0: store_address
1716         Address store_addr(rbp, 2*BytesPerWord);
1717 

1718         CardTableModRefBS* ct = (CardTableModRefBS*)bs;
1719         assert(sizeof(*ct->byte_map_base) == sizeof(jbyte), "adjust this code");
1720 
1721         Label done;
1722         Label runtime;
1723 
1724         // At this point we know new_value is non-NULL and the new_value crosses regions.
1725         // Must check to see if card is already dirty
1726 
1727         const Register thread = NOT_LP64(rax) LP64_ONLY(r15_thread);
1728 
1729         Address queue_index(thread, in_bytes(JavaThread::dirty_card_queue_offset() +
1730                                              PtrQueue::byte_offset_of_index()));
1731         Address buffer(thread, in_bytes(JavaThread::dirty_card_queue_offset() +
1732                                         PtrQueue::byte_offset_of_buf()));
1733 
1734         __ push(rax);
1735         __ push(rcx);
1736 
1737         const Register cardtable = rax;


< prev index next >