Mercurial > hg > graal-jvmci-8
comparison src/share/vm/runtime/sharedRuntime.hpp @ 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 | e522a00b91aa db9981fd3124 |
comparison
equal
deleted
inserted
replaced
6791:8d3cc6612bd1 | 6792:137868b7aa6f |
---|---|
60 static RuntimeStub* _resolve_virtual_call_blob; | 60 static RuntimeStub* _resolve_virtual_call_blob; |
61 static RuntimeStub* _resolve_static_call_blob; | 61 static RuntimeStub* _resolve_static_call_blob; |
62 | 62 |
63 static DeoptimizationBlob* _deopt_blob; | 63 static DeoptimizationBlob* _deopt_blob; |
64 | 64 |
65 static SafepointBlob* _polling_page_vectors_safepoint_handler_blob; | |
65 static SafepointBlob* _polling_page_safepoint_handler_blob; | 66 static SafepointBlob* _polling_page_safepoint_handler_blob; |
66 static SafepointBlob* _polling_page_return_handler_blob; | 67 static SafepointBlob* _polling_page_return_handler_blob; |
67 | 68 |
68 #ifdef COMPILER2 | 69 #ifdef COMPILER2 |
69 static UncommonTrapBlob* _uncommon_trap_blob; | 70 static UncommonTrapBlob* _uncommon_trap_blob; |
73 // Counters | 74 // Counters |
74 static int _nof_megamorphic_calls; // total # of megamorphic calls (through vtable) | 75 static int _nof_megamorphic_calls; // total # of megamorphic calls (through vtable) |
75 #endif // !PRODUCT | 76 #endif // !PRODUCT |
76 | 77 |
77 private: | 78 private: |
78 static SafepointBlob* generate_handler_blob(address call_ptr, bool cause_return); | 79 enum { POLL_AT_RETURN, POLL_AT_LOOP, POLL_AT_VECTOR_LOOP }; |
80 static SafepointBlob* generate_handler_blob(address call_ptr, int poll_type); | |
79 static RuntimeStub* generate_resolve_blob(address destination, const char* name); | 81 static RuntimeStub* generate_resolve_blob(address destination, const char* name); |
80 | 82 |
81 public: | 83 public: |
82 static void generate_stubs(void); | 84 static void generate_stubs(void); |
83 | 85 |
221 return _resolve_static_call_blob->entry_point(); | 223 return _resolve_static_call_blob->entry_point(); |
222 } | 224 } |
223 | 225 |
224 static SafepointBlob* polling_page_return_handler_blob() { return _polling_page_return_handler_blob; } | 226 static SafepointBlob* polling_page_return_handler_blob() { return _polling_page_return_handler_blob; } |
225 static SafepointBlob* polling_page_safepoint_handler_blob() { return _polling_page_safepoint_handler_blob; } | 227 static SafepointBlob* polling_page_safepoint_handler_blob() { return _polling_page_safepoint_handler_blob; } |
228 static SafepointBlob* polling_page_vectors_safepoint_handler_blob() { return _polling_page_vectors_safepoint_handler_blob; } | |
226 | 229 |
227 // Counters | 230 // Counters |
228 #ifndef PRODUCT | 231 #ifndef PRODUCT |
229 static address nof_megamorphic_calls_addr() { return (address)&_nof_megamorphic_calls; } | 232 static address nof_megamorphic_calls_addr() { return (address)&_nof_megamorphic_calls; } |
230 #endif // PRODUCT | 233 #endif // PRODUCT |
413 // otherwise be preserved. | 416 // otherwise be preserved. |
414 // On Intel these are not necessary and the value can be zero. | 417 // On Intel these are not necessary and the value can be zero. |
415 // On Sparc this describes the words reserved for storing a register window | 418 // On Sparc this describes the words reserved for storing a register window |
416 // when an interrupt occurs. | 419 // when an interrupt occurs. |
417 static uint out_preserve_stack_slots(); | 420 static uint out_preserve_stack_slots(); |
421 | |
422 // Is vector's size (in bytes) bigger than a size saved by default? | |
423 // For example, on x86 16 bytes XMM registers are saved by default. | |
424 static bool is_wide_vector(int size); | |
418 | 425 |
419 // Save and restore a native result | 426 // Save and restore a native result |
420 static void save_native_result(MacroAssembler *_masm, BasicType ret_type, int frame_slots ); | 427 static void save_native_result(MacroAssembler *_masm, BasicType ret_type, int frame_slots ); |
421 static void restore_native_result(MacroAssembler *_masm, BasicType ret_type, int frame_slots ); | 428 static void restore_native_result(MacroAssembler *_masm, BasicType ret_type, int frame_slots ); |
422 | 429 |