From 1d871d6cd3fed01cd50dd63e743bd2ea6e65eab6 Mon Sep 17 00:00:00 2001 From: Martin Storsjo Date: Wed, 20 Dec 2017 06:52:52 +0000 Subject: [builtins] Implement __chkstk for arm64 windows Differential Revision: https://reviews.llvm.org/D41134 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@321151 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/builtins/aarch64/chkstk.S | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 lib/builtins/aarch64/chkstk.S (limited to 'lib/builtins/aarch64/chkstk.S') diff --git a/lib/builtins/aarch64/chkstk.S b/lib/builtins/aarch64/chkstk.S new file mode 100644 index 000000000..89ec90b08 --- /dev/null +++ b/lib/builtins/aarch64/chkstk.S @@ -0,0 +1,34 @@ +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. + +#include "../assembly.h" + +// __chkstk routine +// This routine is windows specific. +// http://msdn.microsoft.com/en-us/library/ms648426.aspx + +// This clobbers registers x16 and x17. +// Does not modify any memory or the stack pointer. + +// mov x15, #256 // Number of bytes of stack, in units of 16 byte +// bl __chkstk +// sub sp, sp, x15, lsl #4 + +#ifdef __aarch64__ + +#define PAGE_SIZE 4096 + + .p2align 2 +DEFINE_COMPILERRT_FUNCTION(__chkstk) + lsl x16, x15, #4 + mov x17, sp +1: + sub x17, x17, #PAGE_SIZE + subs x16, x16, #PAGE_SIZE + ldr xzr, [x17] + b.gt 1b + + ret +END_COMPILERRT_FUNCTION(__chkstk) + +#endif // __aarch64__ -- cgit v1.2.3