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