diff options
author | Alan Wu <XrXr@users.noreply.github.com> | 2021-11-05 15:44:29 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-05 15:44:29 -0400 |
commit | 91a9062626733c7d11ea4795bd1957a21f2adec6 (patch) | |
tree | e844b4b0c7c8c52e26701539b0fba103a58425f6 /yjit_codegen.c | |
parent | 82ae9b092cf51062c49b95e81ad184e1dea0df1e (diff) |
YJIT: use shorter encoding for mov(r64,imm) when unambiguous (#5081)
* YJIT: use shorter encoding for mov(r64,imm) when unambiguous
Previously, for small constants such as `mov(RAX, imm_opnd(Qundef))`,
we emit an instruction with an 8-byte immediate. This form commonly
gets the `movabs` mnemonic.
In 64-bit mode, 32-bit operands get zero extended to 64-bit to fill the
register, so when the immediate is small enough, we can save 4 bytes by
using the `mov` variant that takes a 32-bit immediate and does a zero
extension.
Not implement with this change, there is an imm32 variant of `mov` that
does sign extension we could use. When the constant is negative, we
fallback to the `movabs` form.
In railsbench, this change yields roughly a 12% code size reduction for
the outlined block.
Co-authored-by: Jemma Issroff <jemmaissroff@gmail.com>
* [ci skip] comment edit. Please squash.
Co-authored-by: Jemma Issroff <jemmaissroff@gmail.com>
Notes
Notes:
Merged-By: maximecb <maximecb@ruby-lang.org>
Diffstat (limited to 'yjit_codegen.c')
0 files changed, 0 insertions, 0 deletions