< prev index next >

src/hotspot/cpu/aarch64/aarch64.ad

Print this page
*** 1139,11 ***
    //--------------------------------------------------------------
  
   public:
    // Size of call trampoline stub.
    static uint size_call_trampoline() {
!     return 0; // no call trampolines on this platform
    }
  
    // number of relocations needed by a call trampoline stub
    static uint reloc_call_trampoline() {
      return 0; // no call trampolines on this platform
--- 1139,11 ---
    //--------------------------------------------------------------
  
   public:
    // Size of call trampoline stub.
    static uint size_call_trampoline() {
!     return MacroAssembler::max_trampoline_stub_size(); // no call trampolines on this platform
    }
  
    // number of relocations needed by a call trampoline stub
    static uint reloc_call_trampoline() {
      return 0; // no call trampolines on this platform

*** 3394,11 ***
        if (rtype == relocInfo::oop_type) {
          __ movoop(dst_reg, (jobject)con);
        } else if (rtype == relocInfo::metadata_type) {
          __ mov_metadata(dst_reg, (Metadata*)con);
        } else {
!         assert(rtype == relocInfo::none, "unexpected reloc type");
          if (! __ is_valid_AArch64_address(con) ||
              con < (address)(uintptr_t)os::vm_page_size()) {
            __ mov(dst_reg, con);
          } else {
            uint64_t offset;
--- 3394,11 ---
        if (rtype == relocInfo::oop_type) {
          __ movoop(dst_reg, (jobject)con);
        } else if (rtype == relocInfo::metadata_type) {
          __ mov_metadata(dst_reg, (Metadata*)con);
        } else {
!         assert(rtype == relocInfo::none || rtype == relocInfo::external_word_type, "unexpected reloc type");
          if (! __ is_valid_AArch64_address(con) ||
              con < (address)(uintptr_t)os::vm_page_size()) {
            __ mov(dst_reg, con);
          } else {
            uint64_t offset;

*** 3417,14 ***
    enc_class aarch64_enc_mov_p1(iRegP dst, immP_1 src) %{
      Register dst_reg = as_Register($dst$$reg);
      __ mov(dst_reg, (uint64_t)1);
    %}
  
-   enc_class aarch64_enc_mov_byte_map_base(iRegP dst, immByteMapBase src) %{
-     __ load_byte_map_base($dst$$Register);
-   %}
- 
    enc_class aarch64_enc_mov_n(iRegN dst, immN src) %{
      Register dst_reg = as_Register($dst$$reg);
      address con = (address)$src$$constant;
      if (con == nullptr) {
        ShouldNotReachHere();
--- 3417,10 ---

*** 4523,11 ***
  // Card Table Byte Map Base
  operand immByteMapBase()
  %{
    // Get base of card map
    predicate(BarrierSet::barrier_set()->is_a(BarrierSet::CardTableBarrierSet) &&
!             (CardTable::CardValue*)n->get_ptr() == ((CardTableBarrierSet*)(BarrierSet::barrier_set()))->card_table()->byte_map_base());
    match(ConP);
  
    op_cost(0);
    format %{ %}
    interface(CONST_INTER);
--- 4519,23 ---
  // Card Table Byte Map Base
  operand immByteMapBase()
  %{
    // Get base of card map
    predicate(BarrierSet::barrier_set()->is_a(BarrierSet::CardTableBarrierSet) &&
!             is_card_table_address((address)(n->get_ptr())));
+   match(ConP);
+ 
+   op_cost(0);
+   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);

*** 6780,11 ***
    match(Set dst con);
  
    ins_cost(INSN_COST);
    format %{ "adr  $dst, $con\t# Byte Map Base" %}
  
!   ins_encode(aarch64_enc_mov_byte_map_base(dst, con));
  
    ins_pipe(ialu_imm);
  %}
  
  // Load Narrow Pointer Constant
--- 6788,27 ---
    match(Set dst con);
  
    ins_cost(INSN_COST);
    format %{ "adr  $dst, $con\t# Byte Map Base" %}
  
!   ins_encode %{
+     __ load_byte_map_base($dst$$Register);
+   %}
+ 
+   ins_pipe(ialu_imm);
+ %}
+ 
+ instruct loadAOTRCAddress(iRegPNoSp dst, immAOTRuntimeConstantsAddress con)
+ %{
+   match(Set dst con);
+ 
+   ins_cost(INSN_COST);
+   format %{ "adr  $dst, $con\t# AOT Runtime Constants Address" %}
+ 
+   ins_encode %{
+     __ load_aotrc_address($dst$$Register, (address)$con$$constant);
+   %}
  
    ins_pipe(ialu_imm);
  %}
  
  // Load Narrow Pointer Constant
< prev index next >