xref: /openbmc/qemu/tests/tcg/arm/semicall.h (revision d316f1b14615854de1bf4c0a9789e9c8951cc437)
1f0593809SAlex Bennée /*
23539d84dSAlex Bennée  * Semihosting Tests - ARM Helper
3f0593809SAlex Bennée  *
4*542b10bdSAlex Bennée  * Copyright (c) 2019, 2024
5f0593809SAlex Bennée  * Written by Alex Bennée <alex.bennee@linaro.org>
6f0593809SAlex Bennée  *
7*542b10bdSAlex Bennée  * SPDX-License-Identifier: GPL-2.0-or-later
8f0593809SAlex Bennée  */
9f0593809SAlex Bennée 
__semi_call(uintptr_t type,uintptr_t arg0)10f0593809SAlex Bennée uintptr_t __semi_call(uintptr_t type, uintptr_t arg0)
11f0593809SAlex Bennée {
12f0593809SAlex Bennée     register uintptr_t t asm("r0") = type;
13f0593809SAlex Bennée     register uintptr_t a0 asm("r1") = arg0;
14f0593809SAlex Bennée #ifdef __thumb__
15f0593809SAlex Bennée #  define SVC  "svc 0xab"
16f0593809SAlex Bennée #else
17f0593809SAlex Bennée #  define SVC  "svc 0x123456"
18f0593809SAlex Bennée #endif
19f0593809SAlex Bennée     asm(SVC : "=r" (t)
20f0593809SAlex Bennée         : "r" (t), "r" (a0));
21f0593809SAlex Bennée     return t;
22f0593809SAlex Bennée }
23