You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
x64: convert all multiplication-related instructions (#10782)
* asm: add SSE4.1 feature
* asm: refactor format constructors with expanding structs
* asm: add implicit operands
Implicit operands are used by an instruction but not present in its
disassembled output. Instructions like `mul`, e.g., will write to the
`%rax` and `%rdx` registers, but this is all invisible in disassembly.
Implicit operands are always fixed (i.e., the register is known), but
not all fixed operands are implicit (i.e., some fixed registers _are_
disassembled).
* asm: add `mul*` instructions, vector and scalar
* asm: generate ISLE for multi-return constructors--`AssemblerOutputs::RetValueRegs`
Certain `mul*` instructions write to multiple registers. For register
allocation, Cranelift needs to know about all of these registers. This
change uses the pre-existing pattern of returning a `ValueRegs` type to
indicate this. This change is limited to what is needed now: the only
multi-return needed now uses two fixed registers.
* x64: convert SSE multiplications
* x64: convert scalar multiplications
* x64: remove old `Inst::Mul*` variants
* winch: convert multiplications
This does not include any special "small immediate resizing" rules for
Winch, so the Winch disassembly tests gain a few bytes (e.g., some
immediates that _could_ fit in 8 bits are emitted as the full 32 bits).
* refactor: move `i32`-related extractors to `prelude.isle`
* review: print the implicit registers as well
* fix: the instruction size has changed (again)
0 commit comments