https://bitbucket.org/daniel_fort/magic-lantern
Raw File
Tip revision: 8ca1d64d5fdf83d9f9f42629b5a695989a7d0a44 authored by g3gg0 on 11 April 2015, 19:44:21 UTC
Backed out changeset: 626617b30f81
Tip revision: 8ca1d64
alloca86_64.S
/* ---------------------------------------------- */
/* alloca86_64.S */

.globl alloca

alloca:
    pop     %rdx
#ifdef TCC_TARGET_PE
    mov     %rcx,%rax
#else
    mov     %rdi,%rax
#endif
    add     $15,%rax
    and     $-16,%rax
    jz      p3

#ifdef TCC_TARGET_PE
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
#ifdef TCC_TARGET_PE
    add     $32,%rax
#endif

p3:
    push    %rdx
    ret

/* mark stack as nonexecutable */
#if defined __ELF__ && defined __linux__
    .section    .note.GNU-stack,"",@progbits
#endif
/* ---------------------------------------------- */
back to top