comparison src/share/vm/oops/generateOopMap.cpp @ 1138:dd57230ba8fe

6893268: additional dynamic language related optimizations in C2 Summary: C2 needs some additional optimizations to be able to handle MethodHandle invokes and invokedynamic instructions at the best performance. Reviewed-by: kvn, never
author twisti
date Tue, 05 Jan 2010 15:21:25 +0100
parents 389049f3f393
children cff162798819
comparison
equal deleted inserted replaced
1137:97125851f396 1138:dd57230ba8fe
1554 itr->bci()); break; 1554 itr->bci()); break;
1555 case Bytecodes::_putstatic: do_field(false, true, itr->get_index_big(), itr->bci()); break; 1555 case Bytecodes::_putstatic: do_field(false, true, itr->get_index_big(), itr->bci()); break;
1556 case Bytecodes::_getfield: do_field(true, false, itr->get_index_big(), itr->bci()); break; 1556 case Bytecodes::_getfield: do_field(true, false, itr->get_index_big(), itr->bci()); break;
1557 case Bytecodes::_putfield: do_field(false, false, itr->get_index_big(), itr->bci()); break; 1557 case Bytecodes::_putfield: do_field(false, false, itr->get_index_big(), itr->bci()); break;
1558 1558
1559 case Bytecodes::_invokevirtual: 1559 case Bytecodes::_invokevirtual:
1560 case Bytecodes::_invokespecial: do_method(false, false, itr->get_index_big(), itr->bci()); break; 1560 case Bytecodes::_invokespecial: do_method(false, false, itr->get_index_big(), itr->bci()); break;
1561 case Bytecodes::_invokestatic: do_method(true, false, itr->get_index_big(), itr->bci()); break; 1561 case Bytecodes::_invokestatic: do_method(true, false, itr->get_index_big(), itr->bci()); break;
1562 case Bytecodes::_invokedynamic: do_method(true, false, itr->get_index_int(), itr->bci()); break; 1562 case Bytecodes::_invokedynamic: do_method(true, false, itr->get_index_int(), itr->bci()); break;
1563 case Bytecodes::_invokeinterface: do_method(false, true, itr->get_index_big(), itr->bci()); break; 1563 case Bytecodes::_invokeinterface: do_method(false, true, itr->get_index_big(), itr->bci()); break;
1564 case Bytecodes::_newarray: 1564 case Bytecodes::_newarray:
1565 case Bytecodes::_anewarray: pp_new_ref(vCTS, itr->bci()); break; 1565 case Bytecodes::_anewarray: pp_new_ref(vCTS, itr->bci()); break;
1566 case Bytecodes::_checkcast: do_checkcast(); break; 1566 case Bytecodes::_checkcast: do_checkcast(); break;
1567 case Bytecodes::_arraylength: 1567 case Bytecodes::_arraylength:
1568 case Bytecodes::_instanceof: pp(rCTS, vCTS); break; 1568 case Bytecodes::_instanceof: pp(rCTS, vCTS); break;
1569 case Bytecodes::_monitorenter: do_monitorenter(itr->bci()); break; 1569 case Bytecodes::_monitorenter: do_monitorenter(itr->bci()); break;
1570 case Bytecodes::_monitorexit: do_monitorexit(itr->bci()); break; 1570 case Bytecodes::_monitorexit: do_monitorexit(itr->bci()); break;
1828 } 1828 }
1829 1829
1830 1830
1831 1831
1832 void GenerateOopMap::do_ldc(int idx, int bci) { 1832 void GenerateOopMap::do_ldc(int idx, int bci) {
1833 constantPoolOop cp = method()->constants(); 1833 constantPoolOop cp = method()->constants();
1834 constantTag tag = cp->tag_at(idx); 1834 CellTypeState cts = cp->is_pointer_entry(idx) ? CellTypeState::make_line_ref(bci) : valCTS;
1835
1836 CellTypeState cts = (tag.is_string() || tag.is_unresolved_string() ||
1837 tag.is_klass() || tag.is_unresolved_klass())
1838 ? CellTypeState::make_line_ref(bci) : valCTS;
1839 ppush1(cts); 1835 ppush1(cts);
1840 } 1836 }
1841 1837
1842 void GenerateOopMap::do_multianewarray(int dims, int bci) { 1838 void GenerateOopMap::do_multianewarray(int dims, int bci) {
1843 assert(dims >= 1, "sanity check"); 1839 assert(dims >= 1, "sanity check");