• pierre.langlois's avatar
    [turbofan] ARM64: Support shifted indexes in loads and stores · 60fb6ea1
    pierre.langlois authored
    This patch adds support for the `Operand2_R_LSL_I` addressing mode to
    loads and stores. This allows merging a shift instruction into a
    MemoryOperand. Since the shift immediate is restricted to the log2 of
    the operation width, the opportunities to hit this are slim. However,
    Ignition's bytecode handlers hit this case all the time:
    
    kind = BYTECODE_HANDLER
    name = Star
    compiler = turbofan
    Instructions (size = 44)
    0x23e67280     0  add x1, x19, #0x1 (1)
    0x23e67284     4  ldrsb x1, [x20, x1]
    0x23e67288     8  sxtw x1, w1
    0x23e6728c    12  mov x2, fp
    0x23e67290    16  str x0, [x2, x1, lsl #3]
                      ^^^^^^^^^^^^^^^^^^^^^
    0x23e67294    20  add x19, x19, #0x2 (2)
    0x23e67298    24  ldrb w1, [x20, x19]
    0x23e6729c    28  ldr x1, [x21, x1, lsl #3]
                      ^^^^^^^^^^^^^^^^^^^^^
    0x23e672a0    32  br x1
    
    Additionally, I noticed the optimisation occurs once in both the
    `StringPrototypeCharAt` and `StringPrototypeCharCodeAt` turbofan stubs.
    
    BUG=
    
    Review-Url: https://codereview.chromium.org/1972103002
    Cr-Commit-Position: refs/heads/master@{#36227}
    60fb6ea1
Name
Last commit
Last update
..
benchmarks Loading commit data...
cctest Loading commit data...
fuzzer Loading commit data...
intl Loading commit data...
js-perf-test Loading commit data...
memory Loading commit data...
message Loading commit data...
mjsunit Loading commit data...
mozilla Loading commit data...
preparser Loading commit data...
promises-aplus Loading commit data...
simdjs Loading commit data...
test262 Loading commit data...
unittests Loading commit data...
webkit Loading commit data...
bot_default.gyp Loading commit data...
bot_default.isolate Loading commit data...
default.gyp Loading commit data...
default.isolate Loading commit data...
ignition.gyp Loading commit data...
ignition.isolate Loading commit data...
optimize_for_size.gyp Loading commit data...
optimize_for_size.isolate Loading commit data...
perf.gyp Loading commit data...
perf.isolate Loading commit data...