2 * Target-specific parts of semihosting/arm-compat-semi.c.
4 * Copyright (c) 2005, 2007 CodeSourcery.
5 * Copyright (c) 2019, 2022 Linaro
7 * SPDX-License-Identifier: GPL-2.0-or-later
10 #ifndef TARGET_ARM_COMMON_SEMI_TARGET_H
11 #define TARGET_ARM_COMMON_SEMI_TARGET_H
13 #include "target/arm/cpu-qom.h"
15 static inline target_ulong
common_semi_arg(CPUState
*cs
, int argno
)
17 ARMCPU
*cpu
= ARM_CPU(cs
);
18 CPUARMState
*env
= &cpu
->env
;
20 return env
->xregs
[argno
];
22 return env
->regs
[argno
];
26 static inline void common_semi_set_ret(CPUState
*cs
, target_ulong ret
)
28 ARMCPU
*cpu
= ARM_CPU(cs
);
29 CPUARMState
*env
= &cpu
->env
;
37 static inline bool common_semi_sys_exit_extended(CPUState
*cs
, int nr
)
39 return nr
== TARGET_SYS_EXIT_EXTENDED
|| is_a64(cpu_env(cs
));
42 static inline bool is_64bit_semihosting(CPUArchState
*env
)
47 static inline target_ulong
common_semi_stack_bottom(CPUState
*cs
)
49 ARMCPU
*cpu
= ARM_CPU(cs
);
50 CPUARMState
*env
= &cpu
->env
;
51 return is_a64(env
) ? env
->xregs
[31] : env
->regs
[13];
54 static inline bool common_semi_has_synccache(CPUArchState
*env
)
56 /* Ok for A64, invalid for A32/T32 */