Skip to content

Instantly share code, notes, and snippets.

@AngheloAlf
Last active March 21, 2024 14:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AngheloAlf/8291b01f73d14d4f1a42754908d57d83 to your computer and use it in GitHub Desktop.
Save AngheloAlf/8291b01f73d14d4f1a42754908d57d83 to your computer and use it in GitHub Desktop.
MIPS eabi register convention

MIPS eabi register convention

This document tries to specify how the registers are used on the eabi MIPS ABI.

This ABI does not have any official register names, so names from other ABIs are left as references.

General purpose registers

Usage O32 name N32 name
0 Zero $zero $zero
1 Volatile $at $at
2 Volatile / Return val $v0 $v0
3 Volatile / Return val 1 $v1 $v1
4 Volatile / Arg $a0 $a0
5 Volatile / Arg $a1 $a1
6 Volatile / Arg $a2 $a2
7 Volatile / Arg $a3 $a3
8 Volatile / Arg $t0 $a4
9 Volatile / Arg $t1 $a5
10 Volatile / Arg $t2 $a6
11 Volatile / Arg $t3 $a7
12 Volatile $t4 $t0
13 Volatile $t5 $t1
14 Volatile $t6 $t2
15 Volatile $t7 $t3
16 Non-volatile $s0 $s0
17 Non-volatile $s1 $s1
18 Non-volatile $s2 $s2
19 Non-volatile $s3 $s3
20 Non-volatile $s4 $s4
21 Non-volatile $s5 $s5
22 Non-volatile $s6 $s6
23 Non-volatile $s7 $s7
24 Volatile $t8 $t8
25 Volatile $t9 $t9
26 Kernel $k0 $k0
27 Kernel $k1 $k1
28 gp $gp $gp
29 stack pointer $sp $sp
30 Non-volatile $fp/$s8 $fp/$s8
31 Return address $ra $ra

Floating point registers

Usage O32 name N32 name N64 name
$f0 Return value $fv0 $fv0 $fv0
$f1 Return value 2 $fv0f $ft14 $ft12
$f2 $fv1 $fv1 $fv1
$f3 $fv1f $ft15 $ft13
$f4 $ft0 $ft0 $ft0
$f5 $ft0f $ft1 $ft1
$f6 $ft1 $ft2 $ft2
$f7 $ft1f $ft3 $ft3
$f8 $ft2 $ft4 $ft4
$f9 $ft2f $ft5 $ft5
$f10 $ft3 $ft6 $ft6
$f11 $ft3f $ft7 $ft7
$f12 Arg $fa0 $fa0 $fa0
$f13 Arg $fa0f $fa1 $fa1
$f14 Arg $fa1 $fa2 $fa2
$f15 Arg $fa1f $fa3 $fa3
$f16 Arg $ft4 $fa4 $fa4
$f17 Arg $ft4f $fa5 $fa5
$f18 Arg $ft5 $fa6 $fa6
$f19 Arg $ft5f $fa7 $fa7
$f20 $fs0 $fs0 $ft8
$f21 $fs0f $ft8 $ft9
$f22 $fs1 $fs1 $ft10
$f23 $fs1f $ft9 $ft11
$f24 $fs2 $fs2 $fs0
$f25 $fs2f $ft10 $fs1
$f26 $fs3 $fs3 $fs2
$f27 $fs3f $ft11 $fs3
$f28 $fs4 $fs4 $fs4
$f29 $fs4f $ft12 $fs5
$f30 $fs5 $fs5 $fs6
$f31 $fs5f $ft13 $fs7

References

Footnotes

  1. Used as the second pair of a long long value in 32-bits mode

  2. Used as the second pair of a double value in 32-bits mode

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment