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 19DEFINE_COMPILERRT_FUNCTION(___chkstk_ms) 20 push %rcx 21 push %rax 22 cmp $0x1000,%rax 23 lea 24(%rsp),%rcx 24 jb 1f 252: 26 sub $0x1000,%rcx 27 test %rcx,(%rcx) 28 sub $0x1000,%rax 29 cmp $0x1000,%rax 30 ja 2b 311: 32 sub %rax,%rcx 33 test %rcx,(%rcx) 34 pop %rax 35 pop %rcx 36 ret 37END_COMPILERRT_FUNCTION(___chkstk_ms) 38 39#endif // __x86_64__ 40