]>
Commit | Line | Data |
---|---|---|
92a42be0 SL |
1 | // This file is dual licensed under the MIT and the University of Illinois Open |
2 | // Source Licenses. See LICENSE.TXT for details. | |
3 | ||
4 | #include "../assembly.h" | |
5 | ||
6 | // _chkstk routine | |
7 | // This routine is windows specific | |
8 | // http://msdn.microsoft.com/en-us/library/ms648426.aspx | |
9 | ||
10 | // Notes from r227519 | |
11 | // MSVC x64s __chkstk and cygmings ___chkstk_ms do not adjust %rsp | |
12 | // themselves. It also does not clobber %rax so we can reuse it when | |
13 | // adjusting %rsp. | |
14 | ||
15 | #ifdef __x86_64__ | |
16 | ||
17 | .text | |
18 | .balign 4 | |
19 | DEFINE_COMPILERRT_FUNCTION(___chkstk_ms) | |
20 | push %rcx | |
21 | push %rax | |
22 | cmp $0x1000,%rax | |
23 | lea 24(%rsp),%rcx | |
24 | jb 1f | |
25 | 2: | |
26 | sub $0x1000,%rcx | |
27 | test %rcx,(%rcx) | |
28 | sub $0x1000,%rax | |
29 | cmp $0x1000,%rax | |
30 | ja 2b | |
31 | 1: | |
32 | sub %rax,%rcx | |
33 | test %rcx,(%rcx) | |
34 | pop %rax | |
35 | pop %rcx | |
36 | ret | |
37 | END_COMPILERRT_FUNCTION(___chkstk_ms) | |
38 | ||
39 | #endif // __x86_64__ |