• Daniel Clifford's avatar
    [ignition] Optimize reloading of registers before Dispatch · bd21c2bd
    Daniel Clifford authored
    Before this patch, the registers needed for bytecode dispatch in interpreter
    handlers were inconsistently stored in the interpreter frame and/or kept in
    values that remained live across calls.
    
    After this patch, these registers are explicitly reloaded after calls, making it
    possible to elide the spills of those registers before the call in many cases.
    
    Some highlights from the CL:
    
    * Added methods to the CSA and InterpreterAssembler to efficiently store and
      load Smis values and Smi interpreter registers on x64 without explicit
      tagging/untagging.
    
    * Created Variables for all of the interpreter-internal values that need to be
      reloaded before bytecode dispatch at the end of an interpreter handler.
    
    * The bytecode offset can be written out early in a handler by marking it
      has having a call along it's critical path. By moving this early in a
      handler, it becomes possible to use memory operands for pushes used to
      marshall parameters when making calls.
    
    Change-Id: Icf8d7798789f88a4489e06a7092616bbbb881577
    Reviewed-on: https://chromium-review.googlesource.com/442566
    Commit-Queue: Daniel Clifford <danno@chromium.org>
    Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
    Reviewed-by: 's avatarMichael Starzinger <mstarzinger@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#43260}
    bd21c2bd
interface-descriptors.cc 25.5 KB