aboutsummaryrefslogtreecommitdiff
path: root/tinycc/tests/asm-c-connect-2.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-2.c
lol
Diffstat (limited to 'tinycc/tests/asm-c-connect-2.c')
-rw-r--r--tinycc/tests/asm-c-connect-2.c48
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");
+}