2103 Label ok;
2104 push(1 << rscratch1->encoding(), sp); // cmpptr trashes rscratch1
2105 cmpptr(rheapbase, ExternalAddress((address)Universe::narrow_ptrs_base_addr()));
2106 br(Assembler::EQ, ok);
2107 stop(msg);
2108 bind(ok);
2109 pop(1 << rscratch1->encoding(), sp);
2110 }
2111 #endif
2112 }
2113 #endif
2114
2115 void MacroAssembler::resolve_jobject(Register value, Register thread, Register tmp) {
2116 Label done, not_weak;
2117 cbz(value, done); // Use NULL as-is.
2118
2119 STATIC_ASSERT(JNIHandles::weak_tag_mask == 1u);
2120 tbz(r0, 0, not_weak); // Test for jweak tag.
2121
2122 // Resolve jweak.
2123 access_load_at(T_OBJECT, IN_ROOT | ON_PHANTOM_OOP_REF, value,
2124 Address(value, -JNIHandles::weak_tag_value), tmp, thread);
2125 verify_oop(value);
2126 b(done);
2127
2128 bind(not_weak);
2129 // Resolve (untagged) jobject.
2130 access_load_at(T_OBJECT, IN_CONCURRENT_ROOT, value, Address(value, 0), tmp,
2131 thread);
2132 verify_oop(value);
2133 bind(done);
2134 }
2135
2136 void MacroAssembler::stop(const char* msg) {
2137 address ip = pc();
2138 pusha();
2139 mov(c_rarg0, (address)msg);
2140 mov(c_rarg1, (address)ip);
2141 mov(c_rarg2, sp);
2142 mov(c_rarg3, CAST_FROM_FN_PTR(address, MacroAssembler::debug64));
2143 // call(c_rarg3);
|
2103 Label ok;
2104 push(1 << rscratch1->encoding(), sp); // cmpptr trashes rscratch1
2105 cmpptr(rheapbase, ExternalAddress((address)Universe::narrow_ptrs_base_addr()));
2106 br(Assembler::EQ, ok);
2107 stop(msg);
2108 bind(ok);
2109 pop(1 << rscratch1->encoding(), sp);
2110 }
2111 #endif
2112 }
2113 #endif
2114
2115 void MacroAssembler::resolve_jobject(Register value, Register thread, Register tmp) {
2116 Label done, not_weak;
2117 cbz(value, done); // Use NULL as-is.
2118
2119 STATIC_ASSERT(JNIHandles::weak_tag_mask == 1u);
2120 tbz(r0, 0, not_weak); // Test for jweak tag.
2121
2122 // Resolve jweak.
2123 access_load_at(T_OBJECT, IN_NATIVE | ON_PHANTOM_OOP_REF, value,
2124 Address(value, -JNIHandles::weak_tag_value), tmp, thread);
2125 verify_oop(value);
2126 b(done);
2127
2128 bind(not_weak);
2129 // Resolve (untagged) jobject.
2130 access_load_at(T_OBJECT, IN_CONCURRENT_ROOT, value, Address(value, 0), tmp,
2131 thread);
2132 verify_oop(value);
2133 bind(done);
2134 }
2135
2136 void MacroAssembler::stop(const char* msg) {
2137 address ip = pc();
2138 pusha();
2139 mov(c_rarg0, (address)msg);
2140 mov(c_rarg1, (address)ip);
2141 mov(c_rarg2, sp);
2142 mov(c_rarg3, CAST_FROM_FN_PTR(address, MacroAssembler::debug64));
2143 // call(c_rarg3);
|