xref: /dragonfly/test/sysperf/sw.S (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
1
2                    /*
3                     * sw.S
4                     *
5                     * $DragonFly: src/test/sysperf/sw.S,v 1.1 2003/08/12 02:29:44 dillon Exp $
6                     */
7                    .text
8                    .globl    qswitch, qrestore, qinit, qirestore, qstart
9
10#if USE_ALL
11
12#define PUSHAL                pushal
13#define POPAL                 popal
14
15#endif
16
17#if USE_CALLU1
18
19#define PUSHAL                \
20          pushl     %ebx ;    \
21          pushl     %esi ;    \
22          pushl     %edi ;    \
23          pushl     %ebp
24
25#define POPAL                 \
26          popl      %ebp ;    \
27          popl      %edi ;    \
28          popl      %esi ;    \
29          popl      %ebx
30
31#endif
32
33#if USE_CALLU2
34
35#define PUSHAL                          \
36          subl      $16,%esp ;          \
37          movl      %ebx,(%esp) ;       \
38          movl      %esi,4(%esp) ;      \
39          movl      %edi,8(%esp) ;      \
40          movl      %ebp,12(%esp)
41
42#define POPAL                           \
43          movl      (%esp),%ebx ;       \
44          movl      4(%esp),%esi ;  \
45          movl      8(%esp),%edi ;  \
46          movl      12(%esp),%ebp ; \
47          addl      $16,%esp
48
49#endif
50
51                    /* qswitch(&olddesc, newdesc) */
52qswitch:
53                    movl      8(%esp),%eax        /* new state */
54                    movl      4(%esp),%edx        /* save old state */
55                    PUSHAL
56                    pushl     $qrestore
57                    movl      %esp,(%edx)
58                    movl      %eax,%esp
59                    ret
60
61                    /* qstart(newdesc) */
62qstart:
63                    movl      4(%esp),%esp
64                    ret
65
66qrestore:
67                    POPAL
68                    ret
69
70                    /* newdesc = qinit(topofstk, func, arg) */
71qinit:
72                    movl      4(%esp),%eax
73                    subl      $16,%eax
74                    movl      $qirestore,0(%eax)
75                    movl      8(%esp),%ecx
76                    movl      %ecx,4(%eax)
77                    movl      $0,8(%eax)
78                    movl      12(%esp),%ecx
79                    movl      %ecx,12(%eax)
80                    ret /* return eax */
81
82qirestore:
83                    ret
84