- "general_purpose" => [
- { name => "zero", type => 4+2 }, # always zero
- { name => "at", type => 4 }, # reserved for assembler
- { name => "v0", type => 1 }, # first return value
- { name => "v1", type => 1 }, # second return value
- { name => "a0", type => 1 }, # first argument
- { name => "a1", type => 1 }, # second argument
- { name => "a2", type => 1 }, # third argument
- { name => "a3", type => 1 }, # fourth argument
- { name => "t0", type => 1 },
- { name => "t1", type => 1 },
- { name => "t2", type => 1 },
- { name => "t3", type => 1 },
- { name => "t4", type => 1 },
- { name => "t5", type => 1 },
- { name => "t6", type => 1 },
- { name => "t7", type => 1 },
- { name => "s0", type => 2 },
- { name => "s1", type => 2 },
- { name => "s2", type => 2 },
- { name => "s3", type => 2 },
- { name => "s4", type => 2 },
- { name => "s5", type => 2 },
- { name => "s6", type => 2 },
- { name => "s7", type => 2 },
- { name => "t8", type => 1 },
- { name => "t9", type => 1 },
- { name => "k0", type => 4 }, # reserved for OS
- { name => "k1", type => 4 }, # reserved for OS
- { name => "gp", type => 4 }, # general purpose
- { name => "sp", type => 4+2 }, # stack pointer
- { name => "fp", type => 4+2 }, # frame pointer
- { name => "ra", type => 2+1 }, # return address. This is also caller save, because
- # the jla instruction that is used for calls modifies
- # the ra register. It is callee save too, because at the last
- # command of a function (the ja $ra) it needs to have it's
- # old value.
- { mode => "mode_P" }
- ],
+ "gp" => [
+ { name => "zero", type => 4+2 }, # always zero
+ { name => "at", type => 4 }, # reserved for assembler
+ { name => "v0", realname => "2", type => 1 }, # first return value
+ { name => "v1", realname => "3", type => 1 }, # second return value
+ { name => "a0", realname => "4", type => 1 }, # first argument
+ { name => "a1", realname => "5", type => 1 }, # second argument
+ { name => "a2", realname => "6", type => 1 }, # third argument
+ { name => "a3", realname => "7", type => 1 }, # fourth argument
+ { name => "t0", realname => "8", type => 1 },
+ { name => "t1", realname => "9", type => 1 },
+ { name => "t2", realname => "10", type => 1 },
+ { name => "t3", realname => "11", type => 1 },
+ { name => "t4", realname => "12", type => 1 },
+ { name => "t5", realname => "13", type => 1 },
+ { name => "t6", realname => "14", type => 1 },
+ { name => "t7", realname => "15", type => 1 },
+ { name => "s0", realname => "16", type => 2 },
+ { name => "s1", realname => "17", type => 2 },
+ { name => "s2", realname => "18", type => 2 },
+ { name => "s3", realname => "19", type => 2 },
+ { name => "s4", realname => "20", type => 2 },
+ { name => "s5", realname => "21", type => 2 },
+ { name => "s6", realname => "22", type => 2 },
+ { name => "s7", realname => "23", type => 2 },
+ { name => "t8", realname => "24", type => 1 },
+ { name => "t9", realname => "25", type => 1 },
+ { name => "kt0", type => 4 }, # reserved for OS
+ { name => "kt1", type => 4 }, # reserved for OS
+ { name => "gp", type => 4 }, # general purpose
+ { name => "sp", type => 4 }, # stack pointer
+ { name => "fp", type => 4 }, # frame pointer
+ { name => "ra", type => 2+1 }, # return address
+ { mode => "mode_Iu" }
+ ],