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 }