< prev index next >

src/hotspot/cpu/x86/stubGenerator_x86_64.cpp

Print this page
@@ -23,10 +23,11 @@
   */
  
  #include "precompiled.hpp"
  #include "asm/macroAssembler.hpp"
  #include "classfile/vmIntrinsics.hpp"
+ #include "code/SCCache.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"

@@ -3050,10 +3051,14 @@
  address StubGenerator::generate_multiplyToLen() {
    __ align(CodeEntryAlignment);
    StubCodeMark mark(this, "StubRoutines", "multiplyToLen");
    address start = __ pc();
  
+   if (SCCache::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;

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

@@ -3157,10 +3163,14 @@
  
    __ align(CodeEntryAlignment);
    StubCodeMark mark(this, "StubRoutines", "squareToLen");
    address start = __ pc();
  
+   if (SCCache::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;

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

@@ -3281,10 +3292,14 @@
  address StubGenerator::generate_mulAdd() {
    __ align(CodeEntryAlignment);
    StubCodeMark mark(this, "StubRoutines", "mulAdd");
    address start = __ pc();
  
+   if (SCCache::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;

@@ -3314,10 +3329,11 @@
    restore_arg_regs();
  
    __ leave(); // required for proper stackwalking of RuntimeStub frame
    __ ret(0);
  
+   SCCache::store_stub(this, vmIntrinsics::_mulAdd, "mulAdd", start);
    return start;
  }
  
  address StubGenerator::generate_bigIntegerRightShift() {
    __ align(CodeEntryAlignment);
< prev index next >