1799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// This file is dual licensed under the MIT and the University of Illinois Open
2799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// Source Licenses. See LICENSE.TXT for details.
3799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar
4799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar#include "../assembly.h"
5799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar
6799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// _chkstk routine
7799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// This routine is windows specific
8799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// http://msdn.microsoft.com/en-us/library/ms648426.aspx
9799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar
10799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar#ifdef __i386__
11799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar
12799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar.text
13799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar.balign 4
14799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga NainarDEFINE_COMPILERRT_FUNCTION(__chkstk_ms)
15799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        push   %ecx
16799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        push   %eax
17799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        cmp    $0x1000,%eax
18799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        lea    12(%esp),%ecx
19799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        jb     1f
20799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar2:
21799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        sub    $0x1000,%ecx
22799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        test   %ecx,(%ecx)
23799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        sub    $0x1000,%eax
24799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        cmp    $0x1000,%eax
25799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        ja     2b
26799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar1:
27799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        sub    %eax,%ecx
28799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        test   %ecx,(%ecx)
29799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        pop    %eax
30799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        pop    %ecx
31799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        ret
32799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga NainarEND_COMPILERRT_FUNCTION(__chkstk_ms)
33799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar
34799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar#endif // __i386__
35