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 {