- libtcc.c/tccpp.c: fix -U option for multiple input files - libtcc: remove decl of tcc_add_crt() for PE - tcc.h: define __i386__ and __x86_64__ for msvc - tcc.h: undef __attribute__ for __TINYC__ on gnu/linux platforms - tccelf.c: disable prepare_dynamic_rel unless x86/x64 - tccpe.c: construct rather than predefine PE section flags - tccpp.c: (alt.) fix access of dead stack variable after error/longjmp - x86_64-gen.c: fix func_alloca chain for nocode_wanted - tccpp.c/tccgen.c: improve file:line info for inline functions - winapi/winnt.h: correct position for DECLSPEC_ALIGN attribute - win32/lib/crt: simplify top exception handler (needed for signal) - arm64-gen.c: remove dprintf left from VT_CMP commit - tccgen.c: limit binary scan with gcase to > 8 (= smaller code) - tccgen.c: call save_regs(4) in gen_opl for cmp-ops (see test in tcctest.c)
		
			
				
	
	
		
			69 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
/* ---------------------------------------------- */
 | 
						|
/* chkstk86.s */
 | 
						|
 | 
						|
/* ---------------------------------------------- */
 | 
						|
#ifndef __x86_64__
 | 
						|
/* ---------------------------------------------- */
 | 
						|
 | 
						|
.globl __chkstk
 | 
						|
 | 
						|
__chkstk:
 | 
						|
    xchg    (%esp),%ebp     /* store ebp, get ret.addr */
 | 
						|
    push    %ebp            /* push ret.addr */
 | 
						|
    lea     4(%esp),%ebp    /* setup frame ptr */
 | 
						|
    push    %ecx            /* save ecx */
 | 
						|
    mov     %ebp,%ecx
 | 
						|
P0:
 | 
						|
    sub     $4096,%ecx
 | 
						|
    test    %eax,(%ecx)
 | 
						|
    sub     $4096,%eax
 | 
						|
    cmp     $4096,%eax
 | 
						|
    jge     P0
 | 
						|
    sub     %eax,%ecx
 | 
						|
    test    %eax,(%ecx)
 | 
						|
 | 
						|
    mov     %esp,%eax
 | 
						|
    mov     %ecx,%esp
 | 
						|
    mov     (%eax),%ecx     /* restore ecx */
 | 
						|
    jmp     *4(%eax)
 | 
						|
 | 
						|
/* ---------------------------------------------- */
 | 
						|
#else
 | 
						|
/* ---------------------------------------------- */
 | 
						|
 | 
						|
.globl __chkstk
 | 
						|
 | 
						|
__chkstk:
 | 
						|
    xchg    (%rsp),%rbp     /* store ebp, get ret.addr */
 | 
						|
    push    %rbp            /* push ret.addr */
 | 
						|
    lea     8(%rsp),%rbp    /* setup frame ptr */
 | 
						|
    push    %rcx            /* save ecx */
 | 
						|
    mov     %rbp,%rcx
 | 
						|
    movslq  %eax,%rax
 | 
						|
P0:
 | 
						|
    sub     $4096,%rcx
 | 
						|
    test    %rax,(%rcx)
 | 
						|
    sub     $4096,%rax
 | 
						|
    cmp     $4096,%rax
 | 
						|
    jge     P0
 | 
						|
    sub     %rax,%rcx
 | 
						|
    test    %rax,(%rcx)
 | 
						|
 | 
						|
    mov     %rsp,%rax
 | 
						|
    mov     %rcx,%rsp
 | 
						|
    mov     (%rax),%rcx     /* restore ecx */
 | 
						|
    jmp     *8(%rax)
 | 
						|
 | 
						|
/* ---------------------------------------------- */
 | 
						|
/* setjmp/longjmp support */
 | 
						|
 | 
						|
.globl tinyc_getbp
 | 
						|
tinyc_getbp:
 | 
						|
    mov %rbp,%rax
 | 
						|
    ret
 | 
						|
 | 
						|
/* ---------------------------------------------- */
 | 
						|
#endif
 | 
						|
/* ---------------------------------------------- */
 | 
						|
 | 
						|
 |