/* 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