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