mirror of https://github.com/xqemu/xqemu.git
accel/tcg: move USER code to user-exec.c
Suggested-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-Id: <20170912211934.20919-1-f4bug@amsat.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
10f7d4d53d
commit
a411d29637
|
@ -178,57 +178,3 @@ void HELPER(exit_atomic)(CPUArchState *env)
|
||||||
{
|
{
|
||||||
cpu_loop_exit_atomic(ENV_GET_CPU(env), GETPC());
|
cpu_loop_exit_atomic(ENV_GET_CPU(env), GETPC());
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef CONFIG_SOFTMMU
|
|
||||||
/* The softmmu versions of these helpers are in cputlb.c. */
|
|
||||||
|
|
||||||
/* Do not allow unaligned operations to proceed. Return the host address. */
|
|
||||||
static void *atomic_mmu_lookup(CPUArchState *env, target_ulong addr,
|
|
||||||
int size, uintptr_t retaddr)
|
|
||||||
{
|
|
||||||
/* Enforce qemu required alignment. */
|
|
||||||
if (unlikely(addr & (size - 1))) {
|
|
||||||
cpu_loop_exit_atomic(ENV_GET_CPU(env), retaddr);
|
|
||||||
}
|
|
||||||
return g2h(addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Macro to call the above, with local variables from the use context. */
|
|
||||||
#define ATOMIC_MMU_LOOKUP atomic_mmu_lookup(env, addr, DATA_SIZE, GETPC())
|
|
||||||
|
|
||||||
#define ATOMIC_NAME(X) HELPER(glue(glue(atomic_ ## X, SUFFIX), END))
|
|
||||||
#define EXTRA_ARGS
|
|
||||||
|
|
||||||
#define DATA_SIZE 1
|
|
||||||
#include "atomic_template.h"
|
|
||||||
|
|
||||||
#define DATA_SIZE 2
|
|
||||||
#include "atomic_template.h"
|
|
||||||
|
|
||||||
#define DATA_SIZE 4
|
|
||||||
#include "atomic_template.h"
|
|
||||||
|
|
||||||
#ifdef CONFIG_ATOMIC64
|
|
||||||
#define DATA_SIZE 8
|
|
||||||
#include "atomic_template.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* The following is only callable from other helpers, and matches up
|
|
||||||
with the softmmu version. */
|
|
||||||
|
|
||||||
#ifdef CONFIG_ATOMIC128
|
|
||||||
|
|
||||||
#undef EXTRA_ARGS
|
|
||||||
#undef ATOMIC_NAME
|
|
||||||
#undef ATOMIC_MMU_LOOKUP
|
|
||||||
|
|
||||||
#define EXTRA_ARGS , TCGMemOpIdx oi, uintptr_t retaddr
|
|
||||||
#define ATOMIC_NAME(X) \
|
|
||||||
HELPER(glue(glue(glue(atomic_ ## X, SUFFIX), END), _mmu))
|
|
||||||
#define ATOMIC_MMU_LOOKUP atomic_mmu_lookup(env, addr, DATA_SIZE, retaddr)
|
|
||||||
|
|
||||||
#define DATA_SIZE 16
|
|
||||||
#include "atomic_template.h"
|
|
||||||
#endif /* CONFIG_ATOMIC128 */
|
|
||||||
|
|
||||||
#endif /* !CONFIG_SOFTMMU */
|
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include "qemu/bitops.h"
|
#include "qemu/bitops.h"
|
||||||
#include "exec/cpu_ldst.h"
|
#include "exec/cpu_ldst.h"
|
||||||
#include "translate-all.h"
|
#include "translate-all.h"
|
||||||
|
#include "exec/helper-proto.h"
|
||||||
|
|
||||||
#undef EAX
|
#undef EAX
|
||||||
#undef ECX
|
#undef ECX
|
||||||
|
@ -573,3 +574,54 @@ int cpu_signal_handler(int host_signum, void *pinfo,
|
||||||
#error host CPU specific signal handler needed
|
#error host CPU specific signal handler needed
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* The softmmu versions of these helpers are in cputlb.c. */
|
||||||
|
|
||||||
|
/* Do not allow unaligned operations to proceed. Return the host address. */
|
||||||
|
static void *atomic_mmu_lookup(CPUArchState *env, target_ulong addr,
|
||||||
|
int size, uintptr_t retaddr)
|
||||||
|
{
|
||||||
|
/* Enforce qemu required alignment. */
|
||||||
|
if (unlikely(addr & (size - 1))) {
|
||||||
|
cpu_loop_exit_atomic(ENV_GET_CPU(env), retaddr);
|
||||||
|
}
|
||||||
|
return g2h(addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Macro to call the above, with local variables from the use context. */
|
||||||
|
#define ATOMIC_MMU_LOOKUP atomic_mmu_lookup(env, addr, DATA_SIZE, GETPC())
|
||||||
|
|
||||||
|
#define ATOMIC_NAME(X) HELPER(glue(glue(atomic_ ## X, SUFFIX), END))
|
||||||
|
#define EXTRA_ARGS
|
||||||
|
|
||||||
|
#define DATA_SIZE 1
|
||||||
|
#include "atomic_template.h"
|
||||||
|
|
||||||
|
#define DATA_SIZE 2
|
||||||
|
#include "atomic_template.h"
|
||||||
|
|
||||||
|
#define DATA_SIZE 4
|
||||||
|
#include "atomic_template.h"
|
||||||
|
|
||||||
|
#ifdef CONFIG_ATOMIC64
|
||||||
|
#define DATA_SIZE 8
|
||||||
|
#include "atomic_template.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* The following is only callable from other helpers, and matches up
|
||||||
|
with the softmmu version. */
|
||||||
|
|
||||||
|
#ifdef CONFIG_ATOMIC128
|
||||||
|
|
||||||
|
#undef EXTRA_ARGS
|
||||||
|
#undef ATOMIC_NAME
|
||||||
|
#undef ATOMIC_MMU_LOOKUP
|
||||||
|
|
||||||
|
#define EXTRA_ARGS , TCGMemOpIdx oi, uintptr_t retaddr
|
||||||
|
#define ATOMIC_NAME(X) \
|
||||||
|
HELPER(glue(glue(glue(atomic_ ## X, SUFFIX), END), _mmu))
|
||||||
|
#define ATOMIC_MMU_LOOKUP atomic_mmu_lookup(env, addr, DATA_SIZE, retaddr)
|
||||||
|
|
||||||
|
#define DATA_SIZE 16
|
||||||
|
#include "atomic_template.h"
|
||||||
|
#endif /* CONFIG_ATOMIC128 */
|
||||||
|
|
Loading…
Reference in New Issue