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