ARM implementations of a few more IR opcodes
commit0ad0b0ddfdbc8afdb4dc24d3fb0c84c2a7e48e75
authorOwen Yamauchi <oyamauchi@fb.com>
Thu, 3 Oct 2013 18:03:38 +0000 (3 11:03 -0700)
committerSara Golemon <sgolemon@fb.com>
Wed, 9 Oct 2013 20:47:25 +0000 (9 13:47 -0700)
treeb0105a8aa4c9d2d6ccba78a9ecb71c7d0dac33a5
parent979a5dc3aedf48fdd4228140352a38d1dd05da61
ARM implementations of a few more IR opcodes

I ran test/quick and found a whole bunch of failures due to repeated
codegen failure, meaning there are some IR opcodes that have to appear
even when everything is interp-one'd. This implements a few of those.

This entailed implementing a few core bits of infrastructure, including
smashable jumps, which you can read all about in jump-smash.cpp. I came
to this approach because the jump offsets that ARM allows are too small
for our purposes. The fact that this skirts around the delicate parts of
concurrent modification and execution is a side benefit.

I'm putting off the implementation of GuardRefs for this diff because
it's very complex and I want to investigate factoring out shared logic.
But I stopped it from punting in codegen just so execution would get a
bit further.

Reviewed By: @ottoni

Differential Revision: D1002619
hphp/runtime/vm/jit/abi-arm.h
hphp/runtime/vm/jit/code-gen-arm.cpp
hphp/runtime/vm/jit/code-gen-arm.h
hphp/runtime/vm/jit/code-gen.cpp
hphp/runtime/vm/jit/jump-smash.cpp
hphp/runtime/vm/jit/service-requests-arm.cpp
hphp/runtime/vm/jit/translator-inline.h
hphp/util/data-block.h