revert between 56095 -> 55830 in arch
[AROS.git] / arch / m68k-all / posixc / vfork.s
blobd2aaf06059b9e6416bca5f38cfd633ba3895b8bd
1 /*
2 * vfork.s
4 * Created on: Aug 23, 2010
5 * Author: misc
7 * $Id$
9 The jmp_buf is filled as follows (d0/d1/a0/a1 are not saved):
11 _jmp_buf offset contents
12 [0] 0 old pc
13 [1] 4 d2
14 [2] 8 d3
15 [3] 12 d4
16 [4] 16 d5
17 [5] 20 d6
18 [6] 24 d7
19 [7] 28 a2
20 [8] 32 a3
21 [9] 36 a4
22 [10] 40 a5
23 [11] 44 a6
24 [12] 48 old sp
25 [13] 52 padding
26 [14] 56 padding
27 [15] 60 DEBUG_MAGIC
30 #include "aros/m68k/asm.h"
32 .text
33 .align 2
34 .global AROS_CDEFNAME(vfork)
35 .type AROS_CDEFNAME(vfork),%function
37 AROS_CDEFNAME(vfork):
38 move.l %sp@+,%d1 /* Return address -> d1 */
39 move.l %sp, %a0 /* Save aside %sp */
40 lea.l %sp@(-4 * 16),%sp /* Reverse space for jmp_buf */
41 movem.l %d1-%d7/%a2-%a6,%sp@ /* Registers */
42 move.l %a0, %sp@(4 * 12) /* Set %sp in jmp_buf */
43 #if DEBUG
44 move.l #(DEBUG_MAGIC+1),%sp@(4 * 15)
45 #endif
46 move.l %sp,%sp@- /* Push jmp_buf (sp) address */
47 jsr __vfork /* __vfork call won't return */