1674 __ profile_ret(vtos, Otos_i, G4_scratch);
1675
1676 __ ld_ptr(Lmethod, Method::const_offset(), G3_scratch);
1677 __ add(G3_scratch, Otos_i, G3_scratch);
1678 __ add(G3_scratch, in_bytes(ConstMethod::codes_offset()), Lbcp);
1679 __ dispatch_next(vtos, 0, true);
1680 }
1681
1682
1683 void TemplateTable::wide_ret() {
1684 transition(vtos, vtos);
1685 locals_index_wide(G3_scratch);
1686 __ access_local_returnAddress(G3_scratch, Otos_i);
1687 // Otos_i contains the bci, compute the bcp from that
1688
1689 __ profile_ret(vtos, Otos_i, G4_scratch);
1690
1691 __ ld_ptr(Lmethod, Method::const_offset(), G3_scratch);
1692 __ add(G3_scratch, Otos_i, G3_scratch);
1693 __ add(G3_scratch, in_bytes(ConstMethod::codes_offset()), Lbcp);
1694 __ dispatch_next(vtos);
1695 }
1696
1697
1698 void TemplateTable::tableswitch() {
1699 transition(itos, vtos);
1700 Label default_case, continue_execution;
1701
1702 // align bcp
1703 __ add(Lbcp, BytesPerInt, O1);
1704 __ and3(O1, -BytesPerInt, O1);
1705 // load lo, hi
1706 __ ld(O1, 1 * BytesPerInt, O2); // Low Byte
1707 __ ld(O1, 2 * BytesPerInt, O3); // High Byte
1708 // Sign extend the 32 bits
1709 __ sra ( Otos_i, 0, Otos_i );
1710
1711 // check against lo & hi
1712 __ cmp( Otos_i, O2);
1713 __ br( Assembler::less, false, Assembler::pn, default_case);
1714 __ delayed()->cmp( Otos_i, O3 );
|
1674 __ profile_ret(vtos, Otos_i, G4_scratch);
1675
1676 __ ld_ptr(Lmethod, Method::const_offset(), G3_scratch);
1677 __ add(G3_scratch, Otos_i, G3_scratch);
1678 __ add(G3_scratch, in_bytes(ConstMethod::codes_offset()), Lbcp);
1679 __ dispatch_next(vtos, 0, true);
1680 }
1681
1682
1683 void TemplateTable::wide_ret() {
1684 transition(vtos, vtos);
1685 locals_index_wide(G3_scratch);
1686 __ access_local_returnAddress(G3_scratch, Otos_i);
1687 // Otos_i contains the bci, compute the bcp from that
1688
1689 __ profile_ret(vtos, Otos_i, G4_scratch);
1690
1691 __ ld_ptr(Lmethod, Method::const_offset(), G3_scratch);
1692 __ add(G3_scratch, Otos_i, G3_scratch);
1693 __ add(G3_scratch, in_bytes(ConstMethod::codes_offset()), Lbcp);
1694 __ dispatch_next(vtos, 0, true);
1695 }
1696
1697
1698 void TemplateTable::tableswitch() {
1699 transition(itos, vtos);
1700 Label default_case, continue_execution;
1701
1702 // align bcp
1703 __ add(Lbcp, BytesPerInt, O1);
1704 __ and3(O1, -BytesPerInt, O1);
1705 // load lo, hi
1706 __ ld(O1, 1 * BytesPerInt, O2); // Low Byte
1707 __ ld(O1, 2 * BytesPerInt, O3); // High Byte
1708 // Sign extend the 32 bits
1709 __ sra ( Otos_i, 0, Otos_i );
1710
1711 // check against lo & hi
1712 __ cmp( Otos_i, O2);
1713 __ br( Assembler::less, false, Assembler::pn, default_case);
1714 __ delayed()->cmp( Otos_i, O3 );
|