diff options
| author | Shinichiro Hamaji <shinichiro.hamaji _at_ gmail.com> | 2009-06-09 03:23:08 +0900 |
|---|---|---|
| committer | Shinichiro Hamaji <shinichiro.hamaji _at_ gmail.com> | 2009-06-09 03:23:08 +0900 |
| commit | 8ea8305199496ba29b6d0da2de07aea4441844aa (patch) | |
| tree | 7be3548c7ebde884607653e2ada85a10629cfde7 | |
| parent | 110a4edc154f6fb73ef3d312630455f68641123f (diff) | |
| download | tinycc-8ea8305199496ba29b6d0da2de07aea4441844aa.tar.gz tinycc-8ea8305199496ba29b6d0da2de07aea4441844aa.tar.bz2 | |
x86-64: Add alloca.
| -rw-r--r-- | Makefile | 4 | ||||
| -rw-r--r-- | lib/alloca86_64.S | 33 |
2 files changed, 37 insertions, 0 deletions
@@ -177,6 +177,10 @@ VPATH+=win32/lib endif ifeq ($(ARCH),i386) LIBTCC1_OBJS+=alloca86.o alloca86-bt.o +else +ifeq ($(ARCH),x86-64) +LIBTCC1_OBJS+=alloca86_64.o +endif endif %.o: %.c diff --git a/lib/alloca86_64.S b/lib/alloca86_64.S new file mode 100644 index 0000000..1751d37 --- /dev/null +++ b/lib/alloca86_64.S @@ -0,0 +1,33 @@ +/* ---------------------------------------------- */ +/* alloca86_64.S */ + +#include "../config.h" + +.globl alloca + +alloca: + pop %rdx + mov %rdi,%rax + add $3,%rax + and $-4,%rax + jz p3 + +#ifdef TCC_TARGET_PE + /* XXX: not tested */ +p1: + cmp $4096,%rax + jle p2 + sub $4096,%rsp + sub $4096,%rax + test %rax,(%rsp) + jmp p1 +p2: +#endif + + sub %rax,%rsp + mov %rsp,%rax +p3: + push %rdx + ret + +/* ---------------------------------------------- */ |
