aboutsummaryrefslogtreecommitdiff
path: root/tinycc/tests/asm-c-connect-1.c
diff options
context:
space:
mode:
authorUneven Prankster <unevenprankster@protonmail.com>2023-07-12 13:22:29 -0300
committerUneven Prankster <unevenprankster@protonmail.com>2023-07-12 13:22:29 -0300
commitfa2bdd711212ba6b7a94a20971e8bfa281e73296 (patch)
tree6713b3c0379507d49558287b71dd360ce188a2f0 /tinycc/tests/asm-c-connect-1.c
lol
Diffstat (limited to 'tinycc/tests/asm-c-connect-1.c')
-rw-r--r--tinycc/tests/asm-c-connect-1.c69
1 files changed, 69 insertions, 0 deletions
diff --git a/tinycc/tests/asm-c-connect-1.c b/tinycc/tests/asm-c-connect-1.c
new file mode 100644
index 0000000..90f59c8
--- /dev/null
+++ b/tinycc/tests/asm-c-connect-1.c
@@ -0,0 +1,69 @@
+#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
+
+static int __USED x1_c (void)
+{
+ printf(" x1");
+ return 1;
+}
+
+#if __i386__
+asm(".text;"_"x1: call "_"x1_c; ret");
+#else
+/* Keep stack aligned */
+asm(".text;"_"x1: sub $8,%rsp; call "_"x1_c; add $8,%rsp; ret");
+#endif
+
+void callx4(void);
+void callx5_again(void);
+
+void x6()
+{
+ printf(" x6-1");
+}
+
+int main(int argc, char *argv[])
+{
+ printf("*");
+ asm("call "_"x1");
+ asm("call "_"x2");
+ asm("call "_"x3");
+ callx4();
+ asm("call "_"x5");
+ callx5_again();
+ x6();
+ printf(" *\n");
+ return 0;
+}
+
+static
+int __USED x2(void)
+{
+ printf(" x2");
+ return 2;
+}
+
+extern int x3(void);
+
+void x4(void)
+{
+ printf(" x4");
+}
+
+void x5(void);
+void x5(void)
+{
+ printf(" x5");
+}