- mov @r1, 0(r15) ; save return address
- mov r1, 2(r15) ; stack pointer
- incd 2(r15) ; postdec saved SP cause it contains ret addr
- mov r2, 4(r15) ; status register
- mov r4, 6(r15)
- mov r5, 8(r15)
- mov r6, 10(r15)
- mov r7, 12(r15)
- mov r8, 14(r15)
- mov r9, 16(r15)
- mov r10, 18(r15)
- mov r11, 20(r15)
- mov #0, r15 ; return value
- ret
-
-
-longjmp:
- mov r15, r13
- mov r14, r15 ; r15 now contains a return value
- mov 2(r13), r1 ; restore registers
- mov 4(r13), r2
- mov 6(r13), r4
- mov 8(r13), r5
- mov 10(r13), r6
- mov 12(r13), r7
- mov 14(r13), r8
- mov 16(r13), r9
- mov 18(r13), r10
- mov 20(r13), r11
- br 0(r13) ; jump...
-
+ XPOP PUSH_BYTES * 10(r15) ; save return address and adjust sp
+ XMOVA r1, PUSH_BYTES * 0(r15) ; stack pointer
+ XMOVA r2, PUSH_BYTES * 1(r15) ; status register
+ XMOVA r4, PUSH_BYTES * 2(r15)
+ XMOVA r5, PUSH_BYTES * 3(r15)
+ XMOVA r6, PUSH_BYTES * 4(r15)
+ XMOVA r7, PUSH_BYTES * 5(r15)
+ XMOVA r8, PUSH_BYTES * 6(r15)
+ XMOVA r9, PUSH_BYTES * 7(r15)
+ XMOVA r10, PUSH_BYTES * 8(r15)
+ XMOVA r11, PUSH_BYTES * 9(r15)
+ XMOVA #0, r15 ; return value
+ XBR -PUSH_BYTES(r1)
+
+longjump:
+ XMOVA r15, r13
+ XMOVA r14, r15 ; r15 now contains a return value
+ XMOVA @r13+, r1 ; restore registers
+ XMOVA @R13+, r2
+ XMOVA @R13+, r4
+ XMOVA @R13+, r5
+ XMOVA @R13+, r6
+ XMOVA @R13+, r7
+ XMOVA @R13+, r8
+ XMOVA @R13+, r9
+ XMOVA @R13+, r10
+ XMOVA @R13+, r11
+ XBR @R13 ; jump...