aboutsummaryrefslogtreecommitdiff
path: root/tests/tcg/arm/semicall.h
diff options
context:
space:
mode:
Diffstat (limited to 'tests/tcg/arm/semicall.h')
-rw-r--r--tests/tcg/arm/semicall.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/tests/tcg/arm/semicall.h b/tests/tcg/arm/semicall.h
new file mode 100644
index 0000000000..624937c557
--- /dev/null
+++ b/tests/tcg/arm/semicall.h
@@ -0,0 +1,22 @@
+/*
+ * Semihosting Tests - ARM Helper
+ *
+ * Copyright (c) 2019, 2024
+ * Written by Alex Bennée <alex.bennee@linaro.org>
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+uintptr_t __semi_call(uintptr_t type, uintptr_t arg0)
+{
+ register uintptr_t t asm("r0") = type;
+ register uintptr_t a0 asm("r1") = arg0;
+#ifdef __thumb__
+# define SVC "svc 0xab"
+#else
+# define SVC "svc 0x123456"
+#endif
+ asm(SVC : "=r" (t)
+ : "r" (t), "r" (a0));
+ return t;
+}