Register Guide

RISC-V pc / pc Register: Program Counter

pc is the program counter holding the current instruction address; branches, jumps, traps, and trap returns update it implicitly.

ABI name: pc; physical register: pc.
Save rule: Saved by software when context requires.
Read it through its psABI role first, then inspect how each instruction reads or writes it.
Physical Name pcABI Name pcSave Rule Saved by software when context requires
Role
Program Counter
Convention
Architectural state / CSR semantics
Remember This First
t* registers are caller-saved, so callees may overwrite them.
psABI Reference

ABI register

pc is the program counter holding the current instruction address; branches, jumps, traps, and trap returns update it implicitly.

Preserved across calls: Saved by software when context requires
RISC-V psABI integer register convention

When It Fits Best

  • - Hold short-lived temporary computation results.
  • - Use them for local computations that do not need to survive calls.
  • - Use them as caller-managed scratch registers.

When Not To Use It This Way

  • - Do not keep values in t* across a call unless you save them yourself first.
  • - Do not expect callees to restore t* for you.

What Happens Around A Call

1

t* registers are caller-saved, so callees may overwrite them.

2

If the caller still needs a t* value after a call, it must save it in advance.

Protect Temporary Values Before A Call

Examples explain the rule, not a complete program
addi t0, a0, 1
# If t0 is needed after the call, save it to an ABI-valid location first
call foo
# restore t0 from that saved location after the call returns