src/hotspot/cpu/aarch64/aarch64.ad
changeset 55521 f9a2f93a0c87
parent 55398 e53ec3b362f4
child 57565 01bca26734bb
--- a/src/hotspot/cpu/aarch64/aarch64.ad	Fri Jun 28 11:26:07 2019 +0100
+++ b/src/hotspot/cpu/aarch64/aarch64.ad	Fri Jun 28 17:10:22 2019 +0300
@@ -1761,6 +1761,17 @@
   // branch if we need to invalidate the method later
   __ nop();
 
+  if (C->clinit_barrier_on_entry()) {
+    assert(!C->method()->holder()->is_not_initialized(), "initialization should have been started");
+
+    Label L_skip_barrier;
+
+    __ mov_metadata(rscratch2, C->method()->holder()->constant_encoding());
+    __ clinit_barrier(rscratch2, rscratch1, &L_skip_barrier);
+    __ far_jump(RuntimeAddress(SharedRuntime::get_handle_wrong_method_stub()));
+    __ bind(L_skip_barrier);
+  }
+  
   int bangsize = C->bang_size_in_bytes();
   if (C->need_stack_bang(bangsize) && UseStackBanging)
     __ generate_stack_overflow_check(bangsize);