2365 // The Rcache and index registers must be set before call.
2366 // Index is already a byte offset, don't shift!
2367 void TemplateTable::load_field_cp_cache_entry(Register obj,
2368 Register cache,
2369 Register index,
2370 Register off,
2371 Register flags,
2372 bool is_static = false) {
2373 assert_different_registers(cache, index, flags, off);
2374 ByteSize cp_base_offset = ConstantPoolCache::base_offset();
2375
2376 // Field offset
2377 __ mem2reg_opt(off, Address(cache, index, cp_base_offset + ConstantPoolCacheEntry::f2_offset()));
2378 // Flags. Must load 64 bits.
2379 __ mem2reg_opt(flags, Address(cache, index, cp_base_offset + ConstantPoolCacheEntry::flags_offset()));
2380
2381 // klass overwrite register
2382 if (is_static) {
2383 __ mem2reg_opt(obj, Address(cache, index, cp_base_offset + ConstantPoolCacheEntry::f1_offset()));
2384 __ mem2reg_opt(obj, Address(obj, Klass::java_mirror_offset()));
2385 }
2386 }
2387
2388 void TemplateTable::load_invoke_cp_cache_entry(int byte_no,
2389 Register method,
2390 Register itable_index,
2391 Register flags,
2392 bool is_invokevirtual,
2393 bool is_invokevfinal, // unused
2394 bool is_invokedynamic) {
2395 BLOCK_COMMENT("load_invoke_cp_cache_entry {");
2396 // Setup registers.
2397 const Register cache = Z_ARG1;
2398 const Register cpe_offset= flags;
2399 const ByteSize base_off = ConstantPoolCache::base_offset();
2400 const ByteSize f1_off = ConstantPoolCacheEntry::f1_offset();
2401 const ByteSize f2_off = ConstantPoolCacheEntry::f2_offset();
2402 const ByteSize flags_off = ConstantPoolCacheEntry::flags_offset();
2403 const int method_offset = in_bytes(base_off + ((byte_no == f2_byte) ? f2_off : f1_off));
2404 const int flags_offset = in_bytes(base_off + flags_off);
|
2365 // The Rcache and index registers must be set before call.
2366 // Index is already a byte offset, don't shift!
2367 void TemplateTable::load_field_cp_cache_entry(Register obj,
2368 Register cache,
2369 Register index,
2370 Register off,
2371 Register flags,
2372 bool is_static = false) {
2373 assert_different_registers(cache, index, flags, off);
2374 ByteSize cp_base_offset = ConstantPoolCache::base_offset();
2375
2376 // Field offset
2377 __ mem2reg_opt(off, Address(cache, index, cp_base_offset + ConstantPoolCacheEntry::f2_offset()));
2378 // Flags. Must load 64 bits.
2379 __ mem2reg_opt(flags, Address(cache, index, cp_base_offset + ConstantPoolCacheEntry::flags_offset()));
2380
2381 // klass overwrite register
2382 if (is_static) {
2383 __ mem2reg_opt(obj, Address(cache, index, cp_base_offset + ConstantPoolCacheEntry::f1_offset()));
2384 __ mem2reg_opt(obj, Address(obj, Klass::java_mirror_offset()));
2385 __ resolve_oop_handle(obj);
2386 }
2387 }
2388
2389 void TemplateTable::load_invoke_cp_cache_entry(int byte_no,
2390 Register method,
2391 Register itable_index,
2392 Register flags,
2393 bool is_invokevirtual,
2394 bool is_invokevfinal, // unused
2395 bool is_invokedynamic) {
2396 BLOCK_COMMENT("load_invoke_cp_cache_entry {");
2397 // Setup registers.
2398 const Register cache = Z_ARG1;
2399 const Register cpe_offset= flags;
2400 const ByteSize base_off = ConstantPoolCache::base_offset();
2401 const ByteSize f1_off = ConstantPoolCacheEntry::f1_offset();
2402 const ByteSize f2_off = ConstantPoolCacheEntry::f2_offset();
2403 const ByteSize flags_off = ConstantPoolCacheEntry::flags_offset();
2404 const int method_offset = in_bytes(base_off + ((byte_no == f2_byte) ? f2_off : f1_off));
2405 const int flags_offset = in_bytes(base_off + flags_off);
|