< prev index next >

src/hotspot/cpu/s390/templateInterpreterGenerator_s390.cpp

Print this page

1780   __ z_mvi(do_not_unlock_if_synchronized, false);
1781 
1782   // Check for synchronized methods.
1783   // Must happen AFTER invocation_counter check and stack overflow check,
1784   // so method is not locked if overflows.
1785   if (synchronized) {
1786     // Allocate monitor and lock method.
1787     lock_method();
1788   } else {
1789 #ifdef ASSERT
1790     { Label L;
1791       __ get_method(Z_R1_scratch);
1792       __ testbit_ushort(method2_(Z_R1_scratch, access_flags), JVM_ACC_SYNCHRONIZED_BIT);
1793       __ z_bfalse(L);
1794       reentry = __ stop_chain_static(reentry, "method needs synchronization");
1795       __ bind(L);
1796     }
1797 #endif // ASSERT
1798   }
1799 






1800   // start execution
1801 
1802 #ifdef ASSERT
1803   __ verify_esp(Z_esp, Z_R1_scratch);
1804 #endif
1805 
1806   // jvmti support
1807   __ notify_method_entry();
1808 
1809   // Start executing instructions.
1810   __ dispatch_next(vtos);
1811   // Dispatch_next does not return.
1812   DEBUG_ONLY(__ should_not_reach_here());
1813 
1814   // Invocation counter overflow.
1815   if (inc_counter) {
1816     // Handle invocation counter overflow.
1817     __ bind(invocation_counter_overflow);
1818     generate_counter_overflow(Lcontinue);
1819   }

1780   __ z_mvi(do_not_unlock_if_synchronized, false);
1781 
1782   // Check for synchronized methods.
1783   // Must happen AFTER invocation_counter check and stack overflow check,
1784   // so method is not locked if overflows.
1785   if (synchronized) {
1786     // Allocate monitor and lock method.
1787     lock_method();
1788   } else {
1789 #ifdef ASSERT
1790     { Label L;
1791       __ get_method(Z_R1_scratch);
1792       __ testbit_ushort(method2_(Z_R1_scratch, access_flags), JVM_ACC_SYNCHRONIZED_BIT);
1793       __ z_bfalse(L);
1794       reentry = __ stop_chain_static(reentry, "method needs synchronization");
1795       __ bind(L);
1796     }
1797 #endif // ASSERT
1798   }
1799 
1800   // If object_init == true, we should insert a StoreStore barrier here to
1801   // prevent strict fields initial default values from being observable.
1802   // However, s390 is a TSO platform, so if `this` escapes, strict fields
1803   // initialized values are guaranteed to be the ones observed, so the
1804   // barrier can be elided.
1805 
1806   // start execution
1807 
1808 #ifdef ASSERT
1809   __ verify_esp(Z_esp, Z_R1_scratch);
1810 #endif
1811 
1812   // jvmti support
1813   __ notify_method_entry();
1814 
1815   // Start executing instructions.
1816   __ dispatch_next(vtos);
1817   // Dispatch_next does not return.
1818   DEBUG_ONLY(__ should_not_reach_here());
1819 
1820   // Invocation counter overflow.
1821   if (inc_counter) {
1822     // Handle invocation counter overflow.
1823     __ bind(invocation_counter_overflow);
1824     generate_counter_overflow(Lcontinue);
1825   }
< prev index next >