Skip to content

Commit c5eb815

Browse files
authored
Merge pull request #325 from microcai/fix_asm_code_for_cortex_m0
fix cortex-m0 support to aapcs_elf_gas target.
2 parents 639fa73 + f6fac61 commit c5eb815

3 files changed

Lines changed: 139 additions & 0 deletions

File tree

src/asm/jump_arm_aapcs_elf_gas.S

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff 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]

src/asm/make_arm_aapcs_elf_gas.S

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,21 +47,41 @@
4747
.syntax unified
4848
make_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

7494
finish:
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

src/asm/ontop_arm_aapcs_elf_gas.S

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff 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]

0 commit comments

Comments
 (0)