diff options
Diffstat (limited to 'tinycc/tests/asm-c-connect-2.c')
| -rw-r--r-- | tinycc/tests/asm-c-connect-2.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/tinycc/tests/asm-c-connect-2.c b/tinycc/tests/asm-c-connect-2.c new file mode 100644 index 0000000..654db0e --- /dev/null +++ b/tinycc/tests/asm-c-connect-2.c @@ -0,0 +1,48 @@ +#include <stdio.h> + +#if (defined _WIN32 || defined __APPLE__) && (!defined __TINYC__ || defined __leading_underscore) +# define _ "_" +#else +# define _ +#endif + +#ifdef __clang__ +/* clang needs some help tp not throw functions away even at -O0 */ +#define __USED __attribute__((__used__)) +#else +#define __USED +#endif + +int x3(void) +{ + printf(" x3"); + return 3; +} + +/* That callx4 is defined globally (as if ".globl callx4") + is a TCC extension. GCC doesn't behave like this. */ +void callx4(void); +#if __i386__ +__asm__(_"callx4: call "_"x4; ret;" +#else +/* Keep stack aligned */ +__asm__(_"callx4: sub $8,%rsp; call "_"x4; add $8,%rsp; ret;" +#endif +#ifndef __TINYC__ + " .global "_"callx4" +#endif +); + +extern void x5(void); + +void callx5_again(void); +void callx5_again(void) +{ + x5(); + asm("call "_"x6"); +} + +static void __USED x6() +{ + printf(" x6-2"); +} |
