2870 bind(skip_literal); 2871 return ret_addr_offset; 2872 } 2873 #endif 2874 Label ret_addr; 2875 InlinedAddress address_literal(target); 2876 #ifdef AARCH64 2877 ldr_literal(Rtemp, address_literal); 2878 adr(LR, ret_addr); 2879 br(Rtemp); 2880 #else 2881 adr(LR, ret_addr); 2882 ldr_literal(PC, address_literal); 2883 #endif 2884 bind_literal(address_literal); 2885 bind(ret_addr); 2886 } 2887 return offset(); 2888 } 2889 2890 2891 void MacroAssembler::load_mirror(Register mirror, Register method, Register tmp) { 2892 const int mirror_offset = in_bytes(Klass::java_mirror_offset()); 2893 ldr(tmp, Address(method, Method::const_offset())); 2894 ldr(tmp, Address(tmp, ConstMethod::constants_offset())); 2895 ldr(tmp, Address(tmp, ConstantPool::pool_holder_offset_in_bytes())); 2896 ldr(mirror, Address(tmp, mirror_offset)); 2897 } 2898 2899 /////////////////////////////////////////////////////////////////////////////// 2900 2901 // Compressed pointers 2902 2903 #ifdef AARCH64 2904 2905 void MacroAssembler::load_klass(Register dst_klass, Register src_oop) { 2906 if (UseCompressedClassPointers) { 2907 ldr_w(dst_klass, Address(src_oop, oopDesc::klass_offset_in_bytes())); 2908 decode_klass_not_null(dst_klass); 2909 } else { 2910 ldr(dst_klass, Address(src_oop, oopDesc::klass_offset_in_bytes())); 2911 } 2912 } 2913 2914 #else 2915 2916 void MacroAssembler::load_klass(Register dst_klass, Register src_oop, AsmCondition cond) { 2917 ldr(dst_klass, Address(src_oop, oopDesc::klass_offset_in_bytes()), cond); | 2870 bind(skip_literal); 2871 return ret_addr_offset; 2872 } 2873 #endif 2874 Label ret_addr; 2875 InlinedAddress address_literal(target); 2876 #ifdef AARCH64 2877 ldr_literal(Rtemp, address_literal); 2878 adr(LR, ret_addr); 2879 br(Rtemp); 2880 #else 2881 adr(LR, ret_addr); 2882 ldr_literal(PC, address_literal); 2883 #endif 2884 bind_literal(address_literal); 2885 bind(ret_addr); 2886 } 2887 return offset(); 2888 } 2889 2890 // ((OopHandle)result).resolve(); 2891 void MacroAssembler::resolve_oop_handle(Register result) { 2892 // OopHandle::resolve is an indirection. 2893 ldr(result, Address(result, 0)); 2894 } 2895 2896 void MacroAssembler::load_mirror(Register mirror, Register method, Register tmp) { 2897 const int mirror_offset = in_bytes(Klass::java_mirror_offset()); 2898 ldr(tmp, Address(method, Method::const_offset())); 2899 ldr(tmp, Address(tmp, ConstMethod::constants_offset())); 2900 ldr(tmp, Address(tmp, ConstantPool::pool_holder_offset_in_bytes())); 2901 ldr(mirror, Address(tmp, mirror_offset)); 2902 } 2903 2904 2905 /////////////////////////////////////////////////////////////////////////////// 2906 2907 // Compressed pointers 2908 2909 #ifdef AARCH64 2910 2911 void MacroAssembler::load_klass(Register dst_klass, Register src_oop) { 2912 if (UseCompressedClassPointers) { 2913 ldr_w(dst_klass, Address(src_oop, oopDesc::klass_offset_in_bytes())); 2914 decode_klass_not_null(dst_klass); 2915 } else { 2916 ldr(dst_klass, Address(src_oop, oopDesc::klass_offset_in_bytes())); 2917 } 2918 } 2919 2920 #else 2921 2922 void MacroAssembler::load_klass(Register dst_klass, Register src_oop, AsmCondition cond) { 2923 ldr(dst_klass, Address(src_oop, oopDesc::klass_offset_in_bytes()), cond); |