--- a/hotspot/src/share/vm/opto/output.cpp Tue Nov 26 18:38:19 2013 -0800
+++ b/hotspot/src/share/vm/opto/output.cpp Wed Nov 27 16:16:21 2013 -0800
@@ -1459,6 +1459,12 @@
// Intel all the time, with add-to-memory kind of opcodes.
previous_offset = current_offset;
}
+
+ // Not an else-if!
+ // If this is a trap based cmp then add its offset to the list.
+ if (mach->is_TrapBasedCheckNode()) {
+ inct_starts[inct_cnt++] = current_offset;
+ }
}
// Verify that there is sufficient space remaining
@@ -1725,6 +1731,12 @@
_inc_table.append(inct_starts[inct_cnt++], blk_labels[block_num].loc_pos());
continue;
}
+ // Handle implicit exception table updates: trap instructions.
+ if (n->is_Mach() && n->as_Mach()->is_TrapBasedCheckNode()) {
+ uint block_num = block->non_connector_successor(0)->_pre_order;
+ _inc_table.append(inct_starts[inct_cnt++], blk_labels[block_num].loc_pos());
+ continue;
+ }
} // End of for all blocks fill in exception table entries
}