qemu/target
Paolo Bonzini d7c41a60d0 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>
2024-05-07 08:53:26 +02:00
..
alpha exec/cpu: Extract page-protection definitions to page-protection.h 2024-05-06 11:17:15 +02:00
arm Accelerator patches 2024-05-06 10:19:10 -07:00
avr accel/tcg: Access tcg_cflags with getter / setter 2024-05-06 11:21:05 +02:00
cris exec/cpu: Extract page-protection definitions to page-protection.h 2024-05-06 11:17:15 +02:00
hexagon Accelerator patches 2024-05-06 10:19:10 -07:00
hppa accel/tcg: Access tcg_cflags with getter / setter 2024-05-06 11:21:05 +02:00
i386 target/i386: move C0-FF opcodes to new decoder (except for x87) 2024-05-07 08:53:26 +02:00
loongarch accel/tcg: Access tcg_cflags with getter / setter 2024-05-06 11:21:05 +02:00
m68k exec/cpu: Extract page-protection definitions to page-protection.h 2024-05-06 11:17:15 +02:00
microblaze accel/tcg: Access tcg_cflags with getter / setter 2024-05-06 11:21:05 +02:00
mips accel/tcg: Access tcg_cflags with getter / setter 2024-05-06 11:21:05 +02:00
openrisc accel/tcg: Access tcg_cflags with getter / setter 2024-05-06 11:21:05 +02:00
ppc Accelerator patches 2024-05-06 10:19:10 -07:00
riscv accel/tcg: Access tcg_cflags with getter / setter 2024-05-06 11:21:05 +02:00
rx accel/tcg: Access tcg_cflags with getter / setter 2024-05-06 11:21:05 +02:00
s390x exec/cpu: Extract page-protection definitions to page-protection.h 2024-05-06 11:17:15 +02:00
sh4 accel/tcg: Access tcg_cflags with getter / setter 2024-05-06 11:21:05 +02:00
sparc qemu-sparc queue 2024-05-06 10:19:56 -07:00
tricore accel/tcg: Access tcg_cflags with getter / setter 2024-05-06 11:21:05 +02:00
xtensa exec/cpu: Extract page-protection definitions to page-protection.h 2024-05-06 11:17:15 +02:00
Kconfig meson: make target endianneess available to Kconfig 2024-05-03 15:47:47 +02:00
meson.build exec: Expose 'target_page.h' API to user emulation 2024-04-26 15:28:11 +02:00