< prev index next >

src/hotspot/cpu/x86/macroAssembler_x86.cpp

Print this page
@@ -23,10 +23,11 @@
   */
  
  #include "precompiled.hpp"
  #include "asm/assembler.hpp"
  #include "asm/assembler.inline.hpp"
+ #include "code/SCCache.hpp"
  #include "code/compiledIC.hpp"
  #include "compiler/compiler_globals.hpp"
  #include "compiler/disassembler.hpp"
  #include "crc32c.h"
  #include "gc/shared/barrierSet.hpp"

@@ -769,10 +770,11 @@
    }
    lea(c_rarg0, ExternalAddress((address) msg));
    andq(rsp, -16); // align stack as required by ABI
    call(RuntimeAddress(CAST_FROM_FN_PTR(address, MacroAssembler::debug64)));
    hlt();
+   SCCache::add_C_string(msg);
  }
  
  void MacroAssembler::warn(const char* msg) {
    push(rbp);
    movq(rbp, rsp);

@@ -10421,14 +10423,29 @@
    movq(rcx, Address(rsp, 14 * wordSize));
    movq(rax, Address(rsp, 15 * wordSize));
    addq(rsp, 16 * wordSize);
  }
  
+ void MacroAssembler::load_aotrc_address(Register reg, address a) {
+ #if INCLUDE_CDS
+   assert(AOTRuntimeConstants::contains(a), "address out of range for data area");
+   if (SCCache::is_on_for_write()) {
+     // all aotrc field addresses should be registered in the SCC address table
+     lea(reg, ExternalAddress(a));
+   } else {
+     mov64(reg, (uint64_t)a);
+   }
+ #else
+   ShouldNotReachHere();
+ #endif
+ }
+ 
  void MacroAssembler::setcc(Assembler::Condition comparison, Register dst) {
    if (VM_Version::supports_apx_f()) {
      esetzucc(comparison, dst);
    } else {
      setb(comparison, dst);
      movzbl(dst, dst);
    }
  }
+ 
  #endif
< prev index next >