File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -49,8 +49,38 @@ jump_fcontext:
4949 @ save LR as PC
5050 push {lr}
5151 @ save hidden , V1 - V8 , LR
52+
53+ #if __ARM_ARCH >= 7
54+
5255 push {a1 , v1 - v8 , lr}
5356
57+ #else
58+
59+ sub sp , # 40
60+
61+ str a1 , [ sp , # 0 ]
62+ str v1 , [ sp , # 4 ]
63+ str v2 , [ sp , # 8 ]
64+ str v3 , [ sp , # 12 ]
65+ str v4 , [ sp , # 16 ]
66+
67+ mov v4 , v5
68+ str v4 , [ sp , # 20 ]
69+
70+ mov v4 , v6
71+ str v4 , [ sp , # 24 ]
72+
73+ mov v4 , v7
74+ str v4 , [ sp , # 28 ]
75+
76+ mov v4 , v8
77+ str v4 , [ sp , # 32 ]
78+
79+ mov v4 , lr
80+ str v4 , [ sp , # 36 ]
81+
82+ #endif
83+
5484 @ prepare stack for FPU
5585 sub sp , sp , # 64
5686#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
@@ -72,7 +102,34 @@ jump_fcontext:
72102 add sp , sp , # 64
73103
74104 @ restore hidden , V1 - V8 , LR
105+ #if __ARM_ARCH >= 7
75106 pop {a4 , v1 - v8 , lr}
107+ #else
108+
109+ ldr v4 , [ sp , # 20 ]
110+ mov v5 , v4
111+
112+ ldr v4 , [ sp , # 24 ]
113+ mov v6 , v4
114+
115+ ldr v4 , [ sp , # 28 ]
116+ mov v7 , v4
117+
118+ ldr v4 , [ sp , # 32 ]
119+ mov v8 , v4
120+
121+ ldr v4 , [ sp , # 36 ]
122+ mov lr , v4
123+
124+ ldr a4 , [ sp , # 0 ]
125+ ldr v1 , [ sp , # 4 ]
126+ ldr v2 , [ sp , # 8 ]
127+ ldr v3 , [ sp , # 12 ]
128+ ldr v4 , [ sp , # 16 ]
129+
130+ add sp , # 40
131+
132+ #endif
76133
77134 @ return transfer_t from jump
78135 str a1 , [ a4 , # 0 ]
Original file line number Diff line number Diff line change 4747.syntax unified
4848make_fcontext:
4949 @ shift address in A1 to lower 16 byte boundary
50+
51+ #if __ARM_ARCH >= 7
5052 bic a1 , a1 , # 15
53+ #else
54+ lsrs a1 , a1 , # 4
55+ lsls a1 , a1 , # 4
56+ #endif
5157
5258 @ reserve space for context - data on context - stack
59+ #if __ARM_ARCH >= 7
5360 sub a1 , a1 , # 124
61+ #else
62+ subs a1 , # 124
63+ #endif
5464
5565 @ third arg of make_fcontext() == address of context - function
5666 str a3 , [ a1 , # 104 ]
5767
5868 @ compute address of returned transfer_t
69+ #if __ARM_ARCH >= 7
5970 add a2 , a1 , # 108
71+ #else
72+ mov a2 , a1
73+ adds a2 , # 108
74+ #endif
6075 mov a3 , a2
6176 str a3 , [ a1 , # 64 ]
6277
78+
6379 @ compute abs address of label finish
80+ #if __ARM_ARCH >= 7
6481 adr a2 , finish
82+ #else
83+ ldr a2 , =finish
84+ #endif
6585 @ save address of finish as return - address for context - function
6686 @ will be entered after context - function returns
6787 str a2 , [ a1 , # 100 ]
@@ -73,7 +93,13 @@ make_fcontext:
7393
7494finish:
7595 @ exit code is zero
96+ #if __ARM_ARCH >= 7
7697 mov a1 , # 0
98+ #else
99+ movs r3 , # 0
100+ movs r0 , r3
101+ #endif
102+
77103 @ exit application
78104 bl _exit@PLT
79105.size make_fcontext , . - make_fcontext
Original file line number Diff line number Diff line change @@ -49,8 +49,37 @@ ontop_fcontext:
4949 @ save LR as PC
5050 push {lr}
5151 @ save hidden , V1 - V8 , LR
52+ #if __ARM_ARCH >= 7
53+
5254 push {a1 , v1 - v8 , lr}
5355
56+ #else
57+
58+ sub sp , # 40
59+
60+ str a1 , [ sp , # 0 ]
61+ str v1 , [ sp , # 4 ]
62+ str v2 , [ sp , # 8 ]
63+ str v3 , [ sp , # 12 ]
64+ str v4 , [ sp , # 16 ]
65+
66+ mov v4 , v5
67+ str v4 , [ sp , # 20 ]
68+
69+ mov v4 , v6
70+ str v4 , [ sp , # 24 ]
71+
72+ mov v4 , v7
73+ str v4 , [ sp , # 28 ]
74+
75+ mov v4 , v8
76+ str v4 , [ sp , # 32 ]
77+
78+ mov v4 , lr
79+ str v4 , [ sp , # 36 ]
80+
81+ #endif
82+
5483 @ prepare stack for FPU
5584 sub sp , sp , # 64
5685#if (defined(__VFP_FP__) && !defined(__SOFTFP__))
@@ -75,7 +104,34 @@ ontop_fcontext:
75104 add sp , sp , # 64
76105
77106 @ restore hidden , V1 - V8 , LR
107+ #if __ARM_ARCH >= 7
78108 pop {a1 , v1 - v8 , lr}
109+ #else
110+
111+ ldr v4 , [ sp , # 20 ]
112+ mov v5 , v4
113+
114+ ldr v4 , [ sp , # 24 ]
115+ mov v6 , v4
116+
117+ ldr v4 , [ sp , # 28 ]
118+ mov v7 , v4
119+
120+ ldr v4 , [ sp , # 32 ]
121+ mov v8 , v4
122+
123+ ldr v4 , [ sp , # 36 ]
124+ mov lr , v4
125+
126+ ldr a1 , [ sp , # 0 ]
127+ ldr v1 , [ sp , # 4 ]
128+ ldr v2 , [ sp , # 8 ]
129+ ldr v3 , [ sp , # 12 ]
130+ ldr v4 , [ sp , # 16 ]
131+
132+ add sp , # 40
133+
134+ #endif
79135
80136 @ return transfer_t from jump
81137 str a2 , [ a1 , # 0 ]
You can’t perform that action at this time.
0 commit comments