src/cpu/x86/vm/c1_Runtime1_x86.cpp

Print this page

        

*** 1579,1589 **** __ movptr(rax, (int)id); __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, unimplemented_entry), rax); __ should_not_reach_here(); break; } - __ push(rax); __ push(rdx); const Register pre_val = rax; const Register thread = NOT_LP64(rax) LP64_ONLY(r15_thread); --- 1579,1588 ----
*** 1603,1614 **** Label done; Label runtime; // Can we store original value in the thread's buffer? - LP64_ONLY(__ movslq(tmp, queue_index);) #ifdef _LP64 __ cmpq(tmp, 0); #else __ cmpl(queue_index, 0); #endif __ jcc(Assembler::equal, runtime); --- 1602,1613 ---- Label done; Label runtime; // Can we store original value in the thread's buffer? #ifdef _LP64 + __ movslq(tmp, queue_index); __ cmpq(tmp, 0); #else __ cmpl(queue_index, 0); #endif __ jcc(Assembler::equal, runtime);
*** 1626,1642 **** f.load_argument(0, pre_val); __ movptr(Address(tmp, 0), pre_val); __ jmp(done); __ bind(runtime); - // load the pre-value __ push(rcx); f.load_argument(0, rcx); __ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::g1_wb_pre), rcx, thread); __ pop(rcx); - __ bind(done); __ pop(rdx); __ pop(rax); } break; --- 1625,1661 ---- f.load_argument(0, pre_val); __ movptr(Address(tmp, 0), pre_val); __ jmp(done); __ bind(runtime); __ push(rcx); + #ifdef _LP64 + __ push(r8); + __ push(r9); + __ push(r10); + __ push(r11); + # ifndef _WIN64 + __ push(rdi); + __ push(rsi); + # endif + #endif + // load the pre-value f.load_argument(0, rcx); __ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::g1_wb_pre), rcx, thread); + #ifdef _LP64 + # ifndef _WIN64 + __ pop(rsi); + __ pop(rdi); + # endif + __ pop(r11); + __ pop(r10); + __ pop(r9); + __ pop(r8); + #endif __ pop(rcx); __ bind(done); + __ pop(rdx); __ pop(rax); } break;
*** 1662,1687 **** PtrQueue::byte_offset_of_index())); Address buffer(thread, in_bytes(JavaThread::dirty_card_queue_offset() + PtrQueue::byte_offset_of_buf())); __ push(rax); ! __ push(rdx); NOT_LP64(__ get_thread(thread);) ExternalAddress cardtable((address)ct->byte_map_base); assert(sizeof(*ct->byte_map_base) == sizeof(jbyte), "adjust this code"); ! const Register card_addr = rdx; #ifdef _LP64 const Register tmp = rscratch1; f.load_argument(0, card_addr); __ shrq(card_addr, CardTableModRefBS::card_shift); __ lea(tmp, cardtable); // get the address of the card __ addq(card_addr, tmp); #else ! const Register card_index = rdx; f.load_argument(0, card_index); __ shrl(card_index, CardTableModRefBS::card_shift); Address index(noreg, card_index, Address::times_1); __ leal(card_addr, __ as_Address(ArrayAddress(cardtable, index))); --- 1681,1706 ---- PtrQueue::byte_offset_of_index())); Address buffer(thread, in_bytes(JavaThread::dirty_card_queue_offset() + PtrQueue::byte_offset_of_buf())); __ push(rax); ! __ push(rcx); NOT_LP64(__ get_thread(thread);) ExternalAddress cardtable((address)ct->byte_map_base); assert(sizeof(*ct->byte_map_base) == sizeof(jbyte), "adjust this code"); ! const Register card_addr = rcx; #ifdef _LP64 const Register tmp = rscratch1; f.load_argument(0, card_addr); __ shrq(card_addr, CardTableModRefBS::card_shift); __ lea(tmp, cardtable); // get the address of the card __ addq(card_addr, tmp); #else ! const Register card_index = rcx; f.load_argument(0, card_index); __ shrl(card_index, CardTableModRefBS::card_shift); Address index(noreg, card_index, Address::times_1); __ leal(card_addr, __ as_Address(ArrayAddress(cardtable, index)));
*** 1714,1729 **** __ pop(rbx); __ jmp(done); __ bind(runtime); ! NOT_LP64(__ push(rcx);) __ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::g1_wb_post), card_addr, thread); ! NOT_LP64(__ pop(rcx);) ! ! __ bind(done); __ pop(rdx); __ pop(rax); } break; #endif // !SERIALGC --- 1733,1768 ---- __ pop(rbx); __ jmp(done); __ bind(runtime); ! __ push(rdx); ! #ifdef _LP64 ! __ push(r8); ! __ push(r9); ! __ push(r10); ! __ push(r11); ! # ifndef _WIN64 ! __ push(rdi); ! __ push(rsi); ! # endif ! #endif __ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::g1_wb_post), card_addr, thread); ! #ifdef _LP64 ! # ifndef _WIN64 ! __ pop(rsi); ! __ pop(rdi); ! # endif ! __ pop(r11); ! __ pop(r10); ! __ pop(r9); ! __ pop(r8); ! #endif __ pop(rdx); + __ bind(done); + + __ pop(rcx); __ pop(rax); } break; #endif // !SERIALGC