2280 Register index,
2281 Register off,
2282 Register flags,
2283 bool is_static = false) {
2284 assert_different_registers(cache, index, flags, off);
2285
2286 ByteSize cp_base_offset = ConstantPoolCache::base_offset();
2287 // Field offset
2288 __ ldr(off, Address(cache, in_bytes(cp_base_offset +
2289 ConstantPoolCacheEntry::f2_offset())));
2290 // Flags
2291 __ ldrw(flags, Address(cache, in_bytes(cp_base_offset +
2292 ConstantPoolCacheEntry::flags_offset())));
2293
2294 // klass overwrite register
2295 if (is_static) {
2296 __ ldr(obj, Address(cache, in_bytes(cp_base_offset +
2297 ConstantPoolCacheEntry::f1_offset())));
2298 const int mirror_offset = in_bytes(Klass::java_mirror_offset());
2299 __ ldr(obj, Address(obj, mirror_offset));
2300 }
2301 }
2302
2303 void TemplateTable::load_invoke_cp_cache_entry(int byte_no,
2304 Register method,
2305 Register itable_index,
2306 Register flags,
2307 bool is_invokevirtual,
2308 bool is_invokevfinal, /*unused*/
2309 bool is_invokedynamic) {
2310 // setup registers
2311 const Register cache = rscratch2;
2312 const Register index = r4;
2313 assert_different_registers(method, flags);
2314 assert_different_registers(method, cache, index);
2315 assert_different_registers(itable_index, flags);
2316 assert_different_registers(itable_index, cache, index);
2317 // determine constant pool cache field offsets
2318 assert(is_invokevirtual == (byte_no == f2_byte), "is_invokevirtual flag redundant");
2319 const int method_offset = in_bytes(
|
2280 Register index,
2281 Register off,
2282 Register flags,
2283 bool is_static = false) {
2284 assert_different_registers(cache, index, flags, off);
2285
2286 ByteSize cp_base_offset = ConstantPoolCache::base_offset();
2287 // Field offset
2288 __ ldr(off, Address(cache, in_bytes(cp_base_offset +
2289 ConstantPoolCacheEntry::f2_offset())));
2290 // Flags
2291 __ ldrw(flags, Address(cache, in_bytes(cp_base_offset +
2292 ConstantPoolCacheEntry::flags_offset())));
2293
2294 // klass overwrite register
2295 if (is_static) {
2296 __ ldr(obj, Address(cache, in_bytes(cp_base_offset +
2297 ConstantPoolCacheEntry::f1_offset())));
2298 const int mirror_offset = in_bytes(Klass::java_mirror_offset());
2299 __ ldr(obj, Address(obj, mirror_offset));
2300 __ resolve_oop_handle(obj);
2301 }
2302 }
2303
2304 void TemplateTable::load_invoke_cp_cache_entry(int byte_no,
2305 Register method,
2306 Register itable_index,
2307 Register flags,
2308 bool is_invokevirtual,
2309 bool is_invokevfinal, /*unused*/
2310 bool is_invokedynamic) {
2311 // setup registers
2312 const Register cache = rscratch2;
2313 const Register index = r4;
2314 assert_different_registers(method, flags);
2315 assert_different_registers(method, cache, index);
2316 assert_different_registers(itable_index, flags);
2317 assert_different_registers(itable_index, cache, index);
2318 // determine constant pool cache field offsets
2319 assert(is_invokevirtual == (byte_no == f2_byte), "is_invokevirtual flag redundant");
2320 const int method_offset = in_bytes(
|