• Shiyu Zhang's avatar
    [x64] Implement partial constant pool for x64. · 819c9845
    Shiyu Zhang authored
    Partial constant pool aims at reducing code size and only takes effect for shareable constants.
    Different from ARM’s constant pool, partial constant pool does not emit constant pools at the end of each code object. Instead, it keeps the first shareable constant inlined in the instructions and uses rip-relative memory loadings for the same constants in subsequent instructions. These rip-relative memory loadings will target at the position of the first inlined constant. For example:
    
      REX.W movq r10,0x7f9f75a32c20	  ; 10 bytes
      …
      REX.W movq r10,0x7f9f75a32c20	  ; 10 bytes
      …
    turns into
    
      REX.W movq r10,0x7f9f75a32c20	  ; 10 bytes
      …
      REX.W movq r10,[rip+0xffffff96] ; 7 bytes
      …
    
    
    Change-Id: I25a417f6d82da96024989bddf0451d7df9340c00
    Reviewed-on: https://chromium-review.googlesource.com/1082231Reviewed-by: 's avatarMichael Starzinger <mstarzinger@chromium.org>
    Reviewed-by: 's avatarJakob Gruber <jgruber@chromium.org>
    Reviewed-by: 's avatarSigurd Schneider <sigurds@chromium.org>
    Commit-Queue: Shiyu Zhang <shiyu.zhang@intel.com>
    Cr-Commit-Position: refs/heads/master@{#54963}
    819c9845
code-generator-x64.cc 125 KB