Add DevLib license information.
[bertos.git] / kern / switch_win32.s
1 /*!
2  * \file
3  * <!--
4  * Copyright 2004 Develer S.r.l. (http://www.develer.com/)
5  * Copyright 1999,2000,2001 Bernardo Innocenti <bernie@develer.com>
6  * This file is part of DevLib - See devlib/README for information.
7  * -->
8  *
9  * \brief i386 context switch for WIN32
10  *
11  * \version $Id$
12  *
13  * \author Bernardo Innocenti <bernie@develer.com>
14  */
15
16 __declspec(naked) void AsmSwitchContext(void * new_sp, void ** save_sp)
17 {
18         __asm
19         {
20                 push    eax
21                 push    ebx
22                 push    ecx
23                 push    edx
24                 push    esi
25                 push    edi
26                 push    ebp
27                 mov             ebp,dword ptr [esp+24h] ; ebp <- save_sp
28                 mov             dword ptr [ebp],esp             ; *save_sp = esp
29                 mov             esp,dword ptr [esp+20h] ; new_sp
30                 pop             ebp
31                 pop             edi
32                 pop             esi
33                 pop             edx
34                 pop             ecx
35                 pop             ebx
36                 pop             eax
37                 ret
38         }
39 }
40
41 __declspec(naked) void AsmReplaceContext(void * new_sp, void ** dummy)
42 {
43         __asm
44         {
45                 mov             esp,dword ptr [esp + 4] ; new_sp
46                 pop             ebp
47                 pop             edi
48                 pop             esi
49                 pop             edx
50                 pop             ecx
51                 pop             ebx
52                 pop             eax
53                 ret
54         }
55 }
56