src/cpu/x86/vm/sharedRuntime_x86_32.cpp

changeset 6723
0bf37f737702
parent 6558
2100bf712e2a
child 6876
710a3c8b516e
child 8877
f04097176542
equal deleted inserted replaced
6721:ad51f24671c2 6723:0bf37f737702
3012 3012
3013 // Pick up the initial fp we should save 3013 // Pick up the initial fp we should save
3014 // restore rbp before stack bang because if stack overflow is thrown it needs to be pushed (and preserved) 3014 // restore rbp before stack bang because if stack overflow is thrown it needs to be pushed (and preserved)
3015 __ movptr(rbp, Address(rdi, Deoptimization::UnrollBlock::initial_info_offset_in_bytes())); 3015 __ movptr(rbp, Address(rdi, Deoptimization::UnrollBlock::initial_info_offset_in_bytes()));
3016 3016
3017 // Stack bang to make sure there's enough room for these interpreter frames. 3017 #ifdef ASSERT
3018 // Compilers generate code that bang the stack by as much as the
3019 // interpreter would need. So this stack banging should never
3020 // trigger a fault. Verify that it does not on non product builds.
3018 if (UseStackBanging) { 3021 if (UseStackBanging) {
3019 __ movl(rbx, Address(rdi ,Deoptimization::UnrollBlock::total_frame_sizes_offset_in_bytes())); 3022 __ movl(rbx, Address(rdi ,Deoptimization::UnrollBlock::total_frame_sizes_offset_in_bytes()));
3020 __ bang_stack_size(rbx, rcx); 3023 __ bang_stack_size(rbx, rcx);
3021 } 3024 }
3025 #endif
3022 3026
3023 // Load array of frame pcs into ECX 3027 // Load array of frame pcs into ECX
3024 __ movptr(rcx,Address(rdi,Deoptimization::UnrollBlock::frame_pcs_offset_in_bytes())); 3028 __ movptr(rcx,Address(rdi,Deoptimization::UnrollBlock::frame_pcs_offset_in_bytes()));
3025 3029
3026 __ pop(rsi); // trash the old pc 3030 __ pop(rsi); // trash the old pc
3238 3242
3239 // Pick up the initial fp we should save 3243 // Pick up the initial fp we should save
3240 // restore rbp before stack bang because if stack overflow is thrown it needs to be pushed (and preserved) 3244 // restore rbp before stack bang because if stack overflow is thrown it needs to be pushed (and preserved)
3241 __ movptr(rbp, Address(rdi, Deoptimization::UnrollBlock::initial_info_offset_in_bytes())); 3245 __ movptr(rbp, Address(rdi, Deoptimization::UnrollBlock::initial_info_offset_in_bytes()));
3242 3246
3243 // Stack bang to make sure there's enough room for these interpreter frames. 3247 #ifdef ASSERT
3248 // Compilers generate code that bang the stack by as much as the
3249 // interpreter would need. So this stack banging should never
3250 // trigger a fault. Verify that it does not on non product builds.
3244 if (UseStackBanging) { 3251 if (UseStackBanging) {
3245 __ movl(rbx, Address(rdi ,Deoptimization::UnrollBlock::total_frame_sizes_offset_in_bytes())); 3252 __ movl(rbx, Address(rdi ,Deoptimization::UnrollBlock::total_frame_sizes_offset_in_bytes()));
3246 __ bang_stack_size(rbx, rcx); 3253 __ bang_stack_size(rbx, rcx);
3247 } 3254 }
3248 3255 #endif
3249 3256
3250 // Load array of frame pcs into ECX 3257 // Load array of frame pcs into ECX
3251 __ movl(rcx,Address(rdi,Deoptimization::UnrollBlock::frame_pcs_offset_in_bytes())); 3258 __ movl(rcx,Address(rdi,Deoptimization::UnrollBlock::frame_pcs_offset_in_bytes()));
3252 3259
3253 __ pop(rsi); // trash the pc 3260 __ pop(rsi); // trash the pc

mercurial