573 static address target_addr_for_insn(address insn_addr, unsigned insn);
574 static address target_addr_for_insn(address insn_addr) {
575 unsigned insn = *(unsigned*)insn_addr;
576 return target_addr_for_insn(insn_addr, insn);
577 }
578
579 // Required platform-specific helpers for Label::patch_instructions.
580 // They _shadow_ the declarations in AbstractAssembler, which are undefined.
581 static int pd_patch_instruction_size(address branch, address target);
582 static void pd_patch_instruction(address branch, address target) {
583 pd_patch_instruction_size(branch, target);
584 }
585 static address pd_call_destination(address branch) {
586 return target_addr_for_insn(branch);
587 }
588 #ifndef PRODUCT
589 static void pd_print_patched_instruction(address branch);
590 #endif
591
592 static int patch_oop(address insn_addr, address o);
593
594 address emit_trampoline_stub(int insts_call_instruction_offset, address target);
595
596 // The following 4 methods return the offset of the appropriate move instruction
597
598 // Support for fast byte/short loading with zero extension (depending on particular CPU)
599 int load_unsigned_byte(Register dst, Address src);
600 int load_unsigned_short(Register dst, Address src);
601
602 // Support for fast byte/short loading with sign extension (depending on particular CPU)
603 int load_signed_byte(Register dst, Address src);
604 int load_signed_short(Register dst, Address src);
605
606 int load_signed_byte32(Register dst, Address src);
607 int load_signed_short32(Register dst, Address src);
608
609 // Support for sign-extension (hi:lo = extend_sign(lo))
610 void extend_sign(Register hi, Register lo);
611
612 // Load and store values by size and signed-ness
|
573 static address target_addr_for_insn(address insn_addr, unsigned insn);
574 static address target_addr_for_insn(address insn_addr) {
575 unsigned insn = *(unsigned*)insn_addr;
576 return target_addr_for_insn(insn_addr, insn);
577 }
578
579 // Required platform-specific helpers for Label::patch_instructions.
580 // They _shadow_ the declarations in AbstractAssembler, which are undefined.
581 static int pd_patch_instruction_size(address branch, address target);
582 static void pd_patch_instruction(address branch, address target) {
583 pd_patch_instruction_size(branch, target);
584 }
585 static address pd_call_destination(address branch) {
586 return target_addr_for_insn(branch);
587 }
588 #ifndef PRODUCT
589 static void pd_print_patched_instruction(address branch);
590 #endif
591
592 static int patch_oop(address insn_addr, address o);
593 static int patch_narrow_klass(address insn_addr, narrowKlass n);
594
595 address emit_trampoline_stub(int insts_call_instruction_offset, address target);
596
597 // The following 4 methods return the offset of the appropriate move instruction
598
599 // Support for fast byte/short loading with zero extension (depending on particular CPU)
600 int load_unsigned_byte(Register dst, Address src);
601 int load_unsigned_short(Register dst, Address src);
602
603 // Support for fast byte/short loading with sign extension (depending on particular CPU)
604 int load_signed_byte(Register dst, Address src);
605 int load_signed_short(Register dst, Address src);
606
607 int load_signed_byte32(Register dst, Address src);
608 int load_signed_short32(Register dst, Address src);
609
610 // Support for sign-extension (hi:lo = extend_sign(lo))
611 void extend_sign(Register hi, Register lo);
612
613 // Load and store values by size and signed-ness
|