// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception #include "../assembly.h" // __chkstk routine // This routine is windows specific. // http://msdn.microsoft.com/en-us/library/ms648426.aspx // This clobbers the register r12, and the condition codes, and uses r5 and r6 // as temporaries by backing them up and restoring them afterwards. // Does not modify any memory or the stack pointer. // movw r4, #256 // Number of bytes of stack, in units of 4 byte // bl __chkstk // sub.w sp, sp, r4 #define PAGE_SIZE 4096 .p2align 2 DEFINE_COMPILERRT_FUNCTION(__chkstk) lsl r4, r4, #2 mov r12, sp push {r5, r6} mov r5, r4 1: sub r12, r12, #PAGE_SIZE subs r5, r5, #PAGE_SIZE ldr r6, [r12] bgt 1b pop {r5, r6} bx lr END_COMPILERRT_FUNCTION(__chkstk) |