diff options
| author | Martin Storsjo <martin@martin.st> | 2017-12-20 06:52:52 +0000 |
|---|---|---|
| committer | Martin Storsjo <martin@martin.st> | 2017-12-20 06:52:52 +0000 |
| commit | f8e19b37995751f7913692bf9eed8ebb14a95f2d (patch) | |
| tree | 91db4e1b9fb2611d74311df3daad20f06568495b | |
| parent | 2778fd0b59b64078e8fb12688e31a628b2cf75cc (diff) | |
| download | bcm5719-llvm-f8e19b37995751f7913692bf9eed8ebb14a95f2d.tar.gz bcm5719-llvm-f8e19b37995751f7913692bf9eed8ebb14a95f2d.zip | |
[builtins] Implement __chkstk for arm64 windows
Differential Revision: https://reviews.llvm.org/D41134
llvm-svn: 321151
| -rw-r--r-- | compiler-rt/lib/builtins/CMakeLists.txt | 6 | ||||
| -rw-r--r-- | compiler-rt/lib/builtins/aarch64/chkstk.S | 34 |
2 files changed, 40 insertions, 0 deletions
diff --git a/compiler-rt/lib/builtins/CMakeLists.txt b/compiler-rt/lib/builtins/CMakeLists.txt index 6fa95831912..6a0faf8ebf0 100644 --- a/compiler-rt/lib/builtins/CMakeLists.txt +++ b/compiler-rt/lib/builtins/CMakeLists.txt @@ -446,6 +446,12 @@ set(aarch64_SOURCES ${GENERIC_TF_SOURCES} ${GENERIC_SOURCES}) +if (MINGW) + set(aarch64_SOURCES + ${aarch64_SOURCES} + aarch64/chkstk.S) +endif() + set(armhf_SOURCES ${arm_SOURCES}) set(armv7_SOURCES ${arm_SOURCES}) set(armv7s_SOURCES ${arm_SOURCES}) diff --git a/compiler-rt/lib/builtins/aarch64/chkstk.S b/compiler-rt/lib/builtins/aarch64/chkstk.S new file mode 100644 index 00000000000..89ec90b08a1 --- /dev/null +++ b/compiler-rt/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__ |

