diff options
author | 2023-10-21 17:36:34 +0200 | |
---|---|---|
committer | 2024-05-07 08:53:26 +0200 | |
commit | d7c41a60d0c5228d5adfc73c83facb1307a1d45e (patch) | |
tree | c283bdf985df2a7130ff2676ead03c3c9f294e77 /scripts/coverage/compare_gcov_json.py | |
parent | target/i386: generalize gen_movl_seg_T0 (diff) | |
download | qemu-d7c41a60d0c5228d5adfc73c83facb1307a1d45e.tar.xz qemu-d7c41a60d0c5228d5adfc73c83facb1307a1d45e.zip |
target/i386: move C0-FF opcodes to new decoder (except for x87)
The shift instructions are rewritten instead of reusing code from the old
decoder. Rotates use CC_OP_ADCOX more extensively and generally rely
more on the optimizer, so that the code generators are shared between
the immediate-count and variable-count cases.
In particular, this makes gen_RCL and gen_RCR pretty efficient for the
count == 1 case, which becomes (apart from a few extra movs) something like:
(compute_cc_all if needed)
// save old value for OF calculation
mov cc_src2, T0
// the bulk of RCL is just this!
deposit T0, cc_src, T0, 1, TARGET_LONG_BITS - 1
// compute carry
shr cc_dst, cc_src2, length - 1
and cc_dst, cc_dst, 1
// compute overflow
xor cc_src2, cc_src2, T0
extract cc_src2, cc_src2, length - 1, 1
32-bit MUL and IMUL are also slightly more efficient on 64-bit hosts.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to '')
0 files changed, 0 insertions, 0 deletions