equal
deleted
inserted
replaced
309 // Now reload the 64bit Oregs after we've restore the window. |
309 // Now reload the 64bit Oregs after we've restore the window. |
310 __ ldx(G2_thread, JavaThread::o_reg_temps_offset_in_bytes()+0*8, O0); |
310 __ ldx(G2_thread, JavaThread::o_reg_temps_offset_in_bytes()+0*8, O0); |
311 __ ldx(G2_thread, JavaThread::o_reg_temps_offset_in_bytes()+1*8, O1); |
311 __ ldx(G2_thread, JavaThread::o_reg_temps_offset_in_bytes()+1*8, O1); |
312 #endif /* _LP64 */ |
312 #endif /* _LP64 */ |
313 |
313 |
|
314 } |
|
315 |
|
316 // Is vector's size (in bytes) bigger than a size saved by default? |
|
317 // 8 bytes FP registers are saved by default on SPARC. |
|
318 bool SharedRuntime::is_wide_vector(int size) { |
|
319 // Note, MaxVectorSize == 8 on SPARC. |
|
320 assert(size <= 8, err_msg_res("%d bytes vectors are not supported", size)); |
|
321 return size > 8; |
314 } |
322 } |
315 |
323 |
316 // The java_calling_convention describes stack locations as ideal slots on |
324 // The java_calling_convention describes stack locations as ideal slots on |
317 // a frame with no abi restrictions. Since we must observe abi restrictions |
325 // a frame with no abi restrictions. Since we must observe abi restrictions |
318 // (like the placement of the register window) the slots must be biased by |
326 // (like the placement of the register window) the slots must be biased by |
3732 // the adjusted FP off to the GC stack-crawler: this will modify the caller's |
3740 // the adjusted FP off to the GC stack-crawler: this will modify the caller's |
3733 // SP and mess up HIS OopMaps. So we first adjust the caller's SP, then save |
3741 // SP and mess up HIS OopMaps. So we first adjust the caller's SP, then save |
3734 // the 64-bit %o's, then do a save, then fixup the caller's SP (our FP). |
3742 // the 64-bit %o's, then do a save, then fixup the caller's SP (our FP). |
3735 // Tricky, tricky, tricky... |
3743 // Tricky, tricky, tricky... |
3736 |
3744 |
3737 SafepointBlob* SharedRuntime::generate_handler_blob(address call_ptr, bool cause_return) { |
3745 SafepointBlob* SharedRuntime::generate_handler_blob(address call_ptr, int poll_type) { |
3738 assert (StubRoutines::forward_exception_entry() != NULL, "must be generated before"); |
3746 assert (StubRoutines::forward_exception_entry() != NULL, "must be generated before"); |
3739 |
3747 |
3740 // allocate space for the code |
3748 // allocate space for the code |
3741 ResourceMark rm; |
3749 ResourceMark rm; |
3742 // setup code generation tools |
3750 // setup code generation tools |
3750 OopMapSet *oop_maps = new OopMapSet(); |
3758 OopMapSet *oop_maps = new OopMapSet(); |
3751 OopMap* map = NULL; |
3759 OopMap* map = NULL; |
3752 |
3760 |
3753 int start = __ offset(); |
3761 int start = __ offset(); |
3754 |
3762 |
|
3763 bool cause_return = (poll_type == POLL_AT_RETURN); |
3755 // If this causes a return before the processing, then do a "restore" |
3764 // If this causes a return before the processing, then do a "restore" |
3756 if (cause_return) { |
3765 if (cause_return) { |
3757 __ restore(); |
3766 __ restore(); |
3758 } else { |
3767 } else { |
3759 // Make it look like we were called via the poll |
3768 // Make it look like we were called via the poll |