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': {