Register Guide

RISC-V a3 / x13 Register: Argument

One of the a0-a7 integer argument registers. It is not preserved across calls.

ABI name: a3; physical register: x13.
Save rule: Not preserved across calls.
Read it through its psABI role first, then inspect how each instruction reads or writes it.
Physical Name x13ABI Name a3Save Rule Not preserved across calls
Role
Argument
Convention
Not preserved across calls
Remember This First
The psABI marks a0-a7 as not preserved across calls.
psABI Reference

Argument register

The standard psABI uses a0-a7 as argument registers, with only a0-a1 also used for return values. They are not preserved across calls.

Preserved across calls: No
RISC-V psABI integer register convention
Quick Understanding & Search Notes

a3 / x13 belongs to the a0-a7 argument-register group. The psABI uses a0-a7 for arguments and a0-a1 for return values; these registers are not preserved across calls.

a0-a7 are argument registers, and a0-a1 are also used for return values.
a3 is not preserved across calls, so a callee may overwrite it.

When It Fits Best

  • - a3 is one of the psABI a0-a7 integer argument registers.
  • - a3 is not listed as a return-value register in the psABI table; look first at a0/a1 for returns.
  • - Read a0-a7 first as function argument registers under the psABI.

When Not To Use It This Way

  • - Do not assume a* registers keep their old values after a call.
  • - If the original a* value is needed after a call, do not leave it in a* across that call.

What Happens Around A Call

1

The psABI marks a0-a7 as not preserved across calls.

2

After a call returns, do not assume the old a3 argument value still exists.

3

For a scalar of at most XLEN bits, the psABI passes it by value on the stack when no argument register is available.

Arguments And Return Values

Examples explain the rule, not a complete program
addi a3, zero, 3  # write a3
# a3 is an argument register, outside the a0-a1 return-value registers

FAQ

Does a3 / x13 keep its old argument value after a call?

Do not assume so. a0-a7 are not preserved across calls, and the callee may overwrite them.

Which a registers carry return values?

The psABI uses a0-a1 for return values as well as arguments.