comparison src/cpu/sparc/vm/templateInterpreter_sparc.cpp @ 6266:1d7922586cf6

7023639: JSR 292 method handle invocation needs a fast path for compiled code 6984705: JSR 292 method handle creation should not go through JNI Summary: remove assembly code for JDK 7 chained method handles Reviewed-by: jrose, twisti, kvn, mhaupt Contributed-by: John Rose <john.r.rose@oracle.com>, Christian Thalinger <christian.thalinger@oracle.com>, Michael Haupt <michael.haupt@oracle.com>
author twisti
date Tue, 24 Jul 2012 10:51:00 -0700
parents 2fe087c3e814
children da91efe96a93
comparison
equal deleted inserted replaced
6241:aba91a731143 6266:1d7922586cf6
692 692
693 Label xreturn_path; 693 Label xreturn_path;
694 // Need to differentiate between igetfield, agetfield, bgetfield etc. 694 // Need to differentiate between igetfield, agetfield, bgetfield etc.
695 // because they are different sizes. 695 // because they are different sizes.
696 // Get the type from the constant pool cache 696 // Get the type from the constant pool cache
697 __ srl(G1_scratch, ConstantPoolCacheEntry::tosBits, G1_scratch); 697 __ srl(G1_scratch, ConstantPoolCacheEntry::tos_state_shift, G1_scratch);
698 // Make sure we don't need to mask G1_scratch for tosBits after the above shift 698 // Make sure we don't need to mask G1_scratch after the above shift
699 ConstantPoolCacheEntry::verify_tosBits(); 699 ConstantPoolCacheEntry::verify_tos_state_shift();
700 __ cmp(G1_scratch, atos ); 700 __ cmp(G1_scratch, atos );
701 __ br(Assembler::equal, true, Assembler::pt, xreturn_path); 701 __ br(Assembler::equal, true, Assembler::pt, xreturn_path);
702 __ delayed()->ld_ptr(Otos_i, G3_scratch, Otos_i); 702 __ delayed()->ld_ptr(Otos_i, G3_scratch, Otos_i);
703 __ cmp(G1_scratch, itos); 703 __ cmp(G1_scratch, itos);
704 __ br(Assembler::equal, true, Assembler::pt, xreturn_path); 704 __ br(Assembler::equal, true, Assembler::pt, xreturn_path);
1660 locals = Lesp_ptr + parm_words; 1660 locals = Lesp_ptr + parm_words;
1661 int delta = local_words - parm_words; 1661 int delta = local_words - parm_words;
1662 int computed_sp_adjustment = (delta > 0) ? round_to(delta, WordsPerLong) : 0; 1662 int computed_sp_adjustment = (delta > 0) ? round_to(delta, WordsPerLong) : 0;
1663 *interpreter_frame->register_addr(I5_savedSP) = (intptr_t) (fp + computed_sp_adjustment) - STACK_BIAS; 1663 *interpreter_frame->register_addr(I5_savedSP) = (intptr_t) (fp + computed_sp_adjustment) - STACK_BIAS;
1664 } else { 1664 } else {
1665 assert(caller->is_compiled_frame() || caller->is_entry_frame() || caller->is_ricochet_frame(), "only possible cases"); 1665 assert(caller->is_compiled_frame() || caller->is_entry_frame(), "only possible cases");
1666 // Don't have Lesp available; lay out locals block in the caller 1666 // Don't have Lesp available; lay out locals block in the caller
1667 // adjacent to the register window save area. 1667 // adjacent to the register window save area.
1668 // 1668 //
1669 // Compiled frames do not allocate a varargs area which is why this if 1669 // Compiled frames do not allocate a varargs area which is why this if
1670 // statement is needed. 1670 // statement is needed.