Index: runtime/vm/object_test.cc |
=================================================================== |
--- runtime/vm/object_test.cc (revision 21676) |
+++ runtime/vm/object_test.cc (working copy) |
@@ -9,6 +9,7 @@ |
#include "vm/isolate.h" |
#include "vm/object.h" |
#include "vm/object_store.h" |
+#include "vm/simulator.h" |
#include "vm/symbols.h" |
#include "vm/unit_test.h" |
@@ -2236,8 +2237,10 @@ |
} |
-// only ia32 and x64 can run execution tests. |
-#if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64) |
+// Only ia32, x64, and arm can run execution tests. |
+#if defined(TARGET_ARCH_IA32) || \ |
+ defined(TARGET_ARCH_X64) || \ |
+ defined(TARGET_ARCH_ARM) |
static Function* CreateFunction(const char* name) { |
const String& class_name = String::Handle(Symbols::New("ownerClass")); |
@@ -2259,9 +2262,16 @@ |
Code& code = Code::Handle(Code::FinalizeCode( |
*CreateFunction("Test_Code"), &_assembler_)); |
Instructions& instructions = Instructions::Handle(code.instructions()); |
- typedef int (*IncrementCode)(); |
- EXPECT_EQ(2, reinterpret_cast<IncrementCode>(instructions.EntryPoint())()); |
uword entry_point = instructions.EntryPoint(); |
+ intptr_t retval = 0; |
+#if defined(USING_SIMULATOR) |
+ retval = bit_copy<intptr_t, int64_t>(Simulator::Current()->Call( |
+ static_cast<int32_t>(entry_point), 0, 0, 0, 0)); |
+#else |
+ typedef intptr_t (*IncrementCode)(); |
+ retval = reinterpret_cast<IncrementCode>(entry_point)(); |
+#endif |
+ EXPECT_EQ(2, retval); |
EXPECT_EQ(instructions.raw(), Instructions::FromEntryPoint(entry_point)); |
} |
@@ -2276,8 +2286,14 @@ |
Code& code = Code::Handle(Code::FinalizeCode( |
*CreateFunction("Test_EmbedStringInCode"), &_assembler_)); |
Instructions& instructions = Instructions::Handle(code.instructions()); |
+ uword retval = 0; |
+#if defined(USING_SIMULATOR) |
+ retval = bit_copy<uword, int64_t>(Simulator::Current()->Call( |
+ static_cast<int32_t>(instructions.EntryPoint()), 0, 0, 0, 0)); |
+#else |
typedef uword (*EmbedStringCode)(); |
- uword retval = reinterpret_cast<EmbedStringCode>(instructions.EntryPoint())(); |
+ retval = reinterpret_cast<EmbedStringCode>(instructions.EntryPoint())(); |
+#endif |
EXPECT((retval & kSmiTagMask) == kHeapObjectTag); |
String& string_object = String::Handle(); |
string_object ^= reinterpret_cast<RawInstructions*>(retval); |
@@ -2297,9 +2313,14 @@ |
Code& code = Code::Handle(Code::FinalizeCode( |
*CreateFunction("Test_EmbedSmiInCode"), &_assembler_)); |
Instructions& instructions = Instructions::Handle(code.instructions()); |
+ intptr_t retval = 0; |
+#if defined(USING_SIMULATOR) |
+ retval = bit_copy<intptr_t, int64_t>(Simulator::Current()->Call( |
+ static_cast<int32_t>(instructions.EntryPoint()), 0, 0, 0, 0)); |
+#else |
typedef intptr_t (*EmbedSmiCode)(); |
- intptr_t retval = |
- reinterpret_cast<EmbedSmiCode>(instructions.EntryPoint())(); |
+ retval = reinterpret_cast<EmbedSmiCode>(instructions.EntryPoint())(); |
+#endif |
EXPECT((retval >> kSmiTagShift) == kSmiTestValue); |
} |
@@ -2314,9 +2335,14 @@ |
Code& code = Code::Handle(Code::FinalizeCode( |
*CreateFunction("Test_EmbedSmiIn64BitCode"), &_assembler_)); |
Instructions& instructions = Instructions::Handle(code.instructions()); |
+ intptr_t retval = 0; |
+#if defined(USING_SIMULATOR) |
+ retval = bit_copy<intptr_t, int64_t>(Simulator::Current()->Call( |
+ static_cast<int32_t>(instructions.EntryPoint()), 0, 0, 0, 0)); |
+#else |
typedef intptr_t (*EmbedSmiCode)(); |
- intptr_t retval = |
- reinterpret_cast<EmbedSmiCode>(instructions.EntryPoint())(); |
+ retval = reinterpret_cast<EmbedSmiCode>(instructions.EntryPoint())(); |
+#endif |
EXPECT((retval >> kSmiTagShift) == kSmiTestValue); |
} |
#endif |
@@ -3182,6 +3208,6 @@ |
EXPECT_EQ(test6.SourceFingerprint(), test7.SourceFingerprint()); |
} |
-#endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). |
+#endif // TARGET_ARCH_IA32 || TARGET_ARCH_X64 || TARGET_ARCH_ARM |
} // namespace dart |