diff -r 80d5d0d21b75 -r 6979b9850feb hotspot/src/share/vm/runtime/sharedRuntime.hpp --- a/hotspot/src/share/vm/runtime/sharedRuntime.hpp Mon Sep 17 17:02:10 2012 -0700 +++ b/hotspot/src/share/vm/runtime/sharedRuntime.hpp Mon Sep 17 19:39:07 2012 -0700 @@ -62,6 +62,7 @@ static DeoptimizationBlob* _deopt_blob; + static SafepointBlob* _polling_page_vectors_safepoint_handler_blob; static SafepointBlob* _polling_page_safepoint_handler_blob; static SafepointBlob* _polling_page_return_handler_blob; @@ -75,7 +76,8 @@ #endif // !PRODUCT private: - static SafepointBlob* generate_handler_blob(address call_ptr, bool cause_return); + enum { POLL_AT_RETURN, POLL_AT_LOOP, POLL_AT_VECTOR_LOOP }; + static SafepointBlob* generate_handler_blob(address call_ptr, int poll_type); static RuntimeStub* generate_resolve_blob(address destination, const char* name); public: @@ -223,6 +225,7 @@ static SafepointBlob* polling_page_return_handler_blob() { return _polling_page_return_handler_blob; } static SafepointBlob* polling_page_safepoint_handler_blob() { return _polling_page_safepoint_handler_blob; } + static SafepointBlob* polling_page_vectors_safepoint_handler_blob() { return _polling_page_vectors_safepoint_handler_blob; } // Counters #ifndef PRODUCT @@ -416,6 +419,10 @@ // when an interrupt occurs. static uint out_preserve_stack_slots(); + // Is vector's size (in bytes) bigger than a size saved by default? + // For example, on x86 16 bytes XMM registers are saved by default. + static bool is_wide_vector(int size); + // Save and restore a native result static void save_native_result(MacroAssembler *_masm, BasicType ret_type, int frame_slots ); static void restore_native_result(MacroAssembler *_masm, BasicType ret_type, int frame_slots );