diff options
| author | Uneven Prankster <unevenprankster@protonmail.com> | 2023-07-12 13:22:29 -0300 |
|---|---|---|
| committer | Uneven Prankster <unevenprankster@protonmail.com> | 2023-07-12 13:22:29 -0300 |
| commit | fa2bdd711212ba6b7a94a20971e8bfa281e73296 (patch) | |
| tree | 6713b3c0379507d49558287b71dd360ce188a2f0 /tinycc/tests/asm-c-connect-2.c | |
lol
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"); +} |
