Fixes to make jni_compiler_test work on MIPS.
Fixed the jni compiler in numerous ways:
- Added NOP for delay slot of branches/jumps
- Made calling convention match registers pushed by stubs
- Fixes to assembly and added noreorder directive
Change-Id: I32bc55985fbbc58b5b5358149766b8738b3ac955
diff --git a/src/runtime.cc b/src/runtime.cc
index 9983c7d..b4dfcfe 100644
--- a/src/runtime.cc
+++ b/src/runtime.cc
@@ -1009,27 +1009,13 @@
(1 << art::mips::S5) | (1 << art::mips::S6) | (1 << art::mips::S7) |
(1 << art::mips::FP);
uint32_t arg_spills = (1 << art::mips::A1) | (1 << art::mips::A2) | (1 << art::mips::A3);
- uint32_t all_spills = (1 << art::mips::S1) | (1 << art::mips::SP);
uint32_t core_spills = ref_spills | (type == kRefsAndArgs ? arg_spills : 0) |
- (type == kSaveAll ? all_spills : 0) | (1 << art::mips::RA);
- uint32_t fp_all_spills = (1 << art::mips::F0) | (1 << art::mips::F1) | (1 << art::mips::F2) |
- (1 << art::mips::F3) | (1 << art::mips::F4) | (1 << art::mips::F5) |
- (1 << art::mips::F6) | (1 << art::mips::F7) | (1 << art::mips::F8) |
- (1 << art::mips::F9) | (1 << art::mips::F10) | (1 << art::mips::F11) |
- (1 << art::mips::F12) | (1 << art::mips::F13) | (1 << art::mips::F14) |
- (1 << art::mips::F15) | (1 << art::mips::F16) | (1 << art::mips::F17) |
- (1 << art::mips::F18) | (1 << art::mips::F19) | (1 << art::mips::F20) |
- (1 << art::mips::F21) | (1 << art::mips::F22) | (1 << art::mips::F23) |
- (1 << art::mips::F24) | (1 << art::mips::F25) | (1 << art::mips::F26) |
- (1 << art::mips::F27) | (1 << art::mips::F28) | (1 << art::mips::F29) |
- (1 << art::mips::F30) | (1 << art::mips::F31);
- uint32_t fp_spills = type == kSaveAll ? fp_all_spills : 0;
+ (1 << art::mips::RA);
size_t frame_size = RoundUp((__builtin_popcount(core_spills) /* gprs */ +
- __builtin_popcount(fp_spills) /* fprs */ +
1 /* Method* */) * kPointerSize, kStackAlignment);
method->SetFrameSizeInBytes(frame_size);
method->SetCoreSpillMask(core_spills);
- method->SetFpSpillMask(fp_spills);
+ method->SetFpSpillMask(0);
} else if (instruction_set == kX86) {
uint32_t ref_spills = (1 << art::x86::EBP) | (1 << art::x86::ESI) | (1 << art::x86::EDI);
uint32_t arg_spills = (1 << art::x86::ECX) | (1 << art::x86::EDX) | (1 << art::x86::EBX);