420
421 fellThrough = jump_targets_do(&bcs, &GenerateOopMap::bb_mark_fct, NULL);
422
423 /* We will also mark successors of jsr's as basic block headers. */
424 switch (bytecode) {
425 case Bytecodes::_jsr:
426 assert(!fellThrough, "should not happen");
427 bb_mark_fct(this, bci + Bytecodes::length_for(bytecode), NULL);
428 break;
429 case Bytecodes::_jsr_w:
430 assert(!fellThrough, "should not happen");
431 bb_mark_fct(this, bci + Bytecodes::length_for(bytecode), NULL);
432 break;
433 }
434
435 if (possible_gc_point(&bcs))
436 _gc_points++;
437 }
438 }
439
440 inline void GenerateOopMap::set_bbmark_bit(int bci) {
441 _bb_hdr_bits.at_put(bci, true);
442 }
443
444 void GenerateOopMap::reachable_basicblock(GenerateOopMap *c, int bci, int *data) {
445 assert(bci>= 0 && bci < c->method()->code_size(), "index out of bounds");
446 BasicBlock* bb = c->get_basic_block_at(bci);
447 if (bb->is_dead()) {
448 bb->mark_as_alive();
449 *data = 1; // Mark basicblock as changed
450 }
451 }
452
453
454 void GenerateOopMap::mark_reachable_code() {
455 int change = 1; // int to get function pointers to work
456
457 // Mark entry basic block as alive and all exception handlers
458 _basic_blocks[0].mark_as_alive();
459 ExceptionTable excps(method());
460 for(int i = 0; i < excps.length(); i++) {
|
420
421 fellThrough = jump_targets_do(&bcs, &GenerateOopMap::bb_mark_fct, NULL);
422
423 /* We will also mark successors of jsr's as basic block headers. */
424 switch (bytecode) {
425 case Bytecodes::_jsr:
426 assert(!fellThrough, "should not happen");
427 bb_mark_fct(this, bci + Bytecodes::length_for(bytecode), NULL);
428 break;
429 case Bytecodes::_jsr_w:
430 assert(!fellThrough, "should not happen");
431 bb_mark_fct(this, bci + Bytecodes::length_for(bytecode), NULL);
432 break;
433 }
434
435 if (possible_gc_point(&bcs))
436 _gc_points++;
437 }
438 }
439
440 void GenerateOopMap::set_bbmark_bit(int bci) {
441 _bb_hdr_bits.at_put(bci, true);
442 }
443
444 void GenerateOopMap::reachable_basicblock(GenerateOopMap *c, int bci, int *data) {
445 assert(bci>= 0 && bci < c->method()->code_size(), "index out of bounds");
446 BasicBlock* bb = c->get_basic_block_at(bci);
447 if (bb->is_dead()) {
448 bb->mark_as_alive();
449 *data = 1; // Mark basicblock as changed
450 }
451 }
452
453
454 void GenerateOopMap::mark_reachable_code() {
455 int change = 1; // int to get function pointers to work
456
457 // Mark entry basic block as alive and all exception handlers
458 _basic_blocks[0].mark_as_alive();
459 ExceptionTable excps(method());
460 for(int i = 0; i < excps.length(); i++) {
|