Preliminary changes to allow mips target to build.
It compiles, but it doesn't work yet.
Change-Id: I2973a03bd956d8d398b9cfd1047e66fbf3ff439c
diff --git a/src/runtime.cc b/src/runtime.cc
index 60cc6f5..89477b0 100644
--- a/src/runtime.cc
+++ b/src/runtime.cc
@@ -27,6 +27,7 @@
#include "class_linker.h"
#include "class_loader.h"
#include "constants_arm.h"
+#include "constants_mips.h"
#include "constants_x86.h"
#include "debugger.h"
#include "heap.h"
@@ -1003,6 +1004,32 @@
method->SetFrameSizeInBytes(frame_size);
method->SetCoreSpillMask(core_spills);
method->SetFpSpillMask(fp_spills);
+ } else if (instruction_set == kMips) {
+ uint32_t ref_spills = (1 << art::mips::S2) | (1 << art::mips::S3) | (1 << art::mips::S4) |
+ (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;
+ 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);
} 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);