Mercurial > hg > graal-compiler
comparison src/cpu/zero/vm/stack_zero.inline.hpp @ 1511:348346af6676
6950178: Zero stack improvements
Summary: Moves the logic for determining the size of the Zero stack into the ZeroStack class.
Reviewed-by: twisti
Contributed-by: Gary Benson <gbenson@redhat.com>
author | twisti |
---|---|
date | Thu, 06 May 2010 02:09:18 -0700 |
parents | aa9c266de52a |
children | c18cbe5936b8 |
comparison
equal
deleted
inserted
replaced
1510:d6e880569997 | 1511:348346af6676 |
---|---|
23 * | 23 * |
24 */ | 24 */ |
25 | 25 |
26 // This function should match SharkStack::CreateStackOverflowCheck | 26 // This function should match SharkStack::CreateStackOverflowCheck |
27 inline void ZeroStack::overflow_check(int required_words, TRAPS) { | 27 inline void ZeroStack::overflow_check(int required_words, TRAPS) { |
28 JavaThread *thread = (JavaThread *) THREAD; | |
29 | |
30 // Check the Zero stack | 28 // Check the Zero stack |
31 if (required_words > available_words()) { | 29 if (available_words() < required_words) { |
32 handle_overflow(THREAD); | 30 handle_overflow(THREAD); |
33 return; | 31 return; |
34 } | 32 } |
35 | 33 |
36 // Check the ABI stack | 34 // Check the ABI stack |
37 address stack_top = thread->stack_base() - thread->stack_size(); | 35 if (abi_stack_available(THREAD) < 0) { |
38 int free_stack = ((address) &stack_top) - stack_top; | |
39 if (free_stack < shadow_pages_size()) { | |
40 handle_overflow(THREAD); | 36 handle_overflow(THREAD); |
41 return; | 37 return; |
42 } | 38 } |
43 } | 39 } |
40 | |
41 // This method returns the amount of ABI stack available for us | |
42 // to use under normal circumstances. Note that the returned | |
43 // value can be negative. | |
44 inline int ZeroStack::abi_stack_available(Thread *thread) const { | |
45 int stack_used = thread->stack_base() - (address) &stack_used; | |
46 int stack_free = thread->stack_size() - stack_used; | |
47 return stack_free - shadow_pages_size(); | |
48 } |