< prev index next >

src/hotspot/cpu/x86/stubGenerator_x86_64.cpp

Print this page
*** 23,10 ***
--- 23,11 ---
   */
  
  #include "asm/macroAssembler.hpp"
  #include "classfile/javaClasses.hpp"
  #include "classfile/vmIntrinsics.hpp"
+ #include "code/aotCodeCache.hpp"
  #include "compiler/oopMap.hpp"
  #include "gc/shared/barrierSet.hpp"
  #include "gc/shared/barrierSetAssembler.hpp"
  #include "gc/shared/barrierSetNMethod.hpp"
  #include "gc/shared/gc_globals.hpp"

*** 3157,10 ***
--- 3158,14 ---
    __ align(CodeEntryAlignment);
    StubGenStubId stub_id = StubGenStubId::multiplyToLen_id;
    StubCodeMark mark(this, stub_id);
    address start = __ pc();
  
+   if (AOTCodeCache::load_stub(this, vmIntrinsics::_multiplyToLen, "multiplyToLen", start)) {
+     return start;
+   }
+ 
    // Win64: rcx, rdx, r8, r9 (c_rarg0, c_rarg1, ...)
    // Unix:  rdi, rsi, rdx, rcx, r8, r9 (c_rarg0, c_rarg1, ...)
    const Register x     = rdi;
    const Register xlen  = rax;
    const Register y     = rsi;

*** 3193,10 ***
--- 3198,11 ---
    restore_arg_regs();
  
    __ leave(); // required for proper stackwalking of RuntimeStub frame
    __ ret(0);
  
+   AOTCodeCache::store_stub(this, vmIntrinsics::_multiplyToLen, "multiplyToLen", start);
    return start;
  }
  
  /**
  *  Arguments:

*** 3266,10 ***
--- 3272,14 ---
    __ align(CodeEntryAlignment);
    StubGenStubId stub_id = StubGenStubId::squareToLen_id;
    StubCodeMark mark(this, stub_id);
    address start = __ pc();
  
+   if (AOTCodeCache::load_stub(this, vmIntrinsics::_squareToLen, "squareToLen", start)) {
+     return start;
+   }
+ 
    // Win64: rcx, rdx, r8, r9 (c_rarg0, c_rarg1, ...)
    // Unix:  rdi, rsi, rdx, rcx (c_rarg0, c_rarg1, ...)
    const Register x      = rdi;
    const Register len    = rsi;
    const Register z      = r8;

*** 3293,10 ***
--- 3303,11 ---
    restore_arg_regs();
  
    __ leave(); // required for proper stackwalking of RuntimeStub frame
    __ ret(0);
  
+   AOTCodeCache::store_stub(this, vmIntrinsics::_squareToLen, "squareToLen", start);
    return start;
  }
  
  address StubGenerator::generate_method_entry_barrier() {
    __ align(CodeEntryAlignment);

*** 3392,10 ***
--- 3403,14 ---
    __ align(CodeEntryAlignment);
    StubGenStubId stub_id = StubGenStubId::mulAdd_id;
    StubCodeMark mark(this, stub_id);
    address start = __ pc();
  
+   if (AOTCodeCache::load_stub(this, vmIntrinsics::_mulAdd, "mulAdd", start)) {
+     return start;
+   }
+ 
    // Win64: rcx, rdx, r8, r9 (c_rarg0, c_rarg1, ...)
    // Unix:  rdi, rsi, rdx, rcx, r8, r9 (c_rarg0, c_rarg1, ...)
    const Register out     = rdi;
    const Register in      = rsi;
    const Register offset  = r11;

*** 3425,10 ***
--- 3440,11 ---
    restore_arg_regs();
  
    __ leave(); // required for proper stackwalking of RuntimeStub frame
    __ ret(0);
  
+   AOTCodeCache::store_stub(this, vmIntrinsics::_mulAdd, "mulAdd", start);
    return start;
  }
  
  address StubGenerator::generate_bigIntegerRightShift() {
    __ align(CodeEntryAlignment);

*** 4047,10 ***
--- 4063,15 ---
    // Round to zero, 64-bit mode, exceptions masked, flags specialized
    StubRoutines::x86::_mxcsr_rz = EnableX86ECoreOpts ? 0x7FBF : 0x7F80;
  }
  
  // Initialization
+ void StubGenerator::generate_preuniverse_stubs() {
+   // atomic calls
+   StubRoutines::_fence_entry                = generate_orderaccess_fence();
+ }
+ 
  void StubGenerator::generate_initial_stubs() {
    // Generates all stubs and initializes the entry points
  
    // This platform-specific settings are needed by generate_call_stub()
    create_control_words();

*** 4072,13 ***
      generate_call_stub(StubRoutines::_call_stub_return_address);
  
    // is referenced by megamorphic call
    StubRoutines::_catch_exception_entry = generate_catch_exception();
  
-   // atomic calls
-   StubRoutines::_fence_entry                = generate_orderaccess_fence();
- 
    // platform dependent
    StubRoutines::x86::_get_previous_sp_entry = generate_get_previous_sp();
  
    StubRoutines::x86::_verify_mxcsr_entry    = generate_verify_mxcsr();
  
--- 4093,10 ---

*** 4342,10 ***
--- 4360,13 ---
  #endif // COMPILER2_OR_JVMCI
  }
  
  StubGenerator::StubGenerator(CodeBuffer* code, StubGenBlobId blob_id) : StubCodeGenerator(code, blob_id) {
    switch(blob_id) {
+   case preuniverse_id:
+     generate_preuniverse_stubs();
+     break;
    case initial_id:
      generate_initial_stubs();
      break;
    case continuation_id:
      generate_continuation_stubs();
< prev index next >