In preparation for supporting named CPU models for user-mode emulation, add a few TCG features that are actually already implemented, or that are easy to implement. The most important (and most relevant to user-mode emulation) are RDSEED, RDPID, and for 32-bit processors SYSCALL as well.
Paolo v1->v2: - fix WBNOINVD vmexit - correctly implement 32-bit SYSCALL and SYSENTER - do not include linux-user/ from target/ v2->v3: - do not accept RDSEED if CPUID bit absent - also raise illegal opcode exception for SYSRET in 32-bit mode for Intel CPUs - raise illegal opcode exception for SYSENTER/SYSEXIT in 64-bit mode for AMD CPUs - Also try sched_getcpu() to return a sensible value for RDPID, since FreeBSD does write the CPUID to MSR_TSC_AUX. - Fully implement SYSCALL/SYSRET for 32-bit processors, including system emulators Paolo Bonzini (11): target/i386: fix INVD vmexit target/i386: TCG supports 3DNow! prefetch(w) target/i386: TCG supports RDSEED target/i386: do not accept RDSEED if CPUID bit absent target/i386: TCG supports XSAVEERPTR target/i386: TCG supports WBNOINVD target/i386: Intel only supports SYSCALL/SYSRET in long mode target/i386: AMD only supports SYSENTER/SYSEXIT in 32-bit mode target/i386: sysret and sysexit are privileged target/i386: implement RDPID in TCG target/i386: implement SYSCALL/SYSRET in 32-bit emulators bsd-user/i386/target_arch_cpu.h | 4 +++ linux-user/i386/cpu_loop.c | 13 ++++--- meson.build | 2 ++ target/i386/cpu.c | 31 +++++++++++----- target/i386/helper.h | 4 +-- target/i386/tcg/misc_helper.c | 21 +++++++---- target/i386/tcg/seg_helper.c | 7 ++-- target/i386/tcg/sysemu/seg_helper.c | 7 ++-- target/i386/tcg/translate.c | 55 ++++++++++++++++++++++------- target/i386/tcg/user/seg_helper.c | 2 -- 10 files changed, 105 insertions(+), 41 deletions(-) -- 2.41.0