xref: /netbsd-src/sys/external/bsd/compiler_rt/dist/lib/builtins/i386/chkstk.S (revision ef84fd3bd8895f4e6be1e38baf19e6dc3255bc64)
1*ef84fd3bSjoerg// This file is dual licensed under the MIT and the University of Illinois Open
2*ef84fd3bSjoerg// Source Licenses. See LICENSE.TXT for details.
3*ef84fd3bSjoerg
4*ef84fd3bSjoerg#include "../assembly.h"
5*ef84fd3bSjoerg
6*ef84fd3bSjoerg// _chkstk routine
7*ef84fd3bSjoerg// This routine is windows specific
8*ef84fd3bSjoerg// http://msdn.microsoft.com/en-us/library/ms648426.aspx
9*ef84fd3bSjoerg
10*ef84fd3bSjoerg#ifdef __i386__
11*ef84fd3bSjoerg
12*ef84fd3bSjoerg.text
13*ef84fd3bSjoerg.balign 4
14*ef84fd3bSjoergDEFINE_COMPILERRT_FUNCTION(__chkstk_ms)
15*ef84fd3bSjoerg        push   %ecx
16*ef84fd3bSjoerg        push   %eax
17*ef84fd3bSjoerg        cmp    $0x1000,%eax
18*ef84fd3bSjoerg        lea    12(%esp),%ecx
19*ef84fd3bSjoerg        jb     1f
20*ef84fd3bSjoerg2:
21*ef84fd3bSjoerg        sub    $0x1000,%ecx
22*ef84fd3bSjoerg        test   %ecx,(%ecx)
23*ef84fd3bSjoerg        sub    $0x1000,%eax
24*ef84fd3bSjoerg        cmp    $0x1000,%eax
25*ef84fd3bSjoerg        ja     2b
26*ef84fd3bSjoerg1:
27*ef84fd3bSjoerg        sub    %eax,%ecx
28*ef84fd3bSjoerg        test   %ecx,(%ecx)
29*ef84fd3bSjoerg        pop    %eax
30*ef84fd3bSjoerg        pop    %ecx
31*ef84fd3bSjoerg        ret
32*ef84fd3bSjoergEND_COMPILERRT_FUNCTION(__chkstk_ms)
33*ef84fd3bSjoerg
34*ef84fd3bSjoerg#endif // __i386__
35