Mercurial > hg > graal-jvmci-8
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 } |