11b3b7693SRichard Henderson /* 21b3b7693SRichard Henderson * Target-specific parts of semihosting/arm-compat-semi.c. 31b3b7693SRichard Henderson * 41b3b7693SRichard Henderson * Copyright (c) 2005, 2007 CodeSourcery. 51b3b7693SRichard Henderson * Copyright (c) 2019, 2022 Linaro 61b3b7693SRichard Henderson * 71b3b7693SRichard Henderson * SPDX-License-Identifier: GPL-2.0-or-later 81b3b7693SRichard Henderson */ 91b3b7693SRichard Henderson 101b3b7693SRichard Henderson #ifndef TARGET_ARM_COMMON_SEMI_TARGET_H 111b3b7693SRichard Henderson #define TARGET_ARM_COMMON_SEMI_TARGET_H 121b3b7693SRichard Henderson 13*30722e04SPeter Maydell #include "target/arm/cpu-qom.h" 141b3b7693SRichard Henderson common_semi_arg(CPUState * cs,int argno)151b3b7693SRichard Hendersonstatic inline target_ulong common_semi_arg(CPUState *cs, int argno) 161b3b7693SRichard Henderson { 171b3b7693SRichard Henderson ARMCPU *cpu = ARM_CPU(cs); 181b3b7693SRichard Henderson CPUARMState *env = &cpu->env; 191b3b7693SRichard Henderson if (is_a64(env)) { 201b3b7693SRichard Henderson return env->xregs[argno]; 211b3b7693SRichard Henderson } else { 221b3b7693SRichard Henderson return env->regs[argno]; 231b3b7693SRichard Henderson } 241b3b7693SRichard Henderson } 251b3b7693SRichard Henderson common_semi_set_ret(CPUState * cs,target_ulong ret)261b3b7693SRichard Hendersonstatic inline void common_semi_set_ret(CPUState *cs, target_ulong ret) 271b3b7693SRichard Henderson { 281b3b7693SRichard Henderson ARMCPU *cpu = ARM_CPU(cs); 291b3b7693SRichard Henderson CPUARMState *env = &cpu->env; 301b3b7693SRichard Henderson if (is_a64(env)) { 311b3b7693SRichard Henderson env->xregs[0] = ret; 321b3b7693SRichard Henderson } else { 331b3b7693SRichard Henderson env->regs[0] = ret; 341b3b7693SRichard Henderson } 351b3b7693SRichard Henderson } 361b3b7693SRichard Henderson common_semi_sys_exit_extended(CPUState * cs,int nr)371b3b7693SRichard Hendersonstatic inline bool common_semi_sys_exit_extended(CPUState *cs, int nr) 381b3b7693SRichard Henderson { 39b77af26eSRichard Henderson return nr == TARGET_SYS_EXIT_EXTENDED || is_a64(cpu_env(cs)); 401b3b7693SRichard Henderson } 411b3b7693SRichard Henderson is_64bit_semihosting(CPUArchState * env)421b3b7693SRichard Hendersonstatic inline bool is_64bit_semihosting(CPUArchState *env) 431b3b7693SRichard Henderson { 441b3b7693SRichard Henderson return is_a64(env); 451b3b7693SRichard Henderson } 461b3b7693SRichard Henderson common_semi_stack_bottom(CPUState * cs)471b3b7693SRichard Hendersonstatic inline target_ulong common_semi_stack_bottom(CPUState *cs) 481b3b7693SRichard Henderson { 491b3b7693SRichard Henderson ARMCPU *cpu = ARM_CPU(cs); 501b3b7693SRichard Henderson CPUARMState *env = &cpu->env; 511b3b7693SRichard Henderson return is_a64(env) ? env->xregs[31] : env->regs[13]; 521b3b7693SRichard Henderson } 531b3b7693SRichard Henderson common_semi_has_synccache(CPUArchState * env)541b3b7693SRichard Hendersonstatic inline bool common_semi_has_synccache(CPUArchState *env) 551b3b7693SRichard Henderson { 561b3b7693SRichard Henderson /* Ok for A64, invalid for A32/T32 */ 571b3b7693SRichard Henderson return is_a64(env); 581b3b7693SRichard Henderson } 591b3b7693SRichard Henderson 601b3b7693SRichard Henderson #endif 61