< prev index next >

src/cpu/aarch64/vm/templateTable_aarch64.cpp

Print this page




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(


< prev index next >