670
671 void bind_literal(InlinedString& L) {
672 const char* msg = L.msg();
673 if (code()->consts()->contains((address)msg)) {
674 // The Label should not be used; avoid binding it
675 // to detect errors.
676 return;
677 }
678 AARCH64_ONLY(align(wordSize));
679 bind(L.label);
680 AbstractAssembler::emit_address((address)L.msg());
681 }
682
683 void bind_literal(InlinedMetadata& L) {
684 AARCH64_ONLY(align(wordSize));
685 bind(L.label);
686 relocate(metadata_Relocation::spec_for_immediate());
687 AbstractAssembler::emit_address((address)L.data());
688 }
689
690 void load_mirror(Register mirror, Register method, Register tmp);
691
692 // Porting layer between 32-bit ARM and AArch64
693
694 #define COMMON_INSTR_1(common_mnemonic, aarch64_mnemonic, arm32_mnemonic, arg_type) \
695 void common_mnemonic(arg_type arg) { \
696 AARCH64_ONLY(aarch64_mnemonic) NOT_AARCH64(arm32_mnemonic) (arg); \
697 }
698
699 #define COMMON_INSTR_2(common_mnemonic, aarch64_mnemonic, arm32_mnemonic, arg1_type, arg2_type) \
700 void common_mnemonic(arg1_type arg1, arg2_type arg2) { \
701 AARCH64_ONLY(aarch64_mnemonic) NOT_AARCH64(arm32_mnemonic) (arg1, arg2); \
702 }
703
704 #define COMMON_INSTR_3(common_mnemonic, aarch64_mnemonic, arm32_mnemonic, arg1_type, arg2_type, arg3_type) \
705 void common_mnemonic(arg1_type arg1, arg2_type arg2, arg3_type arg3) { \
706 AARCH64_ONLY(aarch64_mnemonic) NOT_AARCH64(arm32_mnemonic) (arg1, arg2, arg3); \
707 }
708
709 COMMON_INSTR_1(jump, br, bx, Register)
|
670
671 void bind_literal(InlinedString& L) {
672 const char* msg = L.msg();
673 if (code()->consts()->contains((address)msg)) {
674 // The Label should not be used; avoid binding it
675 // to detect errors.
676 return;
677 }
678 AARCH64_ONLY(align(wordSize));
679 bind(L.label);
680 AbstractAssembler::emit_address((address)L.msg());
681 }
682
683 void bind_literal(InlinedMetadata& L) {
684 AARCH64_ONLY(align(wordSize));
685 bind(L.label);
686 relocate(metadata_Relocation::spec_for_immediate());
687 AbstractAssembler::emit_address((address)L.data());
688 }
689
690 void resolve_oop_handle(Register result);
691 void load_mirror(Register mirror, Register method, Register tmp);
692
693 // Porting layer between 32-bit ARM and AArch64
694
695 #define COMMON_INSTR_1(common_mnemonic, aarch64_mnemonic, arm32_mnemonic, arg_type) \
696 void common_mnemonic(arg_type arg) { \
697 AARCH64_ONLY(aarch64_mnemonic) NOT_AARCH64(arm32_mnemonic) (arg); \
698 }
699
700 #define COMMON_INSTR_2(common_mnemonic, aarch64_mnemonic, arm32_mnemonic, arg1_type, arg2_type) \
701 void common_mnemonic(arg1_type arg1, arg2_type arg2) { \
702 AARCH64_ONLY(aarch64_mnemonic) NOT_AARCH64(arm32_mnemonic) (arg1, arg2); \
703 }
704
705 #define COMMON_INSTR_3(common_mnemonic, aarch64_mnemonic, arm32_mnemonic, arg1_type, arg2_type, arg3_type) \
706 void common_mnemonic(arg1_type arg1, arg2_type arg2, arg3_type arg3) { \
707 AARCH64_ONLY(aarch64_mnemonic) NOT_AARCH64(arm32_mnemonic) (arg1, arg2, arg3); \
708 }
709
710 COMMON_INSTR_1(jump, br, bx, Register)
|