1/* Copyright (c) 2003 Anthony Green <green@moxielogic.com> */
2/* This is a simple version of setjmp and longjmp for iq2000. */
3
4
5/* int setjmp (jmp_buf);  */
6#include <picolibc.h>
7
8	.globl	setjmp
9	.ent	setjmp
10setjmp:
11	sw	r16,0(r4)	/* rs0 */
12	sw	r17,4(r4)	/* rs1 */
13	sw	r18,8(r4)	/* rs2 */
14	sw	r19,12(r4)	/* rs3 */
15	sw	r20,16(r4)	/* rs4 */
16	sw	r21,20(r4)	/* rs5 */
17	sw	r22,24(r4)	/* rs6 */
18	sw	r23,28(r4)	/* rs7 */
19	sw	r30,32(r4)	/* rs8 */
20
21	sw	r29,36(r4)
22	sw	r31,40(r4)
23
24	move	r2,r0
25
26	j	r31
27
28	.end	setjmp
29
30/* volatile void longjmp (jmp_buf, int);  */
31	.globl	longjmp
32	.ent	longjmp
33longjmp:
34	lw	r16,0(r4)	/* rs0 */
35	lw	r17,4(r4)	/* rs1 */
36	lw	r18,8(r4)	/* rs2 */
37	lw	r19,12(r4)	/* rs3 */
38	lw	r20,16(r4)	/* rs4 */
39	lw	r21,20(r4)	/* rs5 */
40	lw	r22,24(r4)	/* rs6 */
41	lw	r23,28(r4)	/* rs7 */
42	lw	r30,32(r4)	/* rs8 */
43
44	lw	r29,36(r4)
45	lw	r31,40(r4)
46
47	bne	r5,r0,1f
48	li	r5,1
491:
50	move	r2,r5
51
52	j	r31
53
54	.end longjmp
55