Mercurial > hg > truffle
comparison src/cpu/sparc/vm/templateTable_sparc.cpp @ 13010:bd3237e0e18d
8026328: Setting a breakpoint on invokedynamic crashes the JVM
Reviewed-by: jrose, roland
author | twisti |
---|---|
date | Thu, 24 Oct 2013 16:23:07 -0700 |
parents | 46c544b8fbfc |
children | 096c224171c4 8cdf3f43f63e |
comparison
equal
deleted
inserted
replaced
12968:97d400662426 | 13010:bd3237e0e18d |
---|---|
2930 __ srl(flags, ConstantPoolCacheEntry::tos_state_shift, ra); | 2930 __ srl(flags, ConstantPoolCacheEntry::tos_state_shift, ra); |
2931 // Make sure we don't need to mask flags after the above shift | 2931 // Make sure we don't need to mask flags after the above shift |
2932 ConstantPoolCacheEntry::verify_tos_state_shift(); | 2932 ConstantPoolCacheEntry::verify_tos_state_shift(); |
2933 // load return address | 2933 // load return address |
2934 { | 2934 { |
2935 const address table_addr = (is_invokeinterface || is_invokedynamic) ? | 2935 const address table_addr = (address) Interpreter::invoke_return_entry_table_for(code); |
2936 (address)Interpreter::return_5_addrs_by_index_table() : | |
2937 (address)Interpreter::return_3_addrs_by_index_table(); | |
2938 AddressLiteral table(table_addr); | 2936 AddressLiteral table(table_addr); |
2939 __ set(table, temp); | 2937 __ set(table, temp); |
2940 __ sll(ra, LogBytesPerWord, ra); | 2938 __ sll(ra, LogBytesPerWord, ra); |
2941 __ ld_ptr(Address(temp, ra), ra); | 2939 __ ld_ptr(Address(temp, ra), ra); |
2942 } | 2940 } |
2982 __ load_receiver(G4_scratch, O0_recv); // gets receiverOop | 2980 __ load_receiver(G4_scratch, O0_recv); // gets receiverOop |
2983 // receiver is in O0_recv | 2981 // receiver is in O0_recv |
2984 __ verify_oop(O0_recv); | 2982 __ verify_oop(O0_recv); |
2985 | 2983 |
2986 // get return address | 2984 // get return address |
2987 AddressLiteral table(Interpreter::return_3_addrs_by_index_table()); | 2985 AddressLiteral table(Interpreter::invoke_return_entry_table()); |
2988 __ set(table, Rtemp); | 2986 __ set(table, Rtemp); |
2989 __ srl(Rret, ConstantPoolCacheEntry::tos_state_shift, Rret); // get return type | 2987 __ srl(Rret, ConstantPoolCacheEntry::tos_state_shift, Rret); // get return type |
2990 // Make sure we don't need to mask Rret after the above shift | 2988 // Make sure we don't need to mask Rret after the above shift |
2991 ConstantPoolCacheEntry::verify_tos_state_shift(); | 2989 ConstantPoolCacheEntry::verify_tos_state_shift(); |
2992 __ sll(Rret, LogBytesPerWord, Rret); | 2990 __ sll(Rret, LogBytesPerWord, Rret); |
3024 __ null_check(O0); | 3022 __ null_check(O0); |
3025 | 3023 |
3026 __ profile_final_call(O4); | 3024 __ profile_final_call(O4); |
3027 | 3025 |
3028 // get return address | 3026 // get return address |
3029 AddressLiteral table(Interpreter::return_3_addrs_by_index_table()); | 3027 AddressLiteral table(Interpreter::invoke_return_entry_table()); |
3030 __ set(table, Rtemp); | 3028 __ set(table, Rtemp); |
3031 __ srl(Rret, ConstantPoolCacheEntry::tos_state_shift, Rret); // get return type | 3029 __ srl(Rret, ConstantPoolCacheEntry::tos_state_shift, Rret); // get return type |
3032 // Make sure we don't need to mask Rret after the above shift | 3030 // Make sure we don't need to mask Rret after the above shift |
3033 ConstantPoolCacheEntry::verify_tos_state_shift(); | 3031 ConstantPoolCacheEntry::verify_tos_state_shift(); |
3034 __ sll(Rret, LogBytesPerWord, Rret); | 3032 __ sll(Rret, LogBytesPerWord, Rret); |