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éeuintptr_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