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__ 40