On Thu, Jan 24, 2013 at 5:02 AM, Richard Henderson <r...@twiddle.net> wrote: > This is a re-working of Paolo's eflags cleanup from October, which > I consider a pre-requisite to implementing the ADX extension. I've > rearranged most of the patches in trivial ways, and some quite > significantly. > > I've tested the result by running the FC17 installer in both i386 > and x86_64 mode, and the bmi/adx extensions with small user-land > test cases. > > The patch series is at > > git://github.com/rth7680/qemu.git eflags3
I gave a quick try a your branch. My host is an x86_64 CPU and I ran an i386 nbench in user mode. It works but some parts of the benchmark are noticeably slower (>10%). Is that expected? Thanks, Laurent > Please review. > > > r~ > > > Paolo Bonzini (19): > test-i386: QEMU_PACKED is not defined here > test-i386: make it compile with a recent gcc > target-i386: use OT_* consistently > target-i386: introduce gen_ext_tl > target-i386: factor setting of s->cc_op handling for string functions > target-i386: drop cc_op argument of gen_jcc1 > target-i386: move carry computation for inc/dec closer to > gen_op_set_cc_op > target-i386: move eflags computation closer to gen_op_set_cc_op > target-i386: compute eflags outside rcl/rcr helper > target-i386: clean up sahf > target-i386: use gen_jcc1 to compile loopz > target-i386: factor gen_op_set_cc_op/tcg_gen_discard_tl around > computing flags > target-i386: add helper functions to get other flags > target-i386: change gen_setcc_slow_T0 to gen_setcc_slow > target-i386: optimize setcc instructions > target-i386: use CCPrepare to generate conditional jumps > target-i386: cleanup temporary macros for CCPrepare > target-i386: introduce gen_cmovcc1 > target-i386: kill cpu_T3 > > Richard Henderson (38): > target-i386: Name the cc_op enumeration > target-i386: Introduce set_cc_op > target-i386: Don't clobber s->cc_op in gen_update_cc_op > target-i386: Use gen_update_cc_op everywhere > target-i386: do not compute eflags multiple times consecutively > target-i386: no need to flush out cc_op before gen_eob > target-i386: Move CC discards to set_cc_op > target-i386: do not call helper to compute ZF/SF > target-i386: use inverted setcond when computing NS or NZ > target-i386: convert gen_compute_eflags_c to TCG > target-i386: optimize setbe > target-i386: optimize setle > target-i386: introduce CCPrepare > target-i386: introduce gen_prepare_cc > target-i386: inline gen_prepare_cc_slow > target-i386: expand cmov via movcond > target-i386: use gen_op for cmps/scas > target-i386: introduce gen_jcc1_noeob > target-i386: Update cc_op before TCG branches > target-i386: optimize flags checking after sub using CC_SRC2 > target-i386: Use CC_SRC2 for ADC and SBB > target-i386: Don't reference ENV through most of cc helpers > target-i386: Make helper_cc_compute_all const > target-i386: Tidy prefix parsing > target-i386: Decode the VEX prefixes > target-i386: Implement MOVBE > target-i386: Implement ANDN > target-i386: Implement BEXTR > target-i386: Implement BLSR, BLSMSK, BLSI > target-i386: Implement BZHI > target-i386: Implement MULX > target-i386: Implement PDEP, PEXT > target-i386: Implement SHLX, SARX, SHRX > target-i386: Implement RORX > target-i386: Implement ADX extension > target-i386: Use clz/ctz for bsf/bsr helpers > target-i386: Simplify bsf/bsr flags computation > target-i386: Implement tzcnt and fix lzcnt > > target-i386/cc_helper.c | 243 ++-- > target-i386/cc_helper_template.h | 268 ++--- > target-i386/cpu.c | 18 +- > target-i386/cpu.h | 24 +- > target-i386/helper.c | 11 +- > target-i386/helper.h | 12 +- > target-i386/int_helper.c | 69 +- > target-i386/shift_helper_template.h | 12 +- > target-i386/translate.c | 2195 > +++++++++++++++++++++-------------- > tests/tcg/test-i386.c | 10 +- > 10 files changed, 1581 insertions(+), 1281 deletions(-) > > -- > 1.7.11.7 > >