/* MIPSRegisterSaveRestore.s
* Save and restore all the global registers on a MIPS.
*
* Peter B. Kessler, November 15, 1989 5:42:14 pm PST
* Makoto Udagawa, 17-Sep-91 19:23:11
* Katsuyuki Komatsu, March 18, 1992 3:24:01 pm PST
*/
/*
* virtual frame pointer ($fp) = 288($sp)
* -------------------
* 280($sp) fcr floating point control registers
* -------------------
* 272($sp) f30 floating point registers
* ...
* 152($sp) f0
* -------------------
* 148($sp) hi special registers
* 144($sp) lo
* -------------------
* 140($sp) r30 general registers
* ...
* 28($sp) r2
* 24($sp) r1
* -------------------
* 20($sp) r31 save/restore by patch code
* -------------------
* 16($sp) - 0($sp) argument area
*/
#define offsetlo 144
#define offsethi 148
.set noat
.text
.align 2
.globl save←regs
.ent save←regs
.frame $sp, 288, $31
save←regs:
sw $1, 24($sp)
sw $2, 28($sp)
sw $3, 32($sp)
sw $4, 36($sp)
sw $5, 40($sp)
sw $6, 44($sp)
sw $7, 48($sp)
sw $8, 52($sp)
sw $9, 56($sp)
sw $10, 60($sp)
sw $11, 64($sp)
sw $12, 68($sp)
sw $13, 72($sp)
sw $14, 76($sp)
sw $15, 80($sp)
sw $16, 84($sp)
sw $17, 88($sp)
sw $18, 92($sp)
sw $19, 96($sp)
sw $20, 100($sp)
sw $21, 104($sp)
sw $22, 108($sp)
sw $23, 112($sp)
sw $24, 116($sp)
sw $25, 120($sp)
sw $26, 124($sp)
sw $27, 128($sp)
sw $28, 132($sp)
sw $29, 136($sp)
sw $30, 140($sp)
mflo $8
sw $8, offsetlo($sp)
mfhi $8
sw $8, offsethi($sp)
j $31
.end save←regs
.text
.align 2
.globl restore←regs
.ent restore←regs
.frame $sp, 288, $31
restore←regs:
lw $8, offsetlo($sp)
mtlo $8
lw $8, offsethi($sp)
mthi $8
lw $30, 140($sp)
/* lw $29, 136($sp) */ /* don't restore sp */
lw $28, 132($sp)
lw $27, 128($sp)
lw $26, 124($sp)
lw $25, 120($sp)
lw $24, 116($sp)
lw $23, 112($sp)
lw $22, 108($sp)
lw $21, 104($sp)
lw $20, 100($sp)
lw $19, 96($sp)
lw $18, 92($sp)
lw $17, 88($sp)
lw $16, 84($sp)
lw $15, 80($sp)
lw $14, 76($sp)
lw $13, 72($sp)
lw $12, 68($sp)
lw $11, 64($sp)
lw $10, 60($sp)
lw $9, 56($sp)
lw $8, 52($sp)
lw $7, 48($sp)
lw $6, 44($sp)
lw $5, 40($sp)
lw $4, 36($sp)
lw $3, 32($sp)
lw $2, 28($sp)
lw $1, 24($sp)
j $31
.end restore←regs