Changelog: cleanup
[tinycc.git] / lib / alloca86_64.S
blobdd46ce6f833e06aebf4fb8aba86ed855b8f6d034
1 /* ---------------------------------------------- */
2 /* alloca86_64.S */
4 .globl alloca
6 alloca:
7     pop     %rdx
8 #ifdef TCC_TARGET_PE
9     mov     %rcx,%rax
10 #else
11     mov     %rdi,%rax
12 #endif
13     add     $15,%rax
14     and     $-16,%rax
15     jz      p3
17 #ifdef TCC_TARGET_PE
18 p1:
19     cmp     $4096,%rax
20     jle     p2
21     sub     $4096,%rsp
22     sub     $4096,%rax
23     test    %rax,(%rsp)
24     jmp p1
25 p2:
26 #endif
28     sub     %rax,%rsp
29     mov     %rsp,%rax
30 #ifdef TCC_TARGET_PE
31     add     $32,%rax
32 #endif
34 p3:
35     push    %rdx
36     ret
38 /* mark stack as nonexecutable */
39 #if defined __ELF__ && defined __linux__
40     .section    .note.GNU-stack,"",@progbits
41 #endif
42 /* ---------------------------------------------- */