| Index: runtime/vm/instructions_arm_test.cc
 | 
| diff --git a/runtime/vm/instructions_arm_test.cc b/runtime/vm/instructions_arm_test.cc
 | 
| index de3ff6f4ab38bbddc285fc6157b93b5147d07a7d..540fd5f8163cf68a33b975e85b52de6d78bd9408 100644
 | 
| --- a/runtime/vm/instructions_arm_test.cc
 | 
| +++ b/runtime/vm/instructions_arm_test.cc
 | 
| @@ -29,9 +29,81 @@ ASSEMBLER_TEST_RUN(Call, test) {
 | 
|    // before the end of the code buffer.
 | 
|    CallPattern call(test->entry() + test->code().Size() - Instr::kInstrSize,
 | 
|                     test->code());
 | 
| -  EXPECT_EQ(StubCode::InvokeDartCode_entry()->code(), call.TargetCode());
 | 
| +  EXPECT_EQ(StubCode::InvokeDartCode_entry()->label().address(),
 | 
| +            call.TargetAddress());
 | 
|  }
 | 
|  
 | 
| +
 | 
| +ASSEMBLER_TEST_GENERATE(Jump, assembler) {
 | 
| +  __ BranchPatchable(*StubCode::InvokeDartCode_entry());
 | 
| +  __ BranchPatchable(*StubCode::AllocateArray_entry());
 | 
| +}
 | 
| +
 | 
| +
 | 
| +ASSEMBLER_TEST_RUN(Jump, test) {
 | 
| +  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::InvokeDartCode_entry()->label().address(),
 | 
| +            jump1.TargetAddress());
 | 
| +  JumpPattern jump2(test->entry() + jump1.pattern_length_in_bytes(),
 | 
| +                    test->code());
 | 
| +  const Code& array_stub =
 | 
| +      Code::Handle(StubCode::AllocateArray_entry()->code());
 | 
| +  EXPECT_EQ(array_stub.EntryPoint(), jump2.TargetAddress());
 | 
| +  uword target1 = jump1.TargetAddress();
 | 
| +  uword target2 = jump2.TargetAddress();
 | 
| +  jump1.SetTargetAddress(target2);
 | 
| +  jump2.SetTargetAddress(target1);
 | 
| +  EXPECT_EQ(array_stub.EntryPoint(), jump1.TargetAddress());
 | 
| +  EXPECT_EQ(StubCode::InvokeDartCode_entry()->label().address(),
 | 
| +            jump2.TargetAddress());
 | 
| +}
 | 
| +
 | 
| +
 | 
| +#if defined(USING_SIMULATOR)
 | 
| +ASSEMBLER_TEST_GENERATE(JumpARMv6, assembler) {
 | 
| +  // ARMv7 is the default.
 | 
| +  HostCPUFeatures::set_arm_version(ARMv6);
 | 
| +  __ BranchPatchable(*StubCode::InvokeDartCode_entry());
 | 
| +  __ BranchPatchable(*StubCode::AllocateArray_entry());
 | 
| +  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::InvokeDartCode_entry()->label().address(),
 | 
| +            jump1.TargetAddress());
 | 
| +  JumpPattern jump2(test->entry() + jump1.pattern_length_in_bytes(),
 | 
| +                    test->code());
 | 
| +  const Code& array_stub =
 | 
| +      Code::Handle(StubCode::AllocateArray_entry()->code());
 | 
| +  EXPECT_EQ(array_stub.EntryPoint(), jump2.TargetAddress());
 | 
| +  uword target1 = jump1.TargetAddress();
 | 
| +  uword target2 = jump2.TargetAddress();
 | 
| +  jump1.SetTargetAddress(target2);
 | 
| +  jump2.SetTargetAddress(target1);
 | 
| +  EXPECT_EQ(array_stub.EntryPoint(), jump1.TargetAddress());
 | 
| +  EXPECT_EQ(StubCode::InvokeDartCode_entry()->label().address(),
 | 
| +            jump2.TargetAddress());
 | 
| +  HostCPUFeatures::set_arm_version(ARMv7);
 | 
| +}
 | 
| +#endif
 | 
| +
 | 
|  }  // namespace dart
 | 
|  
 | 
|  #endif  // defined TARGET_ARCH_ARM
 | 
| 
 |