Unified · Split
| @@ -177,6 +177,10 @@ VPATH+=win32/lib · 176 unmodified lines | ||
| 177 | 177 | endif |
| 178 | 178 | ifeq ($(ARCH),i386) |
| 179 | 179 | LIBTCC1_OBJS+=alloca86.o alloca86-bt.o |
| 180 | +else | |
| 181 | +ifeq ($(ARCH),x86-64) | |
| 182 | +LIBTCC1_OBJS+=alloca86_64.o | |
| 183 | +endif | |
| 180 | 184 | endif |
| 181 | 185 | |
| 182 | 186 | %.o: %.c |
| @@ -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 | +/* ---------------------------------------------- */ | |