Files
lopez-repo/calling-convention/Output-explanation.md
2026-03-09 13:11:10 -06:00

1.2 KiB

Calling Convention — Output Explanation

This document explains the output of the calling convention algorithm implemented in calling-convention.ipynb, tested across 3 scenarios.


TEST 1: A single 1-byte argument

Function signature: result = func(x) where x is 8 bits (1 byte)

Output:

===== TEST 1: a 1 byte argument =====
=== State after do_function_call ===
Registers used: ['RA']
Stack: [{'type': 'caller_saved', 'reg': 'R0', 'value': 0}, {'type': 'caller_saved', 'reg': 'R1', 'value': 0}, {'type': 'caller_saved', 'reg': 'R2', 'value': 0}, {'type': 'caller_saved', 'reg': 'R3', 'value': 0}]
RS points to: 4
=== State after undo_function_call ===
Clean stack: []
RS: 0
Collected result: {'result': {'type': 'result', 'value': 42}}

**Explanation:**
Since there is only one argument and it fits in a single register, it is
placed directly in `RA` (the first available argument register).
Before the call, the 4 caller-saved registers (R0-R3) are pushed onto the
stack to preserve their values. `RS` points to position 4, reflecting those
4 entries. After `undo_function_call`, the stack is empty, `RS` returns to 0,
and the result value `42` is successfully collected from `RA`.