// ------------------------------------------------------------------ // ciBytecodeStream::get_field_index // // If this is a field access bytecode, get the constant pool // index of the referenced field. int ciBytecodeStream::get_field_index() { assert(cur_bc() == Bytecodes::_getfield || cur_bc() == Bytecodes::_putfield || cur_bc() == Bytecodes::_getstatic || cur_bc() == Bytecodes::_putstatic, "wrong bc"); return get_index_u2_cpcache(); }
// ------------------------------------------------------------------ // ciBytecodeStream::get_constant_raw_index // // If this bytecode is one of the ldc variants, get the index of the // referenced constant. int ciBytecodeStream::get_constant_raw_index() const { // work-alike for Bytecode_loadconstant::raw_index() switch (cur_bc()) { case Bytecodes::_ldc: return get_index_u1(); case Bytecodes::_ldc_w: case Bytecodes::_ldc2_w: return get_index_u2(); default: ShouldNotReachHere(); return 0; } }
void assert_index_size(int required_size) const { #ifdef ASSERT int isize = instruction_size() - (is_wide() ? 1 : 0) - 1; if (isize == 2 && cur_bc() == Bytecodes::_iinc) isize = 1; else if (isize <= 2) ; // no change else if (has_giant_index()) isize = 4; else isize = 2; assert(isize = required_size, "wrong index size"); #endif }
// ------------------------------------------------------------------ // ciBytecodeStream::get_klass_index // // If this bytecodes references a klass, return the index of the // referenced klass. int ciBytecodeStream::get_klass_index() const { switch(cur_bc()) { case Bytecodes::_ldc: return get_index_u1(); case Bytecodes::_ldc_w: case Bytecodes::_ldc2_w: case Bytecodes::_checkcast: case Bytecodes::_instanceof: case Bytecodes::_anewarray: case Bytecodes::_multianewarray: case Bytecodes::_new: case Bytecodes::_newarray: return get_index_u2(); default: ShouldNotReachHere(); return 0; } }
bool has_giant_index() const { return (cur_bc() == Bytecodes::_invokedynamic); }