Lines Matching refs:bci

45    ChangeItem(int bci) { _bci = bci; }
54 int bci() { return _bci; }
57 virtual bool adjust(int bci, int delta) { return false; }
64 int _new_ilen; // New length of instruction at bci
67 ChangeWiden(int bci, int new_ilen, u_char* inst_buffer) : ChangeItem(bci) {
73 bool handle_code_change(Relocator *r) { return r->handle_widen(bci(), _new_ilen, _inst_buffer); };
77 void print() { tty->print_cr("ChangeWiden. bci: %d New_ilen: %d", bci(), _new_ilen); }
81 int _delta; // New length of instruction at bci
83 ChangeJumpWiden(int bci, int delta) : ChangeItem(bci) { _delta = delta; }
86 bool handle_code_change(Relocator *r) { return r->handle_jump_widen(bci(), _delta); };
90 // If the bci matches, adjust the delta in the change jump request.
92 if (bci() == jump_bci) {
102 void print() { tty->print_cr("ChangeJumpWiden. bci: %d Delta: %d", bci(), _delta); }
109 ChangeSwitchPad(int bci, int padding, bool is_lookup_switch) : ChangeItem(bci) {
115 bool handle_code_change(Relocator *r) { return r->handle_switch_pad(bci(), _padding, _is_lookup_switch); };
121 void print() { tty->print_cr("ChangeSwitchPad. bci: %d Padding: %d IsLookupSwitch: %d", bci(), _padding, _is_lookup_switch); }
142 // size is the new size of the instruction at bci. Hence, if size is less than the current
144 methodHandle Relocator::insert_space_at(int bci, int size, u_char inst_buffer[], TRAPS) {
146 _changes->push(new ChangeWiden(bci, size, inst_buffer));
149 tty->print_cr("Space at: %d Size: %d", bci, size);
212 int Relocator::rc_instr_len(int bci) {
213 Bytecodes::Code bc= code_at(bci);
222 int pad = get_orig_switch_pad(bci, is_opcode_lookupswitch(bc));
224 return instruction_length_at(bci);
229 int lo = int_at(bci + 1 + pad + 4 * 1);
230 int hi = int_at(bci + 1 + pad + 4 * 2);
237 int npairs = int_at(bci + 1 + pad + 4 * 1);
245 return instruction_length_at(bci);
250 int Relocator::get_orig_switch_pad(int bci, bool is_lookup_switch) {
255 if (csp->is_lookup_switch() == is_lookup_switch && csp->bci() == bci) {
268 void Relocator::push_jump_widen(int bci, int delta, int new_delta) {
271 if (ci->adjust(bci, delta)) return;
273 _changes->push(new ChangeJumpWiden(bci, new_delta));
281 void Relocator::change_jump(int bci, int offset, bool is_short, int break_bci, int delta) {
283 int targ = bci + bci_delta;
285 if ((bci <= break_bci && targ > break_bci) ||
286 (bci > break_bci && targ <= break_bci)) {
294 push_jump_widen(bci, delta, new_delta);
307 int bci = 0;
310 while (bci < code_length()) {
311 switch (bc= code_at(bci)) {
330 change_jump(bci, bci+1, true, break_bci, delta);
334 change_jump(bci, bci+1, false, break_bci, delta);
340 int recPad = get_orig_switch_pad(bci, (bc != Bytecodes::_tableswitch));
341 int oldPad = (recPad != -1) ? recPad : align(bci+1) - (bci+1);
342 if (bci > break_bci) {
343 int new_bci = bci + delta;
348 _changes->push(new ChangeSwitchPad(bci, oldPad, (bc != Bytecodes::_tableswitch)));
356 change_jump(bci, bci +1 + oldPad, false, break_bci, delta);
358 int lo = int_at(bci + 1 + oldPad + 4 * 1);
359 int hi = int_at(bci + 1 + oldPad + 4 * 2);
362 change_jump(bci, bci +1 + oldPad + 4*(k+3), false, break_bci, delta);
364 // Special next-bci calculation here...
365 bci += 1 + oldPad + (n+3)*4;
371 change_jump(bci, bci +1 + oldPad, false, break_bci, delta);
373 int npairs = int_at(bci + 1 + oldPad + 4 * 1);
375 change_jump(bci, bci + 1 + oldPad + 4*(2 + 2*k + 1), false, break_bci, delta);
377 /* Special next-bci calculation here... */
378 bci += 1 + oldPad + (2 + (npairs*2))*4;
388 bci += rc_instr_len(bci);
394 void Relocator::adjust_exception_table(int bci, int delta) {
397 if (table.start_pc(index) > bci) {
400 } else if (bci < table.end_pc(index)) {
403 if (table.handler_pc(index) > bci)
409 // The width of instruction at "bci" is changing by "delta". Adjust the line number table.
410 void Relocator::adjust_line_no_table(int bci, int delta) {
415 int adjustment = (reader.bci() > bci) ? delta : 0;
416 writer.write_pair(reader.bci() + adjustment, reader.line());
425 // The width of instruction at "bci" is changing by "delta". Adjust the local variable table.
426 void Relocator::adjust_local_var_table(int bci, int delta) {
432 if (current_bci > bci) {
436 if (current_bci + current_length > bci) {
463 // The width of instruction at "bci" is changing by "delta". Adjust the stack
465 void Relocator::adjust_stack_map_table(int bci, int delta) {
481 if (!offset_adjusted && bci_iter > bci) {
525 // check and update any Uninitialized type's bci (no matter where it is).
530 if (types->is_uninitialized() && types->bci() > bci) {
531 types->set_bci(types->bci() + delta);
543 if (types->is_uninitialized() && types->bci() > bci) {
544 types->set_bci(types->bci() + delta);
587 // The instruction at "bci", whose size is "ilen", is changing size by
590 bool Relocator::relocate_code(int bci, int ilen, int delta) {
591 int next_bci = bci + ilen;
602 change_jumps(bci, delta);
609 memcpy(_overwrite, addr_at(bci + ilen + delta), -delta);
615 adjust_exception_table(bci, delta);
617 adjust_line_no_table(bci, delta);
619 adjust_local_var_table(bci, delta);
622 adjust_stack_map_table(bci, delta);
627 ci->relocate(bci, delta);
631 notify(bci, delta, code_length());
637 bool Relocator::handle_widen(int bci, int new_ilen, u_char inst_buffer[]) {
638 int ilen = rc_instr_len(bci);
639 if (!relocate_code(bci, ilen, new_ilen - ilen))
644 code_at_put(bci + k, (Bytecodes::Code)inst_buffer[k]);
651 bool Relocator::handle_jump_widen(int bci, int delta) {
652 int ilen = rc_instr_len(bci);
654 Bytecodes::Code bc = code_at(bci);
676 assert (short_at(bci+1) != ilen+goto_length, "if relocation already handled");
686 if (!relocate_code(bci, 3, /*delta*/add_bci)) return false;
689 short_at_put(bci + 1, ilen + goto_length);
691 int cbci = bci + ilen;
711 if (!relocate_code(bci, 3, 2)) return false;
713 code_at_put(bci, Bytecodes::_goto_w);
715 code_at_put(bci, Bytecodes::_jsr_w);
719 int_at_put(bci + 1, delta);
729 bool Relocator::handle_switch_pad(int bci, int old_pad, bool is_lookup_switch) {
730 int ilen = rc_instr_len(bci);
731 int new_pad = align(bci+1) - (bci+1);
736 int low = int_at(bci+1+old_pad+4);
737 int high = int_at(bci+1+old_pad+8);
740 int npairs = int_at(bci+1+old_pad+4);
751 if (!relocate_code(bci, ilen, pad_delta)) return false;
755 memmove(addr_at(bci + 1 + new_pad),
756 addr_at(bci + 1 + old_pad),
758 memmove(addr_at(bci + 1 + new_pad + len*4 + pad_delta),
763 memmove(addr_at(bci +1 + new_pad),
764 addr_at(bci +1 + old_pad),
766 memset(addr_at(bci + 1), 0, new_pad); // pad must be 0