< prev index next >

src/hotspot/cpu/x86/x86_64.ad

Print this page
@@ -424,11 +424,10 @@
  
  %}
  
  // Register masks
  source_hpp %{
- 
  extern RegMask _ANY_REG_mask;
  extern RegMask _PTR_REG_mask;
  extern RegMask _PTR_REG_NO_RBP_mask;
  extern RegMask _PTR_NO_RAX_REG_mask;
  extern RegMask _PTR_NO_RAX_RBX_REG_mask;

@@ -837,11 +836,11 @@
    int framesize = C->output()->frame_size_in_bytes();
    int bangsize = C->output()->bang_size_in_bytes();
  
    if (C->clinit_barrier_on_entry()) {
      assert(VM_Version::supports_fast_class_init_checks(), "sanity");
-     assert(!C->method()->holder()->is_not_initialized(), "initialization should have been started");
+     assert(!C->method()->holder()->is_not_initialized() || C->do_clinit_barriers(), "initialization should have been started");
  
      Label L_skip_barrier;
      Register klass = rscratch1;
  
      __ mov_metadata(klass, C->method()->holder()->constant_encoding());

@@ -1863,11 +1862,16 @@
      assert(off1 - off0 == clear_avx_size(), "correct size prediction");
    %}
  
    enc_class Java_To_Runtime(method meth) %{
      // No relocation needed
-     __ mov64(r10, (int64_t) $meth$$method);
+     if (SCCache::is_on_for_write()) {
+       // Created runtime_call_type relocation when caching code
+       __ lea(r10, RuntimeAddress((address)$meth$$method));
+     } else {
+       __ mov64(r10, (int64_t) $meth$$method);
+     }
      __ call(r10);
      __ post_call_nop();
    %}
  
    enc_class Java_Static_Call(method meth)

@@ -2480,10 +2484,22 @@
  
    format %{ %}
    interface(CONST_INTER);
  %}
  
+ // AOT Runtime Constants Address
+ operand immAOTRuntimeConstantsAddress()
+ %{
+   // Check if the address is in the range of AOT Runtime Constants
+   predicate(AOTRuntimeConstants::contains((address)(n->get_ptr())));
+   match(ConP);
+ 
+   op_cost(0);
+   format %{ %}
+   interface(CONST_INTER);
+ %}
+ 
  operand kReg()
  %{
    constraint(ALLOC_IN_RC(vectmask_reg));
    match(RegVectMask);
    format %{%}

@@ -4417,10 +4433,23 @@
      __ movdbl($dst$$XMMRegister, $mem$$Address);
    %}
    ins_pipe(pipe_slow); // XXX
  %}
  
+ instruct loadAOTRCAddress(rRegP dst, immAOTRuntimeConstantsAddress con)
+ %{
+   match(Set dst con);
+ 
+   format %{ "leaq  $dst, $con\t# AOT Runtime Constants Address" %}
+ 
+   ins_encode %{
+     __ load_aotrc_address($dst$$Register, (address)$con$$constant);
+   %}
+ 
+   ins_pipe(ialu_reg_fat);
+ %}
+ 
  // max = java.lang.Math.max(float a, float b)
  instruct maxF_reg(legRegF dst, legRegF a, legRegF b, legRegF tmp, legRegF atmp, legRegF btmp) %{
    predicate(UseAVX > 0 && !VLoopReductions::is_reduction(n));
    match(Set dst (MaxF a b));
    effect(USE a, USE b, TEMP tmp, TEMP atmp, TEMP btmp);
< prev index next >