1/* Copyright (c) 2005 Aldy Hernandez <aldyh@redhat.com> */ 2#include <picolibc.h> 3 4# setjmp/longjmp for mt. 5# 6# The jmpbuf looks like this: 7# 8# Register jmpbuf offset 9# R0 --- -- 10# R1 0x4 4 11# R2 0x8 8 12# R3 0xc 12 13# R4 0x10 16 14# R5 0x14 20 15# R6 0x18 24 16# R7 0x1c 28 17# R8 0x20 32 18# R9 ---- -- 19# R10 ---- -- 20# R11 0x2c 44 21# R12 0x30 48 22# R13 0x34 52 23# R14 0x38 56 24# R15 0x3c 60 25# 26# R1 contains the pointer to jmpbuf 27 .text 28 .global setjmp 29 .type setjmp ,@function 30setjmp: 31 32 stw r1, r1, #4 33 or r0, r0, r0 34 stw r2, r1, #8 35 or r0, r0, r0 36 stw r3, r1, #12 37 or r0, r0, r0 38 stw r4, r1, #16 39 or r0, r0, r0 40 stw r5, r1, #20 41 or r0, r0, r0 42 stw r6, r1, #24 43 or r0, r0, r0 44 stw r7, r1, #28 45 or r0, r0, r0 46 stw r8, r1, #32 47 or r0, r0, r0 48 stw r11, r1, #44 49 or r0, r0, r0 50 stw r12, r1, #48 51 or r0, r0, r0 52 stw r13, r1, #52 53 or r0, r0, r0 54 stw r14, r1, #56 55 or r0, r0, r0 56 stw r15, r1, #60 57 58 jal r0, r14 59 addi r11, r0, #0 60.Lend1: 61 .size setjmp,.Lend1-setjmp 62 63 .global longjmp 64 .type longjmp,@function 65longjmp: 66 or r9, r1, r1 67 or r11, r2, r2 68 ldw r1, r1, #4 69 or r0, r0, r0 70 ldw r2, r1, #8 71 or r0, r0, r0 72 ldw r3, r1, #12 73 or r0, r0, r0 74 ldw r4, r1, #16 75 or r0, r0, r0 76 ldw r5, r1, #20 77 or r0, r0, r0 78 ldw r6, r1, #24 79 or r0, r0, r0 80 ldw r7, r1, #28 81 or r0, r0, r0 82 ldw r8, r1, #32 83 or r0, r0, r0 84 85 86 ldw r12, r1, #48 87 or r0, r0, r0 88 ldw r13, r1, #52 89 or r0, r0, r0 90 ldw r14, r1, #56 91 or r0, r0, r0 92 ldw r15, r1, #60 93 94 brne r0, r11, .L01 95 or r0, r0, r0 96 97 addi r11, r0, #1 98.L01: 99 jal r0, r14 100 or r0, r0, r0 101.Lend2: 102 .size longjmp,.Lend2-longjmp2 103