More MIPS fixes. Most basic tests pass.
IntMath works now. The only basic tests that aren't working are
ReferenceMap and StackWalk.
In this change:
- Fixed argument passing for compare float/double.
- Set method stubs for long multiply/divide/remainder.
- Store gp value on stack and reload after function call to preserve
value for exception delivery.
- Fixed argument passing to artThrowStackOverflowFromCode.
- Fixed assembly for unsigned shift right long.
Change-Id: I6e77454905c3620c9cfd1c089200a8dbe530df2e
diff --git a/src/compiler/codegen/mips/FP/MipsFP.cc b/src/compiler/codegen/mips/FP/MipsFP.cc
index f121a54..437f1ed 100644
--- a/src/compiler/codegen/mips/FP/MipsFP.cc
+++ b/src/compiler/codegen/mips/FP/MipsFP.cc
@@ -197,11 +197,11 @@
oatFlushAllRegs(cUnit);
oatLockCallTemps(cUnit);
if (wide) {
- loadValueDirectWideFixed(cUnit, rlSrc1, rARG0, rARG1);
- loadValueDirectWideFixed(cUnit, rlSrc2, rARG2, rARG3);
+ loadValueDirectWideFixed(cUnit, rlSrc1, r_FARG0, r_FARG1);
+ loadValueDirectWideFixed(cUnit, rlSrc2, r_FARG2, r_FARG3);
} else {
- loadValueDirectFixed(cUnit, rlSrc1, rARG0);
- loadValueDirectFixed(cUnit, rlSrc2, rARG1);
+ loadValueDirectFixed(cUnit, rlSrc1, r_FARG0);
+ loadValueDirectFixed(cUnit, rlSrc2, r_FARG2);
}
int rTgt = loadHelper(cUnit, offset);
// NOTE: not a safepoint
diff --git a/src/compiler/codegen/mips/MipsLIR.h b/src/compiler/codegen/mips/MipsLIR.h
index 5e5147a..5077c9f 100644
--- a/src/compiler/codegen/mips/MipsLIR.h
+++ b/src/compiler/codegen/mips/MipsLIR.h
@@ -141,6 +141,8 @@
/* These are the same for both big and little endian. */
#define r_FARG0 r_F12
#define r_FARG1 r_F13
+#define r_FARG2 r_F14
+#define r_FARG3 r_F15
#define r_FRESULT0 r_F0
#define r_FRESULT1 r_F1