Mercurial > hg > graal-compiler
comparison src/share/vm/runtime/sharedRuntime.cpp @ 6792:137868b7aa6f
7196199: java/text/Bidi/Bug6665028.java failed: Bidi run count incorrect
Summary: Save whole XMM/YMM registers in safepoint interrupt handler.
Reviewed-by: roland, twisti
author | kvn |
---|---|
date | Mon, 17 Sep 2012 19:39:07 -0700 |
parents | 2cb2f30450c7 |
children | b31471cdc53e |
comparison
equal
deleted
inserted
replaced
6791:8d3cc6612bd1 | 6792:137868b7aa6f |
---|---|
86 RuntimeStub* SharedRuntime::_resolve_opt_virtual_call_blob; | 86 RuntimeStub* SharedRuntime::_resolve_opt_virtual_call_blob; |
87 RuntimeStub* SharedRuntime::_resolve_virtual_call_blob; | 87 RuntimeStub* SharedRuntime::_resolve_virtual_call_blob; |
88 RuntimeStub* SharedRuntime::_resolve_static_call_blob; | 88 RuntimeStub* SharedRuntime::_resolve_static_call_blob; |
89 | 89 |
90 DeoptimizationBlob* SharedRuntime::_deopt_blob; | 90 DeoptimizationBlob* SharedRuntime::_deopt_blob; |
91 SafepointBlob* SharedRuntime::_polling_page_vectors_safepoint_handler_blob; | |
91 SafepointBlob* SharedRuntime::_polling_page_safepoint_handler_blob; | 92 SafepointBlob* SharedRuntime::_polling_page_safepoint_handler_blob; |
92 SafepointBlob* SharedRuntime::_polling_page_return_handler_blob; | 93 SafepointBlob* SharedRuntime::_polling_page_return_handler_blob; |
93 | 94 |
94 #ifdef COMPILER2 | 95 #ifdef COMPILER2 |
95 UncommonTrapBlob* SharedRuntime::_uncommon_trap_blob; | 96 UncommonTrapBlob* SharedRuntime::_uncommon_trap_blob; |
102 _ic_miss_blob = generate_resolve_blob(CAST_FROM_FN_PTR(address, SharedRuntime::handle_wrong_method_ic_miss), "ic_miss_stub"); | 103 _ic_miss_blob = generate_resolve_blob(CAST_FROM_FN_PTR(address, SharedRuntime::handle_wrong_method_ic_miss), "ic_miss_stub"); |
103 _resolve_opt_virtual_call_blob = generate_resolve_blob(CAST_FROM_FN_PTR(address, SharedRuntime::resolve_opt_virtual_call_C), "resolve_opt_virtual_call"); | 104 _resolve_opt_virtual_call_blob = generate_resolve_blob(CAST_FROM_FN_PTR(address, SharedRuntime::resolve_opt_virtual_call_C), "resolve_opt_virtual_call"); |
104 _resolve_virtual_call_blob = generate_resolve_blob(CAST_FROM_FN_PTR(address, SharedRuntime::resolve_virtual_call_C), "resolve_virtual_call"); | 105 _resolve_virtual_call_blob = generate_resolve_blob(CAST_FROM_FN_PTR(address, SharedRuntime::resolve_virtual_call_C), "resolve_virtual_call"); |
105 _resolve_static_call_blob = generate_resolve_blob(CAST_FROM_FN_PTR(address, SharedRuntime::resolve_static_call_C), "resolve_static_call"); | 106 _resolve_static_call_blob = generate_resolve_blob(CAST_FROM_FN_PTR(address, SharedRuntime::resolve_static_call_C), "resolve_static_call"); |
106 | 107 |
107 _polling_page_safepoint_handler_blob = generate_handler_blob(CAST_FROM_FN_PTR(address, SafepointSynchronize::handle_polling_page_exception), false); | 108 #ifdef COMPILER2 |
108 _polling_page_return_handler_blob = generate_handler_blob(CAST_FROM_FN_PTR(address, SafepointSynchronize::handle_polling_page_exception), true); | 109 // Vectors are generated only by C2. |
110 if (is_wide_vector(MaxVectorSize)) { | |
111 _polling_page_vectors_safepoint_handler_blob = generate_handler_blob(CAST_FROM_FN_PTR(address, SafepointSynchronize::handle_polling_page_exception), POLL_AT_VECTOR_LOOP); | |
112 } | |
113 #endif // COMPILER2 | |
114 _polling_page_safepoint_handler_blob = generate_handler_blob(CAST_FROM_FN_PTR(address, SafepointSynchronize::handle_polling_page_exception), POLL_AT_LOOP); | |
115 _polling_page_return_handler_blob = generate_handler_blob(CAST_FROM_FN_PTR(address, SafepointSynchronize::handle_polling_page_exception), POLL_AT_RETURN); | |
109 | 116 |
110 generate_deopt_blob(); | 117 generate_deopt_blob(); |
111 | 118 |
112 #ifdef COMPILER2 | 119 #ifdef COMPILER2 |
113 generate_uncommon_trap_blob(); | 120 generate_uncommon_trap_blob(); |
533 | 540 |
534 assert( ((NativeInstruction*)pc)->is_safepoint_poll(), | 541 assert( ((NativeInstruction*)pc)->is_safepoint_poll(), |
535 "Only polling locations are used for safepoint"); | 542 "Only polling locations are used for safepoint"); |
536 | 543 |
537 bool at_poll_return = ((nmethod*)cb)->is_at_poll_return(pc); | 544 bool at_poll_return = ((nmethod*)cb)->is_at_poll_return(pc); |
545 bool has_wide_vectors = ((nmethod*)cb)->has_wide_vectors(); | |
538 if (at_poll_return) { | 546 if (at_poll_return) { |
539 assert(SharedRuntime::polling_page_return_handler_blob() != NULL, | 547 assert(SharedRuntime::polling_page_return_handler_blob() != NULL, |
540 "polling page return stub not created yet"); | 548 "polling page return stub not created yet"); |
541 stub = SharedRuntime::polling_page_return_handler_blob()->entry_point(); | 549 stub = SharedRuntime::polling_page_return_handler_blob()->entry_point(); |
550 } else if (has_wide_vectors) { | |
551 assert(SharedRuntime::polling_page_vectors_safepoint_handler_blob() != NULL, | |
552 "polling page vectors safepoint stub not created yet"); | |
553 stub = SharedRuntime::polling_page_vectors_safepoint_handler_blob()->entry_point(); | |
542 } else { | 554 } else { |
543 assert(SharedRuntime::polling_page_safepoint_handler_blob() != NULL, | 555 assert(SharedRuntime::polling_page_safepoint_handler_blob() != NULL, |
544 "polling page safepoint stub not created yet"); | 556 "polling page safepoint stub not created yet"); |
545 stub = SharedRuntime::polling_page_safepoint_handler_blob()->entry_point(); | 557 stub = SharedRuntime::polling_page_safepoint_handler_blob()->entry_point(); |
546 } | 558 } |