685 static void pd_patch_instruction(address branch, address target, const char* file = nullptr, int line = 0) {
686 pd_patch_instruction_size(branch, target);
687 }
688 static address pd_call_destination(address branch) {
689 return target_addr_for_insn(branch);
690 }
691 #ifndef PRODUCT
692 static void pd_print_patched_instruction(address branch);
693 #endif
694
695 static int patch_oop(address insn_addr, address o);
696 static int patch_narrow_klass(address insn_addr, narrowKlass n);
697
698 // Return whether code is emitted to a scratch blob.
699 virtual bool in_scratch_emit_size() {
700 return false;
701 }
702 address emit_trampoline_stub(int insts_call_instruction_offset, address target);
703 static int max_trampoline_stub_size();
704 void emit_static_call_stub();
705 static int static_call_stub_size();
706
707 // The following 4 methods return the offset of the appropriate move instruction
708
709 // Support for fast byte/short loading with zero extension (depending on particular CPU)
710 int load_unsigned_byte(Register dst, Address src);
711 int load_unsigned_short(Register dst, Address src);
712
713 // Support for fast byte/short loading with sign extension (depending on particular CPU)
714 int load_signed_byte(Register dst, Address src);
715 int load_signed_short(Register dst, Address src);
716
717 int load_signed_byte32(Register dst, Address src);
718 int load_signed_short32(Register dst, Address src);
719
720 // Support for sign-extension (hi:lo = extend_sign(lo))
721 void extend_sign(Register hi, Register lo);
722
723 // Load and store values by size and signed-ness
724 void load_sized_value(Register dst, Address src, size_t size_in_bytes, bool is_signed);
725 void store_sized_value(Address dst, Register src, size_t size_in_bytes);
|
685 static void pd_patch_instruction(address branch, address target, const char* file = nullptr, int line = 0) {
686 pd_patch_instruction_size(branch, target);
687 }
688 static address pd_call_destination(address branch) {
689 return target_addr_for_insn(branch);
690 }
691 #ifndef PRODUCT
692 static void pd_print_patched_instruction(address branch);
693 #endif
694
695 static int patch_oop(address insn_addr, address o);
696 static int patch_narrow_klass(address insn_addr, narrowKlass n);
697
698 // Return whether code is emitted to a scratch blob.
699 virtual bool in_scratch_emit_size() {
700 return false;
701 }
702 address emit_trampoline_stub(int insts_call_instruction_offset, address target);
703 static int max_trampoline_stub_size();
704 void emit_static_call_stub();
705 static int max_static_call_stub_size();
706
707 // The following 4 methods return the offset of the appropriate move instruction
708
709 // Support for fast byte/short loading with zero extension (depending on particular CPU)
710 int load_unsigned_byte(Register dst, Address src);
711 int load_unsigned_short(Register dst, Address src);
712
713 // Support for fast byte/short loading with sign extension (depending on particular CPU)
714 int load_signed_byte(Register dst, Address src);
715 int load_signed_short(Register dst, Address src);
716
717 int load_signed_byte32(Register dst, Address src);
718 int load_signed_short32(Register dst, Address src);
719
720 // Support for sign-extension (hi:lo = extend_sign(lo))
721 void extend_sign(Register hi, Register lo);
722
723 // Load and store values by size and signed-ness
724 void load_sized_value(Register dst, Address src, size_t size_in_bytes, bool is_signed);
725 void store_sized_value(Address dst, Register src, size_t size_in_bytes);
|