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