pepyakin labeled issue #4284:
Right now the given CLIF
v1 = load.i32 v0+32 v2 = iconst.i32 2 v3 = iadd v1, v2 store v3, v0+32generates the following assembly
movl $2, %eax addl %eax, 32(%rdi)However, x64 allows the following encoding
addl $2, 32(%rdi)I tried to fix that, by:
- Change the
src2ofAluRMfromGprtoGprMemImm,- Add the corresponding encoding.
- Change the
alu_rmconstructor to takeGprMemImm- Change the
x64_add_mem&co constructors to takeGprMemImm.This is a bit stupid since
AluRMalready takes a memory operand, so there is no way to encode theMempart ofGprMemImm. I guess maybe we could introduceRegImmandGprImmtypes. But that feels wrong and redundant.Related issue where this first was brought up https://github.com/bytecodealliance/wasmtime/issues/1925
pepyakin labeled issue #4284:
Right now the given CLIF
v1 = load.i32 v0+32 v2 = iconst.i32 2 v3 = iadd v1, v2 store v3, v0+32generates the following assembly
movl $2, %eax addl %eax, 32(%rdi)However, x64 allows the following encoding
addl $2, 32(%rdi)I tried to fix that, by:
- Change the
src2ofAluRMfromGprtoGprMemImm,- Add the corresponding encoding.
- Change the
alu_rmconstructor to takeGprMemImm- Change the
x64_add_mem&co constructors to takeGprMemImm.This is a bit stupid since
AluRMalready takes a memory operand, so there is no way to encode theMempart ofGprMemImm. I guess maybe we could introduceRegImmandGprImmtypes. But that feels wrong and redundant.Related issue where this first was brought up https://github.com/bytecodealliance/wasmtime/issues/1925
pepyakin labeled issue #4284:
Right now the given CLIF
v1 = load.i32 v0+32 v2 = iconst.i32 2 v3 = iadd v1, v2 store v3, v0+32generates the following assembly
movl $2, %eax addl %eax, 32(%rdi)However, x64 allows the following encoding
addl $2, 32(%rdi)I tried to fix that, by:
- Change the
src2ofAluRMfromGprtoGprMemImm,- Add the corresponding encoding.
- Change the
alu_rmconstructor to takeGprMemImm- Change the
x64_add_mem&co constructors to takeGprMemImm.This is a bit stupid since
AluRMalready takes a memory operand, so there is no way to encode theMempart ofGprMemImm. I guess maybe we could introduceRegImmandGprImmtypes. But that feels wrong and redundant.Related issue where this first was brought up https://github.com/bytecodealliance/wasmtime/issues/1925
pepyakin labeled issue #4284:
Right now the given CLIF
v1 = load.i32 v0+32 v2 = iconst.i32 2 v3 = iadd v1, v2 store v3, v0+32generates the following assembly
movl $2, %eax addl %eax, 32(%rdi)However, x64 allows the following encoding
addl $2, 32(%rdi)I tried to fix that, by:
- Change the
src2ofAluRMfromGprtoGprMemImm,- Add the corresponding encoding.
- Change the
alu_rmconstructor to takeGprMemImm- Change the
x64_add_mem&co constructors to takeGprMemImm.This is a bit stupid since
AluRMalready takes a memory operand, so there is no way to encode theMempart ofGprMemImm. I guess maybe we could introduceRegImmandGprImmtypes. But that feels wrong and redundant.Related issue where this first was brought up https://github.com/bytecodealliance/wasmtime/issues/1925
pepyakin opened issue #4284:
Right now the given CLIF
v1 = load.i32 v0+32 v2 = iconst.i32 2 v3 = iadd v1, v2 store v3, v0+32generates the following assembly
movl $2, %eax addl %eax, 32(%rdi)However, x64 allows the following encoding
addl $2, 32(%rdi)I tried to fix that, by:
- Change the
src2ofAluRMfromGprtoGprMemImm,- Add the corresponding encoding.
- Change the
alu_rmconstructor to takeGprMemImm- Change the
x64_add_mem&co constructors to takeGprMemImm.This is a bit stupid since
AluRMalready takes a memory operand, so there is no way to encode theMempart ofGprMemImm. I guess maybe we could introduceRegImmandGprImmtypes. But that feels wrong and redundant.Related issue where this first was brought up https://github.com/bytecodealliance/wasmtime/issues/1925
cfallin commented on issue #4284:
Hi @pepyakin -- sorry for the delayed response here. I think introducing
RegImmis actually exactly what we want here: it models the possibilities given by the instruction in the type system. I'm happy to review a PR if you want to try your hand at that, otherwise we can save this issue for some future "codegen quality" sprint. Thanks!
Last updated: Dec 13 2025 at 21:03 UTC