mirror of https://github.com/xemu-project/xemu.git
target/i386: Convert to HAVE_CMPXCHG128
Reviewed-by: Emilio G. Cota <cota@braap.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
e6cd4bb59b
commit
e1ed709fbe
|
@ -23,6 +23,7 @@
|
||||||
#include "exec/exec-all.h"
|
#include "exec/exec-all.h"
|
||||||
#include "exec/cpu_ldst.h"
|
#include "exec/cpu_ldst.h"
|
||||||
#include "qemu/int128.h"
|
#include "qemu/int128.h"
|
||||||
|
#include "qemu/atomic128.h"
|
||||||
#include "tcg.h"
|
#include "tcg.h"
|
||||||
|
|
||||||
void helper_cmpxchg8b_unlocked(CPUX86State *env, target_ulong a0)
|
void helper_cmpxchg8b_unlocked(CPUX86State *env, target_ulong a0)
|
||||||
|
@ -137,10 +138,7 @@ void helper_cmpxchg16b(CPUX86State *env, target_ulong a0)
|
||||||
|
|
||||||
if ((a0 & 0xf) != 0) {
|
if ((a0 & 0xf) != 0) {
|
||||||
raise_exception_ra(env, EXCP0D_GPF, ra);
|
raise_exception_ra(env, EXCP0D_GPF, ra);
|
||||||
} else {
|
} else if (HAVE_CMPXCHG128) {
|
||||||
#ifndef CONFIG_ATOMIC128
|
|
||||||
cpu_loop_exit_atomic(ENV_GET_CPU(env), ra);
|
|
||||||
#else
|
|
||||||
int eflags = cpu_cc_compute_all(env, CC_OP);
|
int eflags = cpu_cc_compute_all(env, CC_OP);
|
||||||
|
|
||||||
Int128 cmpv = int128_make128(env->regs[R_EAX], env->regs[R_EDX]);
|
Int128 cmpv = int128_make128(env->regs[R_EAX], env->regs[R_EDX]);
|
||||||
|
@ -159,7 +157,8 @@ void helper_cmpxchg16b(CPUX86State *env, target_ulong a0)
|
||||||
eflags &= ~CC_Z;
|
eflags &= ~CC_Z;
|
||||||
}
|
}
|
||||||
CC_SRC = eflags;
|
CC_SRC = eflags;
|
||||||
#endif
|
} else {
|
||||||
|
cpu_loop_exit_atomic(ENV_GET_CPU(env), ra);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue