- Introduces F32 and F64 types and Float operand variant to the IR.
- Implements floating-point binary operations (FAdd, FSub, FMul, FDiv, FRem, FCmp) and FNeg unary op.
- Updates IR printer, validator, and builder to handle the new floating-point functionality.
- Extends the constant folding pass to evaluate floating-point expressions at compile time.
- Enhances x86_64 backend with XMM register support and floating-point codegen.
- Implements a fixed-point iteration pass for register type resolution to correctly allocate GPR vs XMM registers.
- Updates the linear scan allocator to manage multiple register classes (GPR, XMM).
- Adds System V ABI compliant handling for floating-point function arguments and return values.
- Includes comprehensive tests for IR validation, constant folding, and assembly generation.
- Moves x86_64 backend implementation from a single file into a
structured module (`codegen`, `types`, `mod`).
- Introduces a dedicated `Codegen` helper to enforce x86-64 hardware
constraints (e.g., preventing memory-to-memory moves).
- Implements strongly-typed register formatting and operand width
handling.
- Renames `Instruction::Assign` to `Instruction::Copy` across the IR and
all optimization passes to better reflect semantic intent.
- Updates the x86 backend to handle ABI-compliant stack alignment and
register allocation more robustly.
- Split `BinaryOp::Mul` into `BinaryOp::SMul` and `BinaryOp::UMul` in
the IR.
- Implement x86_64 codegen for `UMul` using the `mulq` instruction.
- Update `X86Backend` to use `imulq` specifically for `SMul`.
- Update constant folding and IR printer to support the new
multiplication operations.
- Optimize function epilogue by omitting the final `jmp` on fallthrough.
- Update `main` test case to use `build_umul`.
- Implement `reorder_blocks` (BBR) pass using DFS to maximize
fallthroughs.
- Update x86_64 backend to use actual function names in call
instructions instead of generic IDs.
- Replace the GCD test case in main with an iterative factorial test
module.
- Remove redundant validation check at the end of the optimization
pipeline.
- Initialize Rust project configuration (Cargo) and .gitignore
- Implement core Intermediate Representation (IR), printer, and builder
utilities
- Add IR validation module for type checking and constraint verification
- Introduce optimization passes: Mem2Reg, Constant Folding, Copy
Propagation, Dead Code Elimination, and SSA Destruction
- Implement x86_64 backend for assembly code generation
- Add a C test harness and main entry point to generate, compile, and
test a GCD assembly function