--- old/src/share/vm/opto/output.cpp 2014-02-20 15:52:40.000000000 -0800 +++ new/src/share/vm/opto/output.cpp 2014-02-20 15:52:40.000000000 -0800 @@ -499,9 +499,21 @@ if (bnum > i) { // adjust following block's offset offset -= adjust_block_start; } + + // This block can be a loop header, account for the padding + // in the previous block. + int prev_block_loop_pad = block->code_alignment() - relocInfo::addr_unit(); + if (i > 0 && prev_block_loop_pad > 0) { + assert(br_offs >= prev_block_loop_pad, "Should have at least a padding on top"); + } else { + // First block or not a loop + prev_block_loop_pad = 0; + } // In the following code a nop could be inserted before // the branch which will increase the backward distance. - bool needs_padding = ((uint)br_offs == last_may_be_short_branch_adr); + bool needs_padding = ((uint)(br_offs - prev_block_loop_pad) == last_may_be_short_branch_adr); + assert(!needs_padding || jmp_offset[i] == 0, "padding only branches at the beginning of block"); + if (needs_padding && offset <= 0) offset -= nop_size;