Mercurial > hg > graal-jvmci-8
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"); |