339 |
339 |
340 // Basicblock info |
340 // Basicblock info |
341 BasicBlock * _basic_blocks; // Array of basicblock info |
341 BasicBlock * _basic_blocks; // Array of basicblock info |
342 int _gc_points; |
342 int _gc_points; |
343 int _bb_count; |
343 int _bb_count; |
344 uintptr_t * _bb_hdr_bits; |
344 BitMap _bb_hdr_bits; |
345 |
345 |
346 // Basicblocks methods |
346 // Basicblocks methods |
347 void initialize_bb (); |
347 void initialize_bb (); |
348 void mark_bbheaders_and_count_gc_points(); |
348 void mark_bbheaders_and_count_gc_points(); |
349 bool is_bb_header (int bci) const { return (_bb_hdr_bits[bci >> LogBitsPerWord] & ((uintptr_t)1 << (bci & (BitsPerWord-1)))) != 0; } |
349 bool is_bb_header (int bci) const { |
|
350 return _bb_hdr_bits.at(bci); |
|
351 } |
350 int gc_points () const { return _gc_points; } |
352 int gc_points () const { return _gc_points; } |
351 int bb_count () const { return _bb_count; } |
353 int bb_count () const { return _bb_count; } |
352 void set_bbmark_bit (int bci); |
354 void set_bbmark_bit (int bci) { |
353 void clear_bbmark_bit (int bci); |
355 _bb_hdr_bits.at_put(bci, true); |
|
356 } |
|
357 void clear_bbmark_bit (int bci) { |
|
358 _bb_hdr_bits.at_put(bci, false); |
|
359 } |
354 BasicBlock * get_basic_block_at (int bci) const; |
360 BasicBlock * get_basic_block_at (int bci) const; |
355 BasicBlock * get_basic_block_containing (int bci) const; |
361 BasicBlock * get_basic_block_containing (int bci) const; |
356 void interp_bb (BasicBlock *bb); |
362 void interp_bb (BasicBlock *bb); |
357 void restore_state (BasicBlock *bb); |
363 void restore_state (BasicBlock *bb); |
358 int next_bb_start_pc (BasicBlock *bb); |
364 int next_bb_start_pc (BasicBlock *bb); |