Skip to content

xref v0.0.5

Choose a tag to compare

@alex09x alex09x released this 02 Nov 06:02
· 226 commits to main since this release

Highlights

  • 1-Operand Widening ALU, Sign-Extension & Multi-Precision Carry/Borrow (xref c / xref slice / xref dump / xref diff-c):
    • Lifts x86_64 1-operand widening mul / imul (8/16/32/64-bit, collapsing high/low u128 / i128 splits into clean wide shifts/casts when both halves are consumed and preserving upper register bits on 8/16-bit subword writes).
    • Lifts 1-operand div / idiv (8/16/32/64-bit) with zero-extended low halves ((u128)(u64)), SSA-proven cbw / cwd / cdq / cqo sign-extension folding on idiv, and accumulator sign-extension instructions (cbw, cwde, cdqe, cwd, cdq, cqo).
    • Lifts multi-precision adc / sbb across 8/16/32/64-bit operands with width-aware Flags::Add / Flags::Sub carry/borrow propagation, pre-mutation cf_<ip> / lhs_<ip> / rhs_<ip> snapshotting across flag lifetimes, and CF preservation across inc / dec / not / bswap (#26, #27).
  • Complete & Balanced Pseudo-C Slicing (xref slice):
    • Retains reaching definitions across loop back-edges and conditional branches, emits inline typed variable declarations (let -> <type> <var> = ...;) when hoisted block declarations are pruned, preserves skip_<hex> flag declarations and writes when referenced by retained structured guards, pins exact instruction-IP --to <hex_ip> statements via /* @xref_slice_target */, and guarantees balanced { / } braces across nested pruned structures (#26, #27).
  • Bounded .rodata Previews & Intra-Instruction ABI Register Tracking:
    • Bounds .rodata string previews on unproven-length lea operands instead of concatenating adjacent constants in .rodata pools, slices exact string lengths at (ptr, len) and bcmp call sites, and records intra-instruction read-before-write ABI register uses (lea rsi, [rsi*2 + 1]) (#26, #27).