mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Merge tag 'for-upstream' of https://gitlab.com/bonzini/qemu into staging
Build system and target/i386/translate.c cleanups # -----BEGIN PGP SIGNATURE----- # # iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmZRy1gUHHBib256aW5p # QHJlZGhhdC5jb20ACgkQv/vSX3jHroMTtQf/ZQskuqZyTrDhB/uVUT8oT5JNKQNS # GbFSgDK7jDdBeU3UmoYrlx9vfFR/mH5cA88MlusUy0SjQBNo4onD725o6Vvum/LW # DPe5ZyE34wvOasM7KXqJsD+2SttjaVjCXN4ip+E9WL5By2TWJgrk6IgTtvAhT9cd # LWb5OEIInaq7ZiWz3EpjmGvZd0M4mxqXi5OeDvmoFyf38xElfbWZWbfhJv+H5L1X # stivPBtUbXOzh63NL491hUYQtiAWlow8Qcnn7CYRflb6Vdd4QPK+6W8FX5KyU2eC # bXRXloW7wjEAC9pyiVky1SCvtNg7AVFL+9kxwiGreoZfo+/IMA+NP6pGOg== # =hpWy # -----END PGP SIGNATURE----- # gpg: Signature made Sat 25 May 2024 04:28:24 AM PDT # gpg: using RSA key F13338574B662389866C7682BFFBD25F78C7AE83 # gpg: issuer "pbonzini@redhat.com" # gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [full] # gpg: aka "Paolo Bonzini <pbonzini@redhat.com>" [full] * tag 'for-upstream' of https://gitlab.com/bonzini/qemu: (24 commits) migration: remove unnecessary zlib dependency meson: do not query modules before they are processed tcg: include dependencies in static_library() meson: remove unnecessary dependency meson: remove unnecessary reference to libm target/i386: remove aflag argument of gen_lea_v_seg target/i386: clean up repeated string operations target/i386: introduce gen_lea_ss_ofs target/i386: use mo_stacksize more target/i386: inline gen_add_A0_ds_seg target/i386: split gen_ldst_modrm for load and store target/i386: reg in gen_ldst_modrm is always OR_TMP0 target/i386: raze the gen_eob* jungle target/i386: assert that gen_update_eip_cur and gen_update_eip_next are the same in tb_stop target/i386: avoid calling gen_eob_inhibit_irq before tb_stop target/i386: avoid calling gen_eob_syscall before tb_stop target/i386: document and group DISAS_* constants target/i386: set CC_OP in helpers if they want CC_OP_EFLAGS target/i386: cpu_load_eflags already sets cc_op target/i386: remove unnecessary gen_update_cc_op before gen_eob* ... Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
+2
-2
@@ -30,8 +30,8 @@ endforeach
|
||||
|
||||
if dbus_display
|
||||
module_ss = ss.source_set()
|
||||
module_ss.add(when: [gio, dbus_display1_dep, pixman],
|
||||
if_true: files('dbusaudio.c'))
|
||||
module_ss.add(when: [gio, pixman],
|
||||
if_true: [dbus_display1, files('dbusaudio.c')])
|
||||
audio_modules += {'dbus': module_ss}
|
||||
endif
|
||||
|
||||
|
||||
+2
-2
@@ -110,7 +110,7 @@ foreach m : [
|
||||
[blkio, 'blkio', files('blkio.c')],
|
||||
[curl, 'curl', files('curl.c')],
|
||||
[glusterfs, 'gluster', files('gluster.c')],
|
||||
[libiscsi, 'iscsi', [files('iscsi.c'), libm]],
|
||||
[libiscsi, 'iscsi', files('iscsi.c')],
|
||||
[libnfs, 'nfs', files('nfs.c')],
|
||||
[libssh, 'ssh', files('ssh.c')],
|
||||
[rbd, 'rbd', files('rbd.c')],
|
||||
@@ -119,7 +119,7 @@ foreach m : [
|
||||
module_ss = ss.source_set()
|
||||
module_ss.add(when: m[0], if_true: m[2])
|
||||
if enable_modules
|
||||
modsrc += module_ss.all_sources()
|
||||
modsrc += m[2]
|
||||
endif
|
||||
block_modules += {m[1] : module_ss}
|
||||
endif
|
||||
|
||||
@@ -512,10 +512,7 @@ case "$cpu" in
|
||||
cpu="x86_64"
|
||||
host_arch=x86_64
|
||||
linux_arch=x86
|
||||
# ??? Only extremely old AMD cpus do not have cmpxchg16b.
|
||||
# If we truly care, we should simply detect this case at
|
||||
# runtime and generate the fallback to serial emulation.
|
||||
CPU_CFLAGS="-m64 -mcx16"
|
||||
CPU_CFLAGS="-m64"
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -1203,7 +1200,7 @@ fi
|
||||
: ${cross_cc_cflags_sparc64="-m64 -mcpu=ultrasparc"}
|
||||
: ${cross_cc_sparc="$cross_cc_sparc64"}
|
||||
: ${cross_cc_cflags_sparc="-m32 -mcpu=supersparc"}
|
||||
: ${cross_cc_cflags_x86_64="-m64"}
|
||||
: ${cross_cc_cflags_x86_64="-m64 -mcx16"}
|
||||
|
||||
compute_target_variable() {
|
||||
eval "$2="
|
||||
|
||||
+8
-1
@@ -336,6 +336,13 @@ if host_arch == 'i386' and not cc.links('''
|
||||
qemu_common_flags = ['-march=i486'] + qemu_common_flags
|
||||
endif
|
||||
|
||||
# ??? Only extremely old AMD cpus do not have cmpxchg16b.
|
||||
# If we truly care, we should simply detect this case at
|
||||
# runtime and generate the fallback to serial emulation.
|
||||
if host_arch == 'x86_64'
|
||||
qemu_common_flags = ['-mcx16'] + qemu_common_flags
|
||||
endif
|
||||
|
||||
if get_option('prefer_static')
|
||||
qemu_ldflags += get_option('b_pie') ? '-static-pie' : '-static'
|
||||
endif
|
||||
@@ -3689,7 +3696,7 @@ libmigration = static_library('migration', sources: migration_files + genh,
|
||||
name_suffix: 'fa',
|
||||
build_by_default: false)
|
||||
migration = declare_dependency(link_with: libmigration,
|
||||
dependencies: [zlib, qom, io])
|
||||
dependencies: [qom, io])
|
||||
system_ss.add(migration)
|
||||
|
||||
block_ss = block_ss.apply({})
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include <zlib.h>
|
||||
#include "hw/core/cpu.h"
|
||||
#include "qapi/error.h"
|
||||
#include "exec/ramblock.h"
|
||||
|
||||
@@ -29,7 +29,7 @@ system_ss.add(files(
|
||||
'socket.c',
|
||||
'tls.c',
|
||||
'threadinfo.c',
|
||||
), gnutls)
|
||||
), gnutls, zlib)
|
||||
|
||||
if get_option('replication').allowed()
|
||||
system_ss.add(files('colo-failover.c', 'colo.c'))
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
#include "qemu/osdep.h"
|
||||
#include <zlib.h>
|
||||
#include "qemu/madvise.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "qemu/iov.h"
|
||||
|
||||
@@ -1111,6 +1111,7 @@ void helper_ucomiss(CPUX86State *env, Reg *d, Reg *s)
|
||||
s1 = s->ZMM_S(0);
|
||||
ret = float32_compare_quiet(s0, s1, &env->sse_status);
|
||||
CC_SRC = comis_eflags[ret + 1];
|
||||
CC_OP = CC_OP_EFLAGS;
|
||||
}
|
||||
|
||||
void helper_comiss(CPUX86State *env, Reg *d, Reg *s)
|
||||
@@ -1122,6 +1123,7 @@ void helper_comiss(CPUX86State *env, Reg *d, Reg *s)
|
||||
s1 = s->ZMM_S(0);
|
||||
ret = float32_compare(s0, s1, &env->sse_status);
|
||||
CC_SRC = comis_eflags[ret + 1];
|
||||
CC_OP = CC_OP_EFLAGS;
|
||||
}
|
||||
|
||||
void helper_ucomisd(CPUX86State *env, Reg *d, Reg *s)
|
||||
@@ -1133,6 +1135,7 @@ void helper_ucomisd(CPUX86State *env, Reg *d, Reg *s)
|
||||
d1 = s->ZMM_D(0);
|
||||
ret = float64_compare_quiet(d0, d1, &env->sse_status);
|
||||
CC_SRC = comis_eflags[ret + 1];
|
||||
CC_OP = CC_OP_EFLAGS;
|
||||
}
|
||||
|
||||
void helper_comisd(CPUX86State *env, Reg *d, Reg *s)
|
||||
@@ -1144,6 +1147,7 @@ void helper_comisd(CPUX86State *env, Reg *d, Reg *s)
|
||||
d1 = s->ZMM_D(0);
|
||||
ret = float64_compare(d0, d1, &env->sse_status);
|
||||
CC_SRC = comis_eflags[ret + 1];
|
||||
CC_OP = CC_OP_EFLAGS;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1610,6 +1614,7 @@ void glue(helper_ptest, SUFFIX)(CPUX86State *env, Reg *d, Reg *s)
|
||||
cf |= (s->Q(i) & ~d->Q(i));
|
||||
}
|
||||
CC_SRC = (zf ? 0 : CC_Z) | (cf ? 0 : CC_C);
|
||||
CC_OP = CC_OP_EFLAGS;
|
||||
}
|
||||
|
||||
#define FMOVSLDUP(i) s->L((i) & ~1)
|
||||
@@ -1966,6 +1971,7 @@ static inline unsigned pcmpxstrx(CPUX86State *env, Reg *d, Reg *s,
|
||||
validd--;
|
||||
|
||||
CC_SRC = (valids < upper ? CC_Z : 0) | (validd < upper ? CC_S : 0);
|
||||
CC_OP = CC_OP_EFLAGS;
|
||||
|
||||
switch ((ctrl >> 2) & 3) {
|
||||
case 0:
|
||||
@@ -2297,6 +2303,7 @@ void glue(helper_vtestps, SUFFIX)(CPUX86State *env, Reg *d, Reg *s)
|
||||
cf |= (s->L(i) & ~d->L(i));
|
||||
}
|
||||
CC_SRC = ((zf >> 31) ? 0 : CC_Z) | ((cf >> 31) ? 0 : CC_C);
|
||||
CC_OP = CC_OP_EFLAGS;
|
||||
}
|
||||
|
||||
void glue(helper_vtestpd, SUFFIX)(CPUX86State *env, Reg *d, Reg *s)
|
||||
@@ -2309,6 +2316,7 @@ void glue(helper_vtestpd, SUFFIX)(CPUX86State *env, Reg *d, Reg *s)
|
||||
cf |= (s->Q(i) & ~d->Q(i));
|
||||
}
|
||||
CC_SRC = ((zf >> 63) ? 0 : CC_Z) | ((cf >> 63) ? 0 : CC_C);
|
||||
CC_OP = CC_OP_EFLAGS;
|
||||
}
|
||||
|
||||
void glue(helper_vpmaskmovd_st, SUFFIX)(CPUX86State *env,
|
||||
|
||||
+26
-32
@@ -76,7 +76,7 @@ static void gen_NM_exception(DisasContext *s)
|
||||
static void gen_load_ea(DisasContext *s, AddressParts *mem, bool is_vsib)
|
||||
{
|
||||
TCGv ea = gen_lea_modrm_1(s, *mem, is_vsib);
|
||||
gen_lea_v_seg(s, s->aflag, ea, mem->def_seg, s->override);
|
||||
gen_lea_v_seg(s, ea, mem->def_seg, s->override);
|
||||
}
|
||||
|
||||
static inline int mmx_offset(MemOp ot)
|
||||
@@ -918,7 +918,7 @@ static void gen_##uname(DisasContext *s, CPUX86State *env, X86DecodedInsn *decod
|
||||
} else { \
|
||||
gen_helper_##lname##_ymm(tcg_env, OP_PTR1, OP_PTR2); \
|
||||
} \
|
||||
set_cc_op(s, CC_OP_EFLAGS); \
|
||||
assume_cc_op(s, CC_OP_EFLAGS); \
|
||||
}
|
||||
UNARY_CMP_SSE(VPTEST, ptest)
|
||||
UNARY_CMP_SSE(VTESTPS, vtestps)
|
||||
@@ -1079,7 +1079,7 @@ static void gen_AAA(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
{
|
||||
gen_update_cc_op(s);
|
||||
gen_helper_aaa(tcg_env);
|
||||
set_cc_op(s, CC_OP_EFLAGS);
|
||||
assume_cc_op(s, CC_OP_EFLAGS);
|
||||
}
|
||||
|
||||
static void gen_AAD(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
@@ -1102,7 +1102,7 @@ static void gen_AAS(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
{
|
||||
gen_update_cc_op(s);
|
||||
gen_helper_aas(tcg_env);
|
||||
set_cc_op(s, CC_OP_EFLAGS);
|
||||
assume_cc_op(s, CC_OP_EFLAGS);
|
||||
}
|
||||
|
||||
static void gen_ADC(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
@@ -1508,10 +1508,8 @@ static void gen_CMPccXADD(DisasContext *s, CPUX86State *env, X86DecodedInsn *dec
|
||||
static void gen_CMPS(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
{
|
||||
MemOp ot = decode->op[2].ot;
|
||||
if (s->prefix & PREFIX_REPNZ) {
|
||||
gen_repz_cmps(s, ot, 1);
|
||||
} else if (s->prefix & PREFIX_REPZ) {
|
||||
gen_repz_cmps(s, ot, 0);
|
||||
if (s->prefix & (PREFIX_REPZ | PREFIX_REPNZ)) {
|
||||
gen_repz_nz(s, ot, gen_cmps);
|
||||
} else {
|
||||
gen_cmps(s, ot);
|
||||
}
|
||||
@@ -1566,14 +1564,14 @@ static void gen_DAA(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
{
|
||||
gen_update_cc_op(s);
|
||||
gen_helper_daa(tcg_env);
|
||||
set_cc_op(s, CC_OP_EFLAGS);
|
||||
assume_cc_op(s, CC_OP_EFLAGS);
|
||||
}
|
||||
|
||||
static void gen_DAS(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
{
|
||||
gen_update_cc_op(s);
|
||||
gen_helper_das(tcg_env);
|
||||
set_cc_op(s, CC_OP_EFLAGS);
|
||||
assume_cc_op(s, CC_OP_EFLAGS);
|
||||
}
|
||||
|
||||
static void gen_DEC(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
@@ -1834,7 +1832,7 @@ static void gen_INS(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
|
||||
translator_io_start(&s->base);
|
||||
if (s->prefix & (PREFIX_REPZ | PREFIX_REPNZ)) {
|
||||
gen_repz_ins(s, ot);
|
||||
gen_repz(s, ot, gen_ins);
|
||||
} else {
|
||||
gen_ins(s, ot);
|
||||
}
|
||||
@@ -1883,7 +1881,7 @@ static void gen_IRET(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
gen_helper_iret_protected(tcg_env, tcg_constant_i32(s->dflag - 1),
|
||||
eip_next_i32(s));
|
||||
}
|
||||
set_cc_op(s, CC_OP_EFLAGS);
|
||||
assume_cc_op(s, CC_OP_EFLAGS);
|
||||
s->base.is_jmp = DISAS_EOB_ONLY;
|
||||
}
|
||||
|
||||
@@ -1993,7 +1991,7 @@ static void gen_LODS(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
{
|
||||
MemOp ot = decode->op[2].ot;
|
||||
if (s->prefix & (PREFIX_REPZ | PREFIX_REPNZ)) {
|
||||
gen_repz_lods(s, ot);
|
||||
gen_repz(s, ot, gen_lods);
|
||||
} else {
|
||||
gen_lods(s, ot);
|
||||
}
|
||||
@@ -2046,7 +2044,7 @@ static void gen_MOV(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
|
||||
static void gen_MASKMOV(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
{
|
||||
gen_lea_v_seg(s, s->aflag, cpu_regs[R_EDI], R_DS, s->override);
|
||||
gen_lea_v_seg(s, cpu_regs[R_EDI], R_DS, s->override);
|
||||
|
||||
if (s->prefix & PREFIX_DATA) {
|
||||
gen_helper_maskmov_xmm(tcg_env, OP_PTR1, OP_PTR2, s->A0);
|
||||
@@ -2155,7 +2153,7 @@ static void gen_MOVS(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
{
|
||||
MemOp ot = decode->op[2].ot;
|
||||
if (s->prefix & (PREFIX_REPZ | PREFIX_REPNZ)) {
|
||||
gen_repz_movs(s, ot);
|
||||
gen_repz(s, ot, gen_movs);
|
||||
} else {
|
||||
gen_movs(s, ot);
|
||||
}
|
||||
@@ -2321,7 +2319,7 @@ static void gen_OUTS(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
|
||||
translator_io_start(&s->base);
|
||||
if (s->prefix & (PREFIX_REPZ | PREFIX_REPNZ)) {
|
||||
gen_repz_outs(s, ot);
|
||||
gen_repz(s, ot, gen_outs);
|
||||
} else {
|
||||
gen_outs(s, ot);
|
||||
}
|
||||
@@ -2353,14 +2351,14 @@ static void gen_PCMPESTRI(DisasContext *s, CPUX86State *env, X86DecodedInsn *dec
|
||||
{
|
||||
TCGv_i32 imm = tcg_constant8u_i32(decode->immediate);
|
||||
gen_helper_pcmpestri_xmm(tcg_env, OP_PTR1, OP_PTR2, imm);
|
||||
set_cc_op(s, CC_OP_EFLAGS);
|
||||
assume_cc_op(s, CC_OP_EFLAGS);
|
||||
}
|
||||
|
||||
static void gen_PCMPESTRM(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
{
|
||||
TCGv_i32 imm = tcg_constant8u_i32(decode->immediate);
|
||||
gen_helper_pcmpestrm_xmm(tcg_env, OP_PTR1, OP_PTR2, imm);
|
||||
set_cc_op(s, CC_OP_EFLAGS);
|
||||
assume_cc_op(s, CC_OP_EFLAGS);
|
||||
if ((s->prefix & PREFIX_VEX) && !s->vex_l) {
|
||||
tcg_gen_gvec_dup_imm(MO_64, offsetof(CPUX86State, xmm_regs[0].ZMM_X(1)),
|
||||
16, 16, 0);
|
||||
@@ -2371,14 +2369,14 @@ static void gen_PCMPISTRI(DisasContext *s, CPUX86State *env, X86DecodedInsn *dec
|
||||
{
|
||||
TCGv_i32 imm = tcg_constant8u_i32(decode->immediate);
|
||||
gen_helper_pcmpistri_xmm(tcg_env, OP_PTR1, OP_PTR2, imm);
|
||||
set_cc_op(s, CC_OP_EFLAGS);
|
||||
assume_cc_op(s, CC_OP_EFLAGS);
|
||||
}
|
||||
|
||||
static void gen_PCMPISTRM(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
{
|
||||
TCGv_i32 imm = tcg_constant8u_i32(decode->immediate);
|
||||
gen_helper_pcmpistrm_xmm(tcg_env, OP_PTR1, OP_PTR2, imm);
|
||||
set_cc_op(s, CC_OP_EFLAGS);
|
||||
assume_cc_op(s, CC_OP_EFLAGS);
|
||||
if ((s->prefix & PREFIX_VEX) && !s->vex_l) {
|
||||
tcg_gen_gvec_dup_imm(MO_64, offsetof(CPUX86State, xmm_regs[0].ZMM_X(1)),
|
||||
16, 16, 0);
|
||||
@@ -3077,7 +3075,7 @@ static void gen_RETF(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
int16_t adjust = decode->e.op2 == X86_TYPE_I ? decode->immediate : 0;
|
||||
|
||||
if (!PE(s) || VM86(s)) {
|
||||
gen_stack_A0(s);
|
||||
gen_lea_ss_ofs(s, s->A0, cpu_regs[R_ESP], 0);
|
||||
/* pop offset */
|
||||
gen_op_ld_v(s, s->dflag, s->T0, s->A0);
|
||||
/* NOTE: keeping EIP updated is not a problem in case of
|
||||
@@ -3329,10 +3327,8 @@ static void gen_SBB(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
static void gen_SCAS(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
{
|
||||
MemOp ot = decode->op[2].ot;
|
||||
if (s->prefix & PREFIX_REPNZ) {
|
||||
gen_repz_scas(s, ot, 1);
|
||||
} else if (s->prefix & PREFIX_REPZ) {
|
||||
gen_repz_scas(s, ot, 0);
|
||||
if (s->prefix & (PREFIX_REPZ | PREFIX_REPNZ)) {
|
||||
gen_repz_nz(s, ot, gen_scas);
|
||||
} else {
|
||||
gen_scas(s, ot);
|
||||
}
|
||||
@@ -3475,9 +3471,7 @@ static void gen_STD(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
static void gen_STI(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
{
|
||||
gen_set_eflags(s, IF_MASK);
|
||||
/* interruptions are enabled only the first insn after sti */
|
||||
gen_update_eip_next(s);
|
||||
gen_eob_inhibit_irq(s);
|
||||
s->base.is_jmp = DISAS_EOB_INHIBIT_IRQ;
|
||||
}
|
||||
|
||||
static void gen_VAESKEYGEN(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
@@ -3497,7 +3491,7 @@ static void gen_STOS(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
{
|
||||
MemOp ot = decode->op[1].ot;
|
||||
if (s->prefix & (PREFIX_REPZ | PREFIX_REPNZ)) {
|
||||
gen_repz_stos(s, ot);
|
||||
gen_repz(s, ot, gen_stos);
|
||||
} else {
|
||||
gen_stos(s, ot);
|
||||
}
|
||||
@@ -3595,7 +3589,7 @@ static void gen_VCOMI(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
SSEFunc_0_epp fn;
|
||||
fn = s->prefix & PREFIX_DATA ? gen_helper_comisd : gen_helper_comiss;
|
||||
fn(tcg_env, OP_PTR1, OP_PTR2);
|
||||
set_cc_op(s, CC_OP_EFLAGS);
|
||||
assume_cc_op(s, CC_OP_EFLAGS);
|
||||
}
|
||||
|
||||
static void gen_VCVTPD2PS(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
@@ -3982,7 +3976,7 @@ static void gen_VUCOMI(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode
|
||||
SSEFunc_0_epp fn;
|
||||
fn = s->prefix & PREFIX_DATA ? gen_helper_ucomisd : gen_helper_ucomiss;
|
||||
fn(tcg_env, OP_PTR1, OP_PTR2);
|
||||
set_cc_op(s, CC_OP_EFLAGS);
|
||||
assume_cc_op(s, CC_OP_EFLAGS);
|
||||
}
|
||||
|
||||
static void gen_VZEROALL(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
@@ -4045,7 +4039,7 @@ static void gen_XLAT(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
|
||||
{
|
||||
/* AL is already zero-extended into s->T0. */
|
||||
tcg_gen_add_tl(s->A0, cpu_regs[R_EBX], s->T0);
|
||||
gen_add_A0_ds_seg(s);
|
||||
gen_lea_v_seg(s, s->A0, R_DS, s->override);
|
||||
gen_op_ld_v(s, MO_8, s->T0, s->A0);
|
||||
}
|
||||
|
||||
|
||||
@@ -487,6 +487,7 @@ void helper_fcomi_ST0_FT0(CPUX86State *env)
|
||||
ret = floatx80_compare(ST0, FT0, &env->fp_status);
|
||||
eflags = cpu_cc_compute_all(env) & ~(CC_Z | CC_P | CC_C);
|
||||
CC_SRC = eflags | fcomi_ccval[ret + 1];
|
||||
CC_OP = CC_OP_EFLAGS;
|
||||
merge_exception_flags(env, old_flags);
|
||||
}
|
||||
|
||||
@@ -499,6 +500,7 @@ void helper_fucomi_ST0_FT0(CPUX86State *env)
|
||||
ret = floatx80_compare_quiet(ST0, FT0, &env->fp_status);
|
||||
eflags = cpu_cc_compute_all(env) & ~(CC_Z | CC_P | CC_C);
|
||||
CC_SRC = eflags | fcomi_ccval[ret + 1];
|
||||
CC_OP = CC_OP_EFLAGS;
|
||||
merge_exception_flags(env, old_flags);
|
||||
}
|
||||
|
||||
|
||||
@@ -187,6 +187,7 @@ void helper_aaa(CPUX86State *env)
|
||||
}
|
||||
env->regs[R_EAX] = (env->regs[R_EAX] & ~0xffff) | al | (ah << 8);
|
||||
CC_SRC = eflags;
|
||||
CC_OP = CC_OP_EFLAGS;
|
||||
}
|
||||
|
||||
void helper_aas(CPUX86State *env)
|
||||
@@ -211,6 +212,7 @@ void helper_aas(CPUX86State *env)
|
||||
}
|
||||
env->regs[R_EAX] = (env->regs[R_EAX] & ~0xffff) | al | (ah << 8);
|
||||
CC_SRC = eflags;
|
||||
CC_OP = CC_OP_EFLAGS;
|
||||
}
|
||||
|
||||
void helper_daa(CPUX86State *env)
|
||||
@@ -238,6 +240,7 @@ void helper_daa(CPUX86State *env)
|
||||
eflags |= parity_table[al]; /* pf */
|
||||
eflags |= (al & 0x80); /* sf */
|
||||
CC_SRC = eflags;
|
||||
CC_OP = CC_OP_EFLAGS;
|
||||
}
|
||||
|
||||
void helper_das(CPUX86State *env)
|
||||
@@ -269,6 +272,7 @@ void helper_das(CPUX86State *env)
|
||||
eflags |= parity_table[al]; /* pf */
|
||||
eflags |= (al & 0x80); /* sf */
|
||||
CC_SRC = eflags;
|
||||
CC_OP = CC_OP_EFLAGS;
|
||||
}
|
||||
|
||||
#ifdef TARGET_X86_64
|
||||
@@ -449,10 +453,11 @@ target_ulong HELPER(rdrand)(CPUX86State *env)
|
||||
error_free(err);
|
||||
/* Failure clears CF and all other flags, and returns 0. */
|
||||
env->cc_src = 0;
|
||||
return 0;
|
||||
ret = 0;
|
||||
} else {
|
||||
/* Success sets CF and clears all others. */
|
||||
env->cc_src = CC_C;
|
||||
}
|
||||
|
||||
/* Success sets CF and clears all others. */
|
||||
env->cc_src = CC_C;
|
||||
env->cc_op = CC_OP_EFLAGS;
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -2326,7 +2326,7 @@ void helper_verr(CPUX86State *env, target_ulong selector1)
|
||||
int rpl, dpl, cpl;
|
||||
|
||||
selector = selector1 & 0xffff;
|
||||
eflags = cpu_cc_compute_all(env);
|
||||
eflags = cpu_cc_compute_all(env) | CC_Z;
|
||||
if ((selector & 0xfffc) == 0) {
|
||||
goto fail;
|
||||
}
|
||||
@@ -2351,11 +2351,11 @@ void helper_verr(CPUX86State *env, target_ulong selector1)
|
||||
} else {
|
||||
if (dpl < cpl || dpl < rpl) {
|
||||
fail:
|
||||
CC_SRC = eflags & ~CC_Z;
|
||||
return;
|
||||
eflags &= ~CC_Z;
|
||||
}
|
||||
}
|
||||
CC_SRC = eflags | CC_Z;
|
||||
CC_SRC = eflags;
|
||||
CC_OP = CC_OP_EFLAGS;
|
||||
}
|
||||
|
||||
void helper_verw(CPUX86State *env, target_ulong selector1)
|
||||
@@ -2364,7 +2364,7 @@ void helper_verw(CPUX86State *env, target_ulong selector1)
|
||||
int rpl, dpl, cpl;
|
||||
|
||||
selector = selector1 & 0xffff;
|
||||
eflags = cpu_cc_compute_all(env);
|
||||
eflags = cpu_cc_compute_all(env) | CC_Z;
|
||||
if ((selector & 0xfffc) == 0) {
|
||||
goto fail;
|
||||
}
|
||||
@@ -2385,9 +2385,9 @@ void helper_verw(CPUX86State *env, target_ulong selector1)
|
||||
}
|
||||
if (!(e2 & DESC_W_MASK)) {
|
||||
fail:
|
||||
CC_SRC = eflags & ~CC_Z;
|
||||
return;
|
||||
eflags &= ~CC_Z;
|
||||
}
|
||||
}
|
||||
CC_SRC = eflags | CC_Z;
|
||||
CC_SRC = eflags;
|
||||
CC_OP = CC_OP_EFLAGS;
|
||||
}
|
||||
|
||||
+143
-183
File diff suppressed because it is too large
Load Diff
+4
-4
@@ -32,19 +32,19 @@ tcg_ss = tcg_ss.apply({})
|
||||
libtcg_user = static_library('tcg_user',
|
||||
tcg_ss.sources() + genh,
|
||||
name_suffix: 'fa',
|
||||
dependencies: tcg_ss.dependencies(),
|
||||
c_args: '-DCONFIG_USER_ONLY',
|
||||
build_by_default: false)
|
||||
|
||||
tcg_user = declare_dependency(link_with: libtcg_user,
|
||||
dependencies: tcg_ss.dependencies())
|
||||
tcg_user = declare_dependency(link_with: libtcg_user)
|
||||
user_ss.add(tcg_user)
|
||||
|
||||
libtcg_system = static_library('tcg_system',
|
||||
tcg_ss.sources() + genh,
|
||||
name_suffix: 'fa',
|
||||
dependencies: tcg_ss.dependencies(),
|
||||
c_args: '-DCONFIG_SOFTMMU',
|
||||
build_by_default: false)
|
||||
|
||||
tcg_system = declare_dependency(link_with: libtcg_system,
|
||||
dependencies: tcg_ss.dependencies())
|
||||
tcg_system = declare_dependency(link_with: libtcg_system)
|
||||
system_ss.add(tcg_system)
|
||||
|
||||
@@ -354,7 +354,7 @@ if vnc.found()
|
||||
endif
|
||||
|
||||
if dbus_display
|
||||
qtests += {'dbus-display-test': [dbus_display1_dep, gio]}
|
||||
qtests += {'dbus-display-test': [dbus_display1, gio]}
|
||||
endif
|
||||
|
||||
qtest_executables = {}
|
||||
|
||||
+2
-3
@@ -91,8 +91,7 @@ if dbus_display
|
||||
'--interface-prefix', 'org.qemu.',
|
||||
'--c-namespace', 'QemuDBus',
|
||||
'--generate-c-code', '@BASENAME@'])
|
||||
dbus_display1_dep = declare_dependency(sources: dbus_display1, dependencies: gio)
|
||||
dbus_ss.add(when: [gio, dbus_display1_dep],
|
||||
dbus_ss.add(when: gio,
|
||||
if_true: [files(
|
||||
'dbus-chardev.c',
|
||||
'dbus-clipboard.c',
|
||||
@@ -100,7 +99,7 @@ if dbus_display
|
||||
'dbus-error.c',
|
||||
'dbus-listener.c',
|
||||
'dbus.c',
|
||||
), opengl, gbm, pixman])
|
||||
), opengl, gbm, pixman, dbus_display1])
|
||||
ui_modules += {'dbus' : dbus_ss}
|
||||
endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user