< prev index next >

src/hotspot/cpu/aarch64/aarch64.ad

Print this page
@@ -1179,11 +1179,11 @@
    //--------------------------------------------------------------
  
   public:
    // Size of call trampoline stub.
    static uint size_call_trampoline() {
-     return 0; // no call trampolines on this platform
+     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

@@ -3482,11 +3482,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");
+         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;

@@ -4614,10 +4614,35 @@
    op_cost(0);
    format %{ %}
    interface(CONST_INTER);
  %}
  
+ // 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);
+ %}
+ 
  // Float and Double operands
  // Double Immediate
  operand immD()
  %{
    match(ConD);

@@ -6980,10 +7005,40 @@
    ins_encode(aarch64_enc_mov_p1(dst, con));
  
    ins_pipe(ialu_imm);
  %}
  
+ // Load Byte Map Base Constant
+ 
+ instruct loadByteMapBase(iRegPNoSp dst, immByteMapBase con)
+ %{
+   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
  
  instruct loadConN(iRegNNoSp dst, immN con)
  %{
    match(Set dst con);
< prev index next >