| 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 | 
|  |