Showing the changes to lib (1 of 2 files). Show all
Unified · Split
| @@ -0,0 +1,33 @@ | |||
| 1 | /* ---------------------------------------------- */ | ||
| 2 | /* alloca86_64.S */ | ||
| 3 | |||
| 4 | #include "../config.h" | ||
| 5 | |||
| 6 | .globl alloca | ||
| 7 | |||
| 8 | alloca: | ||
| 9 | pop %rdx | ||
| 10 | mov %rdi,%rax | ||
| 11 | add $3,%rax | ||
| 12 | and $-4,%rax | ||
| 13 | jz p3 | ||
| 14 | |||
| 15 | #ifdef TCC_TARGET_PE | ||
| 16 | /* XXX: not tested */ | ||
| 17 | p1: | ||
| 18 | cmp $4096,%rax | ||
| 19 | jle p2 | ||
| 20 | sub $4096,%rsp | ||
| 21 | sub $4096,%rax | ||
| 22 | test %rax,(%rsp) | ||
| 23 | jmp p1 | ||
| 24 | p2: | ||
| 25 | #endif | ||
| 26 | |||
| 27 | sub %rax,%rsp | ||
| 28 | mov %rsp,%rax | ||
| 29 | p3: | ||
| 30 | push %rdx | ||
| 31 | ret | ||
| 32 | |||
| 33 | /* ---------------------------------------------- */ | ||