Home | History | Annotate | Download | only in x86_64
      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