setjmp.s 1.69 KB
/*
=============================================================================
        Copyright (C) 1997-1999 NINTENDO Co.,Ltd.
        
        $RCSfile: setjmp.s,v $
        $Revision: 1.1.1.1 $
        $Date: 2002/10/30 02:07:09 $
=============================================================================
関数名:setjmp
-----------------------------------------------------------------------------
書式:	#include <setjmp.h>
	int setjmp(jmp_buf env);
引数:	env スタック環境バッファ
戻り値:登録時は0。longjmp関数から戻るときは longjmp関数の引数 valueの値
説明:	longjmp関数で戻るためのスタック環境を保存する。
=============================================================================
関数名:longjmp
-----------------------------------------------------------------------------
書式:	#include <setjmp.h>
	void longjmp(jmp_buf env, int value);
引数:	env スタック環境バッファ
	value setjmp関数の帰り値(0を指定すると1になる)
戻り値:なし
説明:	setjmp関数で登録された関数に戻る
	引数 value が setjmp関数の帰り値になる
-----------------------------------------------------------------------------
*/
	.text
	.set	reorder

	.align	4
	.ent	setjmp
	.globl	setjmp
setjmp:
	sw	$16,0x00($4)
	sw	$17,0x04($4)
	sw	$18,0x08($4)
	sw	$19,0x0c($4)
	sw	$20,0x10($4)
	sw	$21,0x14($4)
	sw	$22,0x18($4)
	sw	$23,0x1c($4)
	sw	$29,0x20($4)
	sw	$30,0x24($4)
	sw	$31,0x28($4)
	move	$2,$0
	jr	$31
	.end	setjmp


	.text
	.set	reorder

	.align	4
	.ent	longjmp
	.globl	longjmp
longjmp:
	lw	$16,0x00($4)
	lw	$17,0x04($4)
	lw	$18,0x08($4)
	lw	$19,0x0c($4)
	lw	$20,0x10($4)
	lw	$21,0x14($4)
	lw	$22,0x18($4)
	lw	$23,0x1c($4)
	lw	$29,0x20($4)
	lw	$30,0x24($4)
	lw	$31,0x28($4)
	move	$2,$5
	bne	$2,$0,.ZERO
	li	$2,1
.ZERO:
	jr	$31
	.end	longjmp