Make slow paths easier to write

This adds a class LIRSlowPath that allows for deferred compilation
of slow paths.  Using this object you can add code that will be
invoked out of line using a forward branch.  The intention is to
move the slow paths out of the main flow and avoid branch-over
constructs that will almost always trigger.  The forward branch
to the slow path code will be predicted false and this will
be correct most of the time.  The slow path code returns to the
instruction after the original branch using an unconditional branch.

This is used in the following opcodes: sput, sget, const-string,
check-cast, const-class.

Others will follow.

Bug: 10864890
Change-Id: I17130c5dc20d369bc6bbf50b8cf04343263e888e
5 files changed