LGTM with comments.
http://codereview.chromium.org/6410029/diff/2003/src/arm/deoptimizer-arm.cc File src/arm/deoptimizer-arm.cc (right): http://codereview.chromium.org/6410029/diff/2003/src/arm/deoptimizer-arm.cc#newcode129 src/arm/deoptimizer-arm.cc:129: // 2a ?? ?? ?? bcs ok ?? ?? ?? -> 00 00 01, the restoring puts in 1 here. http://codereview.chromium.org/6410029/diff/2003/src/arm/deoptimizer-arm.cc#newcode132 src/arm/deoptimizer-arm.cc:132: ASSERT(Memory::uint32_at(pc_after - 4) == 0xe12fff3c); 0xe12fff3c -> al | B24 | B21 | 15*B16 | 15*B12 | 15*B8 | BLX | ip.code() http://codereview.chromium.org/6410029/diff/2003/src/arm/deoptimizer-arm.cc#newcode132 src/arm/deoptimizer-arm.cc:132: ASSERT(Memory::uint32_at(pc_after - 4) == 0xe12fff3c); 4 -> kInstrSize http://codereview.chromium.org/6410029/diff/2003/src/arm/deoptimizer-arm.cc#newcode133 src/arm/deoptimizer-arm.cc:133: ASSERT(Memory::uint8_at(pc_after - 5) == 0xe5); Use Assembler::IsLdrPcImmediateOffset() to check this. Maybe add Assembler::IsLdrPcImmediateOffset() which also takes a register and checks that it is ldr ip, [... http://codereview.chromium.org/6410029/diff/2003/src/arm/deoptimizer-arm.cc#newcode145 src/arm/deoptimizer-arm.cc:145: Memory::uint32_at(pc_after - 12) = 0xe1a00000; I think you should be able to use the code patcher here: CodePatcher patcher(pc_after - 3 * kInstrSize, 1) patcher.masm()->nop(); if not 0xe1a00000 -> al | MOV http://codereview.chromium.org/6410029/diff/2003/src/arm/deoptimizer-arm.cc#newcode167 src/arm/deoptimizer-arm.cc:167: Memory::uint32_at(pc_after - 12) = 0x2a000001; Use CodePatcher if possible, or at least: 0x2a000001 -> cs | B27 | B25 | 1 http://codereview.chromium.org/6410029/diff/2003/src/deoptimizer.cc File src/deoptimizer.cc (right): http://codereview.chromium.org/6410029/diff/2003/src/deoptimizer.cc#newcode837 src/deoptimizer.cc:837: uint32_t length = last_site - first_site + patch_size(); If you use the CodePatcher the i-cache flushing is automatic. http://codereview.chromium.org/6410029/diff/2003/src/deoptimizer.cc#newcode867 src/deoptimizer.cc:867: uint32_t length = last_site - first_site + patch_size(); Ditto. http://codereview.chromium.org/6410029/ -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev
