setjmp.s
来自「Newlib 嵌入式 C库 标准实现代码」· S 代码 · 共 100 行
S
100 行
# setjmp/longjmp for mt.# # The jmpbuf looks like this:# # Register jmpbuf offset# R0 --- --# R1 0x4 4# R2 0x8 8# R3 0xc 12# R4 0x10 16# R5 0x14 20# R6 0x18 24# R7 0x1c 28# R8 0x20 32# R9 ---- --# R10 ---- --# R11 0x2c 44# R12 0x30 48# R13 0x34 52# R14 0x38 56# R15 0x3c 60## R1 contains the pointer to jmpbuf .text .global setjmp .type setjmp ,@functionsetjmp: stw r1, r1, #4 or r0, r0, r0 stw r2, r1, #8 or r0, r0, r0 stw r3, r1, #12 or r0, r0, r0 stw r4, r1, #16 or r0, r0, r0 stw r5, r1, #20 or r0, r0, r0 stw r6, r1, #24 or r0, r0, r0 stw r7, r1, #28 or r0, r0, r0 stw r8, r1, #32 or r0, r0, r0 stw r11, r1, #44 or r0, r0, r0 stw r12, r1, #48 or r0, r0, r0 stw r13, r1, #52 or r0, r0, r0 stw r14, r1, #56 or r0, r0, r0 stw r15, r1, #60 jal r0, r14 addi r11, r0, #0.Lend1: .size setjmp,.Lend1-setjmp .global longjmp .type longjmp,@functionlongjmp: or r9, r1, r1 or r11, r2, r2 ldw r1, r1, #4 or r0, r0, r0 ldw r2, r1, #8 or r0, r0, r0 ldw r3, r1, #12 or r0, r0, r0 ldw r4, r1, #16 or r0, r0, r0 ldw r5, r1, #20 or r0, r0, r0 ldw r6, r1, #24 or r0, r0, r0 ldw r7, r1, #28 or r0, r0, r0 ldw r8, r1, #32 or r0, r0, r0 ldw r12, r1, #48 or r0, r0, r0 ldw r13, r1, #52 or r0, r0, r0 ldw r14, r1, #56 or r0, r0, r0 ldw r15, r1, #60 brne r0, r11, .L01 or r0, r0, r0 addi r11, r0, #1.L01: jal r0, r14 or r0, r0, r0.Lend2: .size longjmp,.Lend2-longjmp2
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?