Chromium Code Reviews| Index: runtime/vm/instructions_arm_test.cc |
| =================================================================== |
| --- runtime/vm/instructions_arm_test.cc (revision 33351) |
| +++ runtime/vm/instructions_arm_test.cc (working copy) |
| @@ -6,6 +6,7 @@ |
| #if defined(TARGET_ARCH_ARM) |
| #include "vm/assembler.h" |
| +#include "vm/cpu.h" |
| #include "vm/instructions.h" |
| #include "vm/stub_code.h" |
| #include "vm/unit_test.h" |
| @@ -28,6 +29,7 @@ |
| test->code()); |
| EXPECT_EQ(StubCode::InstanceFunctionLookupLabel().address(), |
| call.TargetAddress()); |
| + // On the simulator, also try the ARMv6 version. |
|
regis
2014/03/06 17:32:11
I do not understand this comment. Are you missing
zra
2014/03/07 19:00:17
Removed. I had a test here that switched to ARMv6
|
| } |
| @@ -62,6 +64,45 @@ |
| jump2.TargetAddress()); |
| } |
| + |
| +#if defined(USING_SIMULATOR) |
| +ASSEMBLER_TEST_GENERATE(JumpARMv6, assembler) { |
| + // ARMv7 is the default. |
| + HostCPUFeatures::set_arm_version(ARMv6); |
| + __ BranchPatchable(&StubCode::InstanceFunctionLookupLabel()); |
| + __ BranchPatchable(&StubCode::AllocateArrayLabel()); |
| + HostCPUFeatures::set_arm_version(ARMv7); |
| +} |
| + |
| + |
| +ASSEMBLER_TEST_RUN(JumpARMv6, test) { |
| + HostCPUFeatures::set_arm_version(ARMv6); |
| + const Code& code = test->code(); |
| + const Instructions& instrs = Instructions::Handle(code.instructions()); |
| + bool status = |
| + VirtualMemory::Protect(reinterpret_cast<void*>(instrs.EntryPoint()), |
| + instrs.size(), |
| + VirtualMemory::kReadWrite); |
| + EXPECT(status); |
| + JumpPattern jump1(test->entry(), test->code()); |
| + EXPECT_EQ(StubCode::InstanceFunctionLookupLabel().address(), |
| + jump1.TargetAddress()); |
| + JumpPattern jump2(test->entry() + jump1.pattern_length_in_bytes(), |
| + test->code()); |
| + EXPECT_EQ(StubCode::AllocateArrayLabel().address(), |
| + jump2.TargetAddress()); |
| + uword target1 = jump1.TargetAddress(); |
| + uword target2 = jump2.TargetAddress(); |
| + jump1.SetTargetAddress(target2); |
| + jump2.SetTargetAddress(target1); |
| + EXPECT_EQ(StubCode::AllocateArrayLabel().address(), |
| + jump1.TargetAddress()); |
| + EXPECT_EQ(StubCode::InstanceFunctionLookupLabel().address(), |
| + jump2.TargetAddress()); |
| + HostCPUFeatures::set_arm_version(ARMv7); |
| +} |
| +#endif |
| + |
| } // namespace dart |
| #endif // defined TARGET_ARCH_ARM |