| ... | ... | @@ -238,6 +238,35 @@ nakedcc fn clone() void { |
| 238 | 238 | \\ mov x8,#93 // SYS_exit |
| 239 | 239 | \\ svc #0 |
| 240 | 240 | ); |
| 241 | } else if (builtin.arch == builtin.Arch.arm) { |
| 242 | asm volatile ( |
| 243 | \\ stmfd sp!,{r4,r5,r6,r7} |
| 244 | \\ mov r7,#120 |
| 245 | \\ mov r6,r3 |
| 246 | \\ mov r5,r0 |
| 247 | \\ mov r0,r2 |
| 248 | \\ and r1,r1,#-16 |
| 249 | \\ ldr r2,[sp,#16] |
| 250 | \\ ldr r3,[sp,#20] |
| 251 | \\ ldr r4,[sp,#24] |
| 252 | \\ svc 0 |
| 253 | \\ tst r0,r0 |
| 254 | \\ beq 1f |
| 255 | \\ ldmfd sp!,{r4,r5,r6,r7} |
| 256 | \\ bx lr |
| 257 | \\ |
| 258 | \\1: mov r0,r6 |
| 259 | \\ tst r5,#1 |
| 260 | \\ bne 1f |
| 261 | \\ mov lr,pc |
| 262 | \\ mov pc,r5 |
| 263 | \\2: mov r7,#1 |
| 264 | \\ svc 0 |
| 265 | \\ |
| 266 | \\1: mov lr,pc |
| 267 | \\ bx r5 |
| 268 | \\ b 2b |
| 269 | ); |
| 241 | 270 | } else { |
| 242 | 271 | @compileError("Implement clone() for this arch."); |
| 243 | 272 | } |