Changelog: cleanup
[tinycc.git] / lib / alloca86-bt.S
blobffad51561fece465fd1328631a8ce59633a9b7fe
1 /* ---------------------------------------------- */
2 /* alloca86-bt.S */
4 .globl __bound_alloca
6 __bound_alloca:
7     pop     %edx
8     pop     %eax
9     mov     %eax, %ecx
10     add     $3,%eax
11     and     $-4,%eax
12     jz      p6
14 #ifdef TCC_TARGET_PE
15 p4:
16     cmp     $4096,%eax
17     jle     p5
18     sub     $4096,%esp
19     sub     $4096,%eax
20     test    %eax,(%esp)
21     jmp p4
23 p5:
24 #endif
26     sub     %eax,%esp
27     mov     %esp,%eax
29     push    %edx
30     push    %eax
31     push    %ecx
32     push    %eax
33     call   __bound_new_region
34     add    $8, %esp
35     pop     %eax
36     pop     %edx
38 p6:
39     push    %edx
40     push    %edx
41     ret
43 /* mark stack as nonexecutable */
44 #if defined __ELF__ && defined __linux__
45     .section    .note.GNU-stack,"",@progbits
46 #endif
47 /* ---------------------------------------------- */