Method prologue and epilogues, add missing x86 functionality.

Enables compiling and running a number of JNI internal managed code
methods on the host.

Change-Id: I56fceb813d0cb24637bc784ba57f2d1d16911d48
diff --git a/src/compiler/CompilerIR.h b/src/compiler/CompilerIR.h
index 4f071b1..611d1df 100644
--- a/src/compiler/CompilerIR.h
+++ b/src/compiler/CompilerIR.h
@@ -134,7 +134,7 @@
     struct LIR* prev;
     struct LIR* target;
     int opcode;
-    int operands[4];            // [0..3] = [dest, src1, src2, extra]
+    int operands[5];            // [0..4] = [dest, src1, src2, extra, extra2]
     struct {
         bool isNop:1;           // LIR is optimized away
         bool pcRelFixup:1;      // May need pc-relative fixup
@@ -450,22 +450,24 @@
 std::ostream& operator<<(std::ostream& os, const OpKind& kind);
 
 enum ConditionCode {
-    kCondEq,
-    kCondNe,
-    kCondCs,
-    kCondCc,
-    kCondMi,
-    kCondPl,
-    kCondVs,
-    kCondVc,
-    kCondHi,
-    kCondLs,
-    kCondGe,
-    kCondLt,
-    kCondGt,
-    kCondLe,
-    kCondAl,
-    kCondNv,
+    kCondEq,  // equal
+    kCondNe,  // not equal
+    kCondCs,  // carry set (unsigned less than)
+    kCondUlt = kCondCs,
+    kCondCc,  // carry clear (unsigned greater than or same)
+    kCondUge = kCondCc,
+    kCondMi,  // minus
+    kCondPl,  // plus, positive or zero
+    kCondVs,  // overflow
+    kCondVc,  // no overflow
+    kCondHi,  // unsigned greater than
+    kCondLs,  // unsigned lower or same
+    kCondGe,  // signed greater than or equal
+    kCondLt,  // signed less than
+    kCondGt,  // signed greater than
+    kCondLe,  // signed less than or equal
+    kCondAl,  // always
+    kCondNv,  // never
 };
 
 enum ThrowKind {