blob: ff5e443759ba9dff567674f461f7c6287f7ce686 [file] [log] [blame]
/*
* Copyright (c) 2022, Commonwealth Scientific and Industrial Research
* Organisation (CSIRO) ABN 41 687 119 230.
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/sys/util_macro.h>
#include <zephyr/arch/common/semihost.h>
#if !(defined(CONFIG_ISA_ARM) || defined(CONFIG_ISA_THUMB2))
#error Unsupported ISA
#endif
long semihost_exec(enum semihost_instr instr, void *args)
{
register unsigned long r0 __asm__ ("r0") = instr;
register void *r1 __asm__ ("r1") = args;
register long ret __asm__ ("r0");
if (IS_ENABLED(CONFIG_ISA_THUMB2)) {
__asm__ __volatile__ ("svc 0xab"
: "=r" (ret) : "r" (r0), "r" (r1) : "memory");
} else {
__asm__ __volatile__ ("svc 0x123456"
: "=r" (ret) : "r" (r0), "r" (r1) : "memory");
}
return ret;
}