Mofify vm code base so that it can be built for --arch=simmips.
Review URL: https://codereview.chromium.org//12018023
git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@17321 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/runtime/vm/assembler.h b/runtime/vm/assembler.h
index 581133a..1d24788 100644
--- a/runtime/vm/assembler.h
+++ b/runtime/vm/assembler.h
@@ -200,6 +200,8 @@
#include "vm/assembler_x64.h"
#elif defined(TARGET_ARCH_ARM)
#include "vm/assembler_arm.h"
+#elif defined(TARGET_ARCH_MIPS)
+#include "vm/assembler_mips.h"
#else
#error Unknown architecture.
#endif
diff --git a/runtime/vm/assembler_macros.h b/runtime/vm/assembler_macros.h
index 178c913..a4a4e31 100644
--- a/runtime/vm/assembler_macros.h
+++ b/runtime/vm/assembler_macros.h
@@ -11,6 +11,8 @@
#include "vm/assembler_macros_x64.h"
#elif defined(TARGET_ARCH_ARM)
#include "vm/assembler_macros_arm.h"
+#elif defined(TARGET_ARCH_MIPS)
+#include "vm/assembler_macros_mips.h"
#else
#error Unknown architecture.
#endif
diff --git a/runtime/vm/cpu_test.cc b/runtime/vm/cpu_test.cc
index 3b2b07b..6f129fe 100644
--- a/runtime/vm/cpu_test.cc
+++ b/runtime/vm/cpu_test.cc
@@ -16,6 +16,8 @@
EXPECT_STREQ("x64", CPU::Id());
#elif defined(TARGET_ARCH_ARM)
EXPECT_STREQ("arm", CPU::Id());
+#elif defined(TARGET_ARCH_MIPS)
+ EXPECT_STREQ("mips", CPU::Id());
#else
#error Architecture was not detected as supported by Dart.
#endif
diff --git a/runtime/vm/elfgen.h b/runtime/vm/elfgen.h
index cf6abfd..fb8c2f6 100644
--- a/runtime/vm/elfgen.h
+++ b/runtime/vm/elfgen.h
@@ -342,7 +342,9 @@
#endif
WriteWord(symtab, pc); // st_value
WriteWord(symtab, size); // st_size
-#if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_ARM)
+#if defined(TARGET_ARCH_IA32) || \
+ defined(TARGET_ARCH_ARM) || \
+ defined(TARGET_ARCH_MIPS)
// st_info + (st_other<<8)
WriteShort(symtab, (kSTB_EXPORTED << 4) + kSTT_FUNC);
WriteShort(symtab, kText); // st_shndx
@@ -383,7 +385,9 @@
void ElfGen::AddELFHeader(int shoff) {
ASSERT(text_vma_ != 0); // Code must have been added.
Write(&header_, kEI_MAG0_MAG3, 4); // EI_MAG0..EI_MAG3
-#if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_ARM)
+#if defined(TARGET_ARCH_IA32) || \
+ defined(TARGET_ARCH_ARM) || \
+ defined(TARGET_ARCH_MIPS)
WriteByte(&header_, kELFCLASS32); // EI_CLASS
#elif defined(TARGET_ARCH_X64)
WriteByte(&header_, kELFCLASS64); // EI_CLASS
diff --git a/runtime/vm/instructions.h b/runtime/vm/instructions.h
index e1309c6..97fe299 100644
--- a/runtime/vm/instructions.h
+++ b/runtime/vm/instructions.h
@@ -13,6 +13,8 @@
#include "vm/instructions_x64.h"
#elif defined(TARGET_ARCH_ARM)
#include "vm/instructions_arm.h"
+#elif defined(TARGET_ARCH_MIPS)
+#include "vm/instructions_mips.h"
#else
#error Unknown architecture.
#endif
diff --git a/runtime/vm/os_linux.cc b/runtime/vm/os_linux.cc
index 3c7495b..2e6d12e 100644
--- a/runtime/vm/os_linux.cc
+++ b/runtime/vm/os_linux.cc
@@ -250,7 +250,8 @@
word OS::ActivationFrameAlignment() {
#if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64)
const int kMinimumAlignment = 16;
-#elif defined(TARGET_ARCH_ARM)
+#elif defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_MIPS)
+ // TODO(regis): Verify alignment constraints on MIPS.
const int kMinimumAlignment = 8;
#else
#error Unsupported architecture.
@@ -268,7 +269,8 @@
word OS::PreferredCodeAlignment() {
#if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64)
const int kMinimumAlignment = 16;
-#elif defined(TARGET_ARCH_ARM)
+#elif defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_MIPS)
+ // TODO(regis): Verify alignment constraints on MIPS.
const int kMinimumAlignment = 16;
#else
#error Unsupported architecture.
diff --git a/runtime/vm/vm_sources.gypi b/runtime/vm/vm_sources.gypi
index f2f6eb5..a769c92 100644
--- a/runtime/vm/vm_sources.gypi
+++ b/runtime/vm/vm_sources.gypi
@@ -22,8 +22,12 @@
'assembler_macros_arm.h',
'assembler_macros_ia32.cc',
'assembler_macros_ia32.h',
+ 'assembler_macros_mips.cc',
+ 'assembler_macros_mips.h',
'assembler_macros_x64.cc',
'assembler_macros_x64.h',
+ 'assembler_mips.cc',
+ 'assembler_mips.h',
'assembler_x64.cc',
'assembler_x64.h',
'assembler_x64_test.cc',
@@ -74,6 +78,7 @@
'code_patcher_arm.cc',
'code_patcher_ia32.cc',
'code_patcher_ia32_test.cc',
+ 'code_patcher_mips.cc',
'code_patcher_x64.cc',
'code_patcher_x64_test.cc',
'compiler.h',
@@ -81,13 +86,15 @@
'compiler_stats.h',
'compiler_stats.cc',
'compiler_test.cc',
- 'constants_ia32.h',
- 'constants_x64.h',
'constants_arm.h',
+ 'constants_ia32.h',
+ 'constants_mips.h',
+ 'constants_x64.h',
'cpu.h',
- 'cpu_ia32.cc',
- 'cpu_x64.cc',
'cpu_arm.cc',
+ 'cpu_ia32.cc',
+ 'cpu_mips.cc',
+ 'cpu_x64.cc',
'cpu_test.cc',
'custom_isolate_test.cc',
'dart.cc',
@@ -102,17 +109,19 @@
'dart_entry_test.cc',
'debugger.cc',
'debugger.h',
- 'debugger_ia32.cc',
- 'debugger_x64.cc',
'debugger_arm.cc',
+ 'debugger_ia32.cc',
+ 'debugger_mips.cc',
+ 'debugger_x64.cc',
'debugger_api_impl_test.cc',
'deopt_instructions.cc',
'deopt_instructions.h',
'disassembler.cc',
'disassembler.h',
- 'disassembler_ia32.cc',
- 'disassembler_x64.cc',
'disassembler_arm.cc',
+ 'disassembler_ia32.cc',
+ 'disassembler_mips.cc',
+ 'disassembler_x64.cc',
'disassembler_test.cc',
'debuginfo.h',
'debuginfo_android.cc',
@@ -136,6 +145,7 @@
'flow_graph_compiler.h',
'flow_graph_compiler_arm.cc',
'flow_graph_compiler_ia32.cc',
+ 'flow_graph_compiler_mips.cc',
'flow_graph_compiler_x64.cc',
'flow_graph_inliner.cc',
'flow_graph_inliner.h',
@@ -179,6 +189,8 @@
'instructions_ia32.cc',
'instructions_ia32.h',
'instructions_ia32_test.cc',
+ 'instructions_mips.cc',
+ 'instructions_mips.h',
'instructions_x64.cc',
'instructions_x64.h',
'instructions_x64_test.cc',
@@ -186,12 +198,14 @@
'intermediate_language.h',
'intermediate_language_arm.cc',
'intermediate_language_ia32.cc',
+ 'intermediate_language_mips.cc',
'intermediate_language_x64.cc',
'intermediate_language_test.cc',
'intrinsifier.h',
'intrinsifier.cc',
'intrinsifier_arm.cc',
'intrinsifier_ia32.cc',
+ 'intrinsifier_mips.cc',
'intrinsifier_x64.cc',
'isolate.cc',
'isolate.h',
@@ -226,6 +240,7 @@
'object_test.cc',
'object_arm_test.cc',
'object_ia32_test.cc',
+ 'object_mips_test.cc',
'object_x64_test.cc',
'object_store.cc',
'object_store.h',
@@ -254,6 +269,7 @@
'runtime_entry.h',
'runtime_entry_arm.cc',
'runtime_entry_ia32.cc',
+ 'runtime_entry_mips.cc',
'runtime_entry_x64.cc',
'runtime_entry_test.cc',
'scanner.cc',
@@ -271,6 +287,7 @@
'stack_frame.cc',
'stack_frame_arm.cc',
'stack_frame_ia32.cc',
+ 'stack_frame_mips.cc',
'stack_frame_x64.cc',
'stack_frame.h',
'stack_frame_test.cc',
@@ -281,6 +298,7 @@
'stub_code_arm.cc',
'stub_code_ia32.cc',
'stub_code_ia32_test.cc',
+ 'stub_code_mips.cc',
'stub_code_x64.cc',
'stub_code_x64_test.cc',
'symbols.cc',
diff --git a/tools/gyp/configurations.gypi b/tools/gyp/configurations.gypi
index 852fe50..0a3574f 100644
--- a/tools/gyp/configurations.gypi
+++ b/tools/gyp/configurations.gypi
@@ -114,11 +114,7 @@
},
'ReleaseSIMARM': {
- # Should not inherit from Dart_Release (see DebugSIMARM).
- 'inherit_from': ['Dart_Base', 'Dart_simarm_Base'],
- 'defines': [
- 'NDEBUG',
- ],
+ 'inherit_from': ['Dart_Base', 'Dart_simarm_Base', 'Dart_Release'],
},
'DebugARM': {
@@ -140,11 +136,7 @@
},
'ReleaseSIMMIPS': {
- # Should not inherit from Dart_Release (see DebugSIMMIPS).
- 'inherit_from': ['Dart_Base', 'Dart_simmips_Base'],
- 'defines': [
- 'NDEBUG',
- ],
+ 'inherit_from': ['Dart_Base', 'Dart_simmips_Base', 'Dart_Release'],
},
'DebugMIPS': {