comparison src/cpu/sparc/vm/templateTable_sparc.cpp @ 3279:08ccee2c4dbf

6993078: JSR 292 too many pushes: Lesp points into register window Reviewed-by: kvn, never
author twisti
date Thu, 21 Apr 2011 00:25:40 -0700
parents 38fea01eb669
children 286c498ae0d4
comparison
equal deleted inserted replaced
3278:66b0e2371912 3279:08ccee2c4dbf
3287 3287
3288 load_invoke_cp_cache_entry(byte_no, G5_callsite, noreg, Rret, 3288 load_invoke_cp_cache_entry(byte_no, G5_callsite, noreg, Rret,
3289 /*virtual*/ false, /*vfinal*/ false, /*indy*/ true); 3289 /*virtual*/ false, /*vfinal*/ false, /*indy*/ true);
3290 __ mov(SP, O5_savedSP); // record SP that we wanted the callee to restore 3290 __ mov(SP, O5_savedSP); // record SP that we wanted the callee to restore
3291 3291
3292 __ verify_oop(G5_callsite);
3293
3294 // profile this call 3292 // profile this call
3295 __ profile_call(O4); 3293 __ profile_call(O4);
3296 3294
3297 // get return address 3295 // get return address
3298 AddressLiteral table(Interpreter::return_5_addrs_by_index_table()); 3296 AddressLiteral table(Interpreter::return_5_addrs_by_index_table());
3301 // Make sure we don't need to mask Rret for tosBits after the above shift 3299 // Make sure we don't need to mask Rret for tosBits after the above shift
3302 ConstantPoolCacheEntry::verify_tosBits(); 3300 ConstantPoolCacheEntry::verify_tosBits();
3303 __ sll(Rret, LogBytesPerWord, Rret); 3301 __ sll(Rret, LogBytesPerWord, Rret);
3304 __ ld_ptr(Rtemp, Rret, Rret); // get return address 3302 __ ld_ptr(Rtemp, Rret, Rret); // get return address
3305 3303
3304 __ verify_oop(G5_callsite);
3306 __ load_heap_oop(G5_callsite, __ delayed_value(java_lang_invoke_CallSite::target_offset_in_bytes, Rscratch), G3_method_handle); 3305 __ load_heap_oop(G5_callsite, __ delayed_value(java_lang_invoke_CallSite::target_offset_in_bytes, Rscratch), G3_method_handle);
3307 __ null_check(G3_method_handle); 3306 __ null_check(G3_method_handle);
3307 __ verify_oop(G3_method_handle);
3308 3308
3309 // Adjust Rret first so Llast_SP can be same as Rret 3309 // Adjust Rret first so Llast_SP can be same as Rret
3310 __ add(Rret, -frame::pc_return_offset, O7); 3310 __ add(Rret, -frame::pc_return_offset, O7);
3311 __ add(Lesp, BytesPerWord, Gargs); // setup parameter pointer 3311 __ add(Lesp, BytesPerWord, Gargs); // setup parameter pointer
3312 __ jump_to_method_handle_entry(G3_method_handle, Rtemp, /* emit_delayed_nop */ false); 3312 __ jump_to_method_handle_entry(G3_method_handle, Rtemp, /* emit_delayed_nop */ false);