comparison src/cpu/x86/vm/sharedRuntime_x86_64.cpp @ 17810:62c54fcc0a35

Merge
author kvn
date Tue, 25 Mar 2014 17:07:36 -0700
parents a9becfeecd1b 606acabe7b5c
children 2100bf712e2a
comparison
equal deleted inserted replaced
17809:a433eb716ce1 17810:62c54fcc0a35
2010 __ subptr(rsp, stack_size - 2*wordSize); 2010 __ subptr(rsp, stack_size - 2*wordSize);
2011 2011
2012 // Frame is now completed as far as size and linkage. 2012 // Frame is now completed as far as size and linkage.
2013 int frame_complete = ((intptr_t)__ pc()) - start; 2013 int frame_complete = ((intptr_t)__ pc()) - start;
2014 2014
2015 if (UseRTMLocking) {
2016 // Abort RTM transaction before calling JNI
2017 // because critical section will be large and will be
2018 // aborted anyway. Also nmethod could be deoptimized.
2019 __ xabort(0);
2020 }
2021
2015 #ifdef ASSERT 2022 #ifdef ASSERT
2016 { 2023 {
2017 Label L; 2024 Label L;
2018 __ mov(rax, rsp); 2025 __ mov(rax, rsp);
2019 __ andptr(rax, -16); // must be 16 byte boundary (see amd64 ABI) 2026 __ andptr(rax, -16); // must be 16 byte boundary (see amd64 ABI)
3610 3617
3611 assert(SimpleRuntimeFrame::framesize % 4 == 0, "sp not 16-byte aligned"); 3618 assert(SimpleRuntimeFrame::framesize % 4 == 0, "sp not 16-byte aligned");
3612 3619
3613 address start = __ pc(); 3620 address start = __ pc();
3614 3621
3622 if (UseRTMLocking) {
3623 // Abort RTM transaction before possible nmethod deoptimization.
3624 __ xabort(0);
3625 }
3626
3615 // Push self-frame. We get here with a return address on the 3627 // Push self-frame. We get here with a return address on the
3616 // stack, so rsp is 8-byte aligned until we allocate our frame. 3628 // stack, so rsp is 8-byte aligned until we allocate our frame.
3617 __ subptr(rsp, SimpleRuntimeFrame::return_off << LogBytesPerInt); // Epilog! 3629 __ subptr(rsp, SimpleRuntimeFrame::return_off << LogBytesPerInt); // Epilog!
3618 3630
3619 // No callee saved registers. rbp is assumed implicitly saved 3631 // No callee saved registers. rbp is assumed implicitly saved
3789 address start = __ pc(); 3801 address start = __ pc();
3790 address call_pc = NULL; 3802 address call_pc = NULL;
3791 int frame_size_in_words; 3803 int frame_size_in_words;
3792 bool cause_return = (poll_type == POLL_AT_RETURN); 3804 bool cause_return = (poll_type == POLL_AT_RETURN);
3793 bool save_vectors = (poll_type == POLL_AT_VECTOR_LOOP); 3805 bool save_vectors = (poll_type == POLL_AT_VECTOR_LOOP);
3806
3807 if (UseRTMLocking) {
3808 // Abort RTM transaction before calling runtime
3809 // because critical section will be large and will be
3810 // aborted anyway. Also nmethod could be deoptimized.
3811 __ xabort(0);
3812 }
3794 3813
3795 // Make room for return address (or push it again) 3814 // Make room for return address (or push it again)
3796 if (!cause_return) { 3815 if (!cause_return) {
3797 __ push(rbx); 3816 __ push(rbx);
3798 } 3817 }