Index: fusl/src/setjmp/arm/setjmp.s |
diff --git a/fusl/src/setjmp/arm/setjmp.s b/fusl/src/setjmp/arm/setjmp.s |
new file mode 100644 |
index 0000000000000000000000000000000000000000..87791634b862313f69168c6742fe2e3fa35c5c15 |
--- /dev/null |
+++ b/fusl/src/setjmp/arm/setjmp.s |
@@ -0,0 +1,42 @@ |
+.syntax unified |
+.global __setjmp |
+.global _setjmp |
+.global setjmp |
+.type __setjmp,%function |
+.type _setjmp,%function |
+.type setjmp,%function |
+__setjmp: |
+_setjmp: |
+setjmp: |
+ mov ip,r0 |
+ stmia ip!,{v1,v2,v3,v4,v5,v6,sl,fp,sp,lr} |
+ mov r0,#0 |
+ |
+ adr r1,1f |
+ ldr r2,1f |
+ ldr r1,[r1,r2] |
+ |
+ tst r1,#0x260 |
+ beq 3f |
+ tst r1,#0x20 |
+ beq 2f |
+ stc p2, cr4, [ip], #48 |
+2: tst r1,#0x40 |
+ beq 2f |
+ .fpu vfp |
+ vstmia ip!, {d8-d15} |
+ .fpu softvfp |
+ .eabi_attribute 10, 0 |
+ .eabi_attribute 27, 0 |
+2: tst r1,#0x200 |
+ beq 3f |
+ stcl p1, cr10, [ip], #8 |
+ stcl p1, cr11, [ip], #8 |
+ stcl p1, cr12, [ip], #8 |
+ stcl p1, cr13, [ip], #8 |
+ stcl p1, cr14, [ip], #8 |
+ stcl p1, cr15, [ip], #8 |
+3: bx lr |
+ |
+.hidden __hwcap |
+1: .word __hwcap-1b |