mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-29 12:15:39 +00:00
A leaf whose rsp operand could not keep its encoding after the shift was skipped: an 8-bit displacement that overflows, an operand at (%rsp) without a displacement, or an indexed (%rsp,%idx,s) operand. Such an instruction now moves to a stub, re-encoded with the moved displacement in 8 bits when it fits and in 32 bits otherwise, followed by a jump back. The site covers the instruction and the sequential instructions after it until it is 5 bytes long. It is refused when a branch lands inside it, when it would have to cover a branch, ret or rip-relative instruction (these are not relocated), or when it overlaps the prologue, an exit, another operand site or an existing stub. Legacy, REX and VEX forms are re-encoded; EVEX operands, whose 8-bit displacement is scaled, are still refused. A leaf with no room for a site is skipped as "rsp operand that cannot move and has no room for a stub". Operands inside a site that could move in place are carried by the stub instead, so the site's bytes stay as they were. The report counts the operand stubs and the operands they carry.