Mercurial > hg > graal-compiler
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. |