implemented SVM emulation support for Bochs (incomplete yet)

I am merging the code in order to start making shortcuts between VMX emulation and SVM emulation.
Of course SVM emulation is incomplete, completely untested and not expected to work.
But someone could already take a look one the code and give some suggestions.

Also looking for anybody with existing SVM kernels - as simple as possible - for testing.

Status:
 - exceptions intercept is not implemented yet
 - IO intercept is not implemented yet
 - MSR intercept is not implemented yet
 - virtual interrupts are not implemented yet
 - CPUID is not implemented yet

No advanced SVM featurez planned - I am implementing the very basic 'Pacifica' document from 2005 using QEMU code as reference.
This commit is contained in:
Stanislav Shwartsman 2011-12-25 19:35:29 +00:00
parent aad2d89c83
commit 75bda1d5cd
31 changed files with 1164 additions and 727 deletions

View File

@ -16,6 +16,7 @@
--enable-alignment-check \
--enable-3dnow \
--enable-monitor-mwait \
--enable-svm \
--enable-vmx \
--enable-avx \
--enable-x86-debugger \

View File

@ -41,6 +41,7 @@ cpuid
movbe
xsave
xsaveopt
svm
vmx
avx
avx_f16c

View File

@ -364,7 +364,7 @@ void bx_init_options()
// cpuid subtree
#if BX_CPU_LEVEL >= 4
bx_list_c *cpuid_param = new bx_list_c(root_param, "cpuid", "CPUID Options", 29);
bx_list_c *cpuid_param = new bx_list_c(root_param, "cpuid", "CPUID Options", 30);
new bx_param_string_c(cpuid_param,
"vendor_string",
@ -527,7 +527,13 @@ void bx_init_options()
0, BX_SUPPORT_VMX,
1);
#endif
#if BX_SUPPORT_SVM
new bx_param_bool_c(cpuid_param,
"svm", "Secure Virtual Machine (SVM) emulation support",
"Secure Virtual Machine (SVM) emulation support",
0);
#endif
#endif // CPU_LEVEL >= 6
cpuid_param->set_options(menu->SHOW_PARENT);
@ -2770,6 +2776,12 @@ static int parse_line_formatted(const char *context, int num_params, char *param
} else if (!strncmp(params[i], "vmx=", 4)) {
SIM->get_param_num(BXPN_CPUID_VMX)->set(atol(&params[i][4]));
#endif
#if BX_SUPPORT_SVM
} else if (!strncmp(params[i], "svm=", 4)) {
if (parse_param_bool(params[i], 4, BXPN_CPUID_SVM) < 0) {
PARSE_ERR(("%s: cpuid directive malformed.", context));
}
#endif
#if BX_SUPPORT_X86_64
} else if (!strncmp(params[i], "x86_64=", 7)) {
if (parse_param_bool(params[i], 7, BXPN_CPUID_X86_64) < 0) {
@ -4071,6 +4083,9 @@ int bx_write_configuration(const char *rc, int overwrite)
#if BX_SUPPORT_VMX
fprintf(fp, ", vmx=%d", SIM->get_param_num(BXPN_CPUID_VMX)->get());
#endif
#if BX_SUPPORT_SVM
fprintf(fp, ", svm=%d", SIM->get_param_num(BXPN_CPUID_SVM)->get());
#endif
#if BX_SUPPORT_X86_64
fprintf(fp, ", x86_64=%d, 1g_pages=%d, pcid=%d, fsgsbase=%d",
SIM->get_param_bool(BXPN_CPUID_X86_64)->get(),

View File

@ -654,9 +654,14 @@ typedef
#define BX_SUPPORT_3DNOW 0
#define BX_SUPPORT_MISALIGNED_SSE 0
#define BX_SUPPORT_MONITOR_MWAIT 0
#define BX_SUPPORT_SVM 0
#define BX_SUPPORT_VMX 0
#define BX_SUPPORT_AVX 0
#if BX_SUPPORT_SVM && BX_SUPPORT_X86_64 == 0
#error "SVM require x86-64 support"
#endif
#if BX_SUPPORT_VMX >= 2 && BX_SUPPORT_X86_64 == 0
#error "VMXx2 require x86-64 support"
#endif

1176
bochs/configure vendored

File diff suppressed because it is too large Load Diff

View File

@ -1469,6 +1469,33 @@ if test "$support_vmx" -gt 1 -a "$use_x86_64" = 0; then
AC_MSG_ERROR([VMXx2 support require x86-64 enabled])
fi
support_svm=0
AC_MSG_CHECKING(for SVM support)
AC_ARG_ENABLE(vmx,
[ --enable-svm SVM (AMD: secure virtual machine) emulation],
[if test "$enableval" = yes; then
AC_MSG_RESULT(yes)
AC_DEFINE(BX_SUPPORT_SVM, 1)
support_svm=1
elif test "$enableval" = no; then
AC_MSG_RESULT(no)
AC_DEFINE(BX_SUPPORT_SVM, 0)
fi
],
[
AC_MSG_RESULT(no)
AC_DEFINE(BX_SUPPORT_SVM, 0)
]
)
if test "$support_svm" -gt 0 -a "$bx_cpu_level" -lt 6; then
AC_MSG_ERROR([for SVM support the CPU level must be set to 6])
fi
if test "$support_svm" -gt 1 -a "$use_x86_64" = 0; then
AC_MSG_ERROR([SVM support require x86-64 enabled])
fi
AC_MSG_CHECKING(for 3DNow! support)
AC_ARG_ENABLE(3dnow,
[ --enable-3dnow 3DNow! support (incomplete)],

View File

@ -132,7 +132,8 @@ OBJS64 = \
bmi64.o \
tbm32.o \
tbm64.o \
xop.o
xop.o \
svm.o
BX_INCLUDES = ../bochs.h ../config.h
@ -169,42 +170,42 @@ dist-clean: clean
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
access.o: access.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
access32.o: access32.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
access64.o: access64.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
aes.o: aes.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
apic.o: apic.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h ../iodev/iodev.h ../plugin.h ../extplugin.h \
xmm.h vmx.h svm.h stack.h ../iodev/iodev.h ../plugin.h ../extplugin.h \
../param_names.h
arith16.o: arith16.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
@ -212,63 +213,56 @@ arith16.o: arith16.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
arith32.o: arith32.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
arith64.o: arith64.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
arith8.o: arith8.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
avx.o: avx.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h simd_int.h
xmm.h vmx.h svm.h stack.h simd_int.h
avx2.o: avx2.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h simd_int.h simd_compare.h
xmm.h vmx.h svm.h stack.h simd_int.h simd_compare.h
gather.o: gather.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xop.o: xop.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h simd_int.h simd_compare.h
xmm.h vmx.h svm.h stack.h
avx_pfp.o: avx_pfp.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h ../fpu/softfloat-compare.h ../fpu/softfloat.h \
xmm.h vmx.h svm.h stack.h ../fpu/softfloat-compare.h ../fpu/softfloat.h \
simd_pfp.h
avx_fma.o: avx_fma.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
@ -276,85 +270,99 @@ avx_fma.o: avx_fma.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h ../fpu/softfloat-compare.h ../fpu/softfloat.h \
xmm.h vmx.h svm.h stack.h ../fpu/softfloat-compare.h ../fpu/softfloat.h \
simd_pfp.h
xop.o: xop.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h svm.h stack.h simd_int.h simd_compare.h
svm.o: svm.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h svm.h stack.h simd_int.h simd_compare.h
bcd.o: bcd.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
bit.o: bit.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
bit16.o: bit16.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
bit32.o: bit32.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
bit64.o: bit64.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
bmi32.o: bmi32.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
bmi64.o: bmi64.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
tbm32.o: tbm32.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
tbm64.o: tbm64.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
call_far.o: call_far.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
cpu.o: cpu.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h ../iodev/iodev.h ../plugin.h ../extplugin.h \
xmm.h vmx.h svm.h stack.h ../iodev/iodev.h ../plugin.h ../extplugin.h \
../param_names.h
crc32.o: crc32.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
@ -362,84 +370,84 @@ crc32.o: crc32.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
crregs.o: crregs.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
ctrl_xfer16.o: ctrl_xfer16.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
ctrl_xfer32.o: ctrl_xfer32.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
ctrl_xfer64.o: ctrl_xfer64.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
ctrl_xfer_pro.o: ctrl_xfer_pro.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
data_xfer16.o: data_xfer16.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
data_xfer32.o: data_xfer32.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
data_xfer64.o: data_xfer64.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
data_xfer8.o: data_xfer8.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
debugstuff.o: debugstuff.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h ../disasm/disasm.h
xmm.h vmx.h svm.h stack.h ../disasm/disasm.h
exception.o: exception.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h ../param_names.h ../iodev/iodev.h ../plugin.h \
xmm.h vmx.h svm.h stack.h ../param_names.h ../iodev/iodev.h ../plugin.h \
../extplugin.h
fetchdecode.o: fetchdecode.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
@ -447,7 +455,7 @@ fetchdecode.o: fetchdecode.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h fetchdecode.h fetchdecode_x87.h fetchdecode_sse.h \
xmm.h vmx.h svm.h stack.h fetchdecode.h fetchdecode_x87.h fetchdecode_sse.h \
fetchdecode_avx.h fetchdecode_xop.h
fetchdecode64.o: fetchdecode64.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
@ -455,7 +463,7 @@ fetchdecode64.o: fetchdecode64.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h fetchdecode.h fetchdecode_x87.h fetchdecode_sse.h \
xmm.h vmx.h svm.h stack.h fetchdecode.h fetchdecode_x87.h fetchdecode_sse.h \
fetchdecode_avx.h fetchdecode_xop.h
flag_ctrl.o: flag_ctrl.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
@ -463,49 +471,49 @@ flag_ctrl.o: flag_ctrl.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
flag_ctrl_pro.o: flag_ctrl_pro.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
fpu_emu.o: fpu_emu.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
generic_cpuid.o: generic_cpuid.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h ../param_names.h generic_cpuid.h ../cpu/cpuid.h
xmm.h vmx.h svm.h ../param_names.h generic_cpuid.h ../cpu/cpuid.h
icache.o: icache.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
init.o: init.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h ../param_names.h generic_cpuid.h ../cpu/cpuid.h
xmm.h vmx.h svm.h stack.h ../param_names.h generic_cpuid.h ../cpu/cpuid.h
io.o: io.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h ../iodev/iodev.h ../plugin.h ../extplugin.h \
xmm.h vmx.h svm.h stack.h ../iodev/iodev.h ../plugin.h ../extplugin.h \
../param_names.h
iret.o: iret.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
@ -513,203 +521,203 @@ iret.o: iret.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
jmp_far.o: jmp_far.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
load.o: load.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
logical16.o: logical16.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
logical32.o: logical32.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
logical64.o: logical64.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
logical8.o: logical8.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
mmx.o: mmx.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
msr.o: msr.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
mult16.o: mult16.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
mult32.o: mult32.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
mult64.o: mult64.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
mult8.o: mult8.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
paging.o: paging.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
proc_ctrl.o: proc_ctrl.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h ../param_names.h cpu.h \
cpuid.h crregs.h descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h \
apic.h i387.h ../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h \
../fpu/control_w.h xmm.h vmx.h stack.h
../fpu/control_w.h xmm.h vmx.h svm.h stack.h
protect_ctrl.o: protect_ctrl.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
resolver.o: resolver.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
ret_far.o: ret_far.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
segment_ctrl.o: segment_ctrl.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
segment_ctrl_pro.o: segment_ctrl_pro.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
shift16.o: shift16.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
shift32.o: shift32.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
shift64.o: shift64.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
shift8.o: shift8.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
smm.o: smm.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h smm.h
xmm.h vmx.h svm.h stack.h smm.h
soft_int.o: soft_int.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
sse.o: sse.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h simd_int.h simd_compare.h
xmm.h vmx.h svm.h stack.h simd_int.h simd_compare.h
sse_move.o: sse_move.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h simd_int.h
xmm.h vmx.h svm.h stack.h simd_int.h
sse_pfp.o: sse_pfp.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h ../fpu/softfloat-compare.h ../fpu/softfloat.h \
xmm.h vmx.h svm.h stack.h ../fpu/softfloat-compare.h ../fpu/softfloat.h \
simd_pfp.h
sse_rcp.o: sse_rcp.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
@ -717,77 +725,77 @@ sse_rcp.o: sse_rcp.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h ../fpu/softfloat-specialize.h ../fpu/softfloat.h
xmm.h vmx.h svm.h stack.h ../fpu/softfloat-specialize.h ../fpu/softfloat.h
sse_string.o: sse_string.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
stack16.o: stack16.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
stack32.o: stack32.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
stack64.o: stack64.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
string.o: string.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
tasking.o: tasking.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
../cpudb.h ../gui/paramtree.h ../memory/memory.h ../pc_system.h \
../gui/gui.h ../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h \
descriptor.h instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
vm8086.o: vm8086.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
vmcs.o: vmcs.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
vmexit.o: vmexit.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
vmx.o: vmx.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h ../iodev/iodev.h ../plugin.h ../extplugin.h \
xmm.h vmx.h svm.h stack.h ../iodev/iodev.h ../plugin.h ../extplugin.h \
../param_names.h
vmfunc.o: vmfunc.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
@ -795,11 +803,11 @@ vmfunc.o: vmfunc.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debu
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h
xsave.o: xsave.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../config.h ../osdep.h ../gui/siminterface.h ../cpudb.h \
../gui/paramtree.h ../memory/memory.h ../pc_system.h ../gui/gui.h \
../instrument/stubs/instrument.h cpu.h cpuid.h crregs.h descriptor.h \
instr.h ia_opcodes.h lazy_flags.h icache.h apic.h i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
xmm.h vmx.h stack.h
xmm.h vmx.h svm.h stack.h

View File

@ -826,6 +826,10 @@ typedef struct {
#include "vmx.h"
#endif
#if BX_SUPPORT_SVM
#include "svm.h"
#endif
#if BX_SUPPORT_MONITOR_MWAIT
struct monitor_addr_t {
@ -859,6 +863,9 @@ public: // for now...
#if BX_SUPPORT_VMX
Bit32u vmx_extensions_bitmask;
#endif
#if BX_SUPPORT_SVM
Bit32u svm_extensions_bitmask;
#endif
#define BX_CPUID_SUPPORT_ISA_EXTENSION(feature) \
(BX_CPU_THIS_PTR isa_extensions_bitmask & (feature))
@ -869,6 +876,9 @@ public: // for now...
#define BX_SUPPORT_VMX_EXTENSION(feature) \
(BX_CPU_THIS_PTR vmx_extensions_bitmask & (feature))
#define BX_SUPPORT_SVM_EXTENSION(feature) \
(BX_CPU_THIS_PTR svm_extensions_bitmask & (feature))
// General register set
// rax: accumulator
// rbx: base
@ -1004,6 +1014,14 @@ public: // for now...
VMX_CAP vmx_cap;
#endif
#if BX_SUPPORT_SVM
bx_bool in_svm;
bx_bool in_svm_guest;
bx_bool svm_gif; /* global interrupt enable flag, when zero all external interrupt disabled */
bx_phy_address vmcbptr;
VMCB_CACHE vmcb;
#endif
bx_bool EXT; /* 1 if processing external interrupt or exception
* or if not related to current instruction,
* 0 if current CS:IP caused exception */
@ -2541,6 +2559,17 @@ public: // for now...
BX_SMF BX_INSF_TYPE VMFUNC(bxInstruction_c *) BX_CPP_AttrRegparmN(1);
/* VMX instructions */
/* SVM instructions */
BX_SMF BX_INSF_TYPE VMRUN(bxInstruction_c *) BX_CPP_AttrRegparmN(1);
BX_SMF BX_INSF_TYPE VMMCALL(bxInstruction_c *) BX_CPP_AttrRegparmN(1);
BX_SMF BX_INSF_TYPE VMLOAD(bxInstruction_c *) BX_CPP_AttrRegparmN(1);
BX_SMF BX_INSF_TYPE VMSAVE(bxInstruction_c *) BX_CPP_AttrRegparmN(1);
BX_SMF BX_INSF_TYPE SKINIT(bxInstruction_c *) BX_CPP_AttrRegparmN(1);
BX_SMF BX_INSF_TYPE CLGI(bxInstruction_c *) BX_CPP_AttrRegparmN(1);
BX_SMF BX_INSF_TYPE STGI(bxInstruction_c *) BX_CPP_AttrRegparmN(1);
BX_SMF BX_INSF_TYPE INVLPGA(bxInstruction_c *) BX_CPP_AttrRegparmN(1);
/* SVM instructions */
/* SMX instructions */
BX_SMF BX_INSF_TYPE GETSEC(bxInstruction_c *) BX_CPP_AttrRegparmN(1);
/* SMX instructions */
@ -4021,6 +4050,7 @@ public: // for now...
BX_SMF BX_CPP_INLINE int bx_cpuid_support_x2apic(void);
BX_SMF BX_CPP_INLINE int bx_cpuid_support_smx(void);
BX_SMF BX_CPP_INLINE int bx_cpuid_support_vmx(void);
BX_SMF BX_CPP_INLINE int bx_cpuid_support_svm(void);
BX_SMF BX_CPP_INLINE int bx_cpuid_support_rdtscp(void);
BX_SMF BX_CPP_INLINE int bx_cpuid_support_tsc_deadline(void);
@ -4214,6 +4244,30 @@ public: // for now...
#endif
#endif
#if BX_SUPPORT_SVM
BX_SMF void SvmEnterSaveHostState(SVM_HOST_STATE *host);
BX_SMF bx_bool SvmEnterLoadCheckControls(bx_phy_address vmcb_addr, SVM_CONTROLS *ctrls);
BX_SMF bx_bool SvmEnterLoadCheckGuestState(bx_phy_address vmcb_addr);
BX_SMF void Svm_Vmexit(int reason);
BX_SMF void SvmExitLoadHostState(SVM_HOST_STATE *host);
BX_SMF Bit8u vmcb_read8(bx_phy_address vmcb_addr, unsigned offset);
BX_SMF Bit16u vmcb_read16(bx_phy_address vmcb_addr, unsigned offset);
BX_SMF Bit32u vmcb_read32(bx_phy_address vmcb_addr, unsigned offset);
BX_SMF Bit64u vmcb_read64(bx_phy_address vmcb_addr, unsigned offset);
BX_SMF void vmcb_write8(bx_phy_address vmcb_addr, unsigned offset, Bit8u val_8);
BX_SMF void vmcb_write16(bx_phy_address vmcb_addr, unsigned offset, Bit16u val_16);
BX_SMF void vmcb_write32(bx_phy_address vmcb_addr, unsigned offset, Bit32u val_32);
BX_SMF void vmcb_write64(bx_phy_address vmcb_addr, unsigned offset, Bit64u val_64);
BX_SMF void svm_segment_read(bx_phy_address vmcbaddr, bx_segment_reg_t *seg, unsigned offset);
BX_SMF void svm_segment_write(bx_phy_address vmcbaddr, bx_segment_reg_t *seg, unsigned offset);
BX_SMF void SvmInjectEvents(bx_phy_address vmcbaddr);
BX_SMF void SvmInterceptException(bxInstruction_c *i, unsigned vector,
Bit16u errcode, bx_bool errcode_valid, Bit64u qualification = 0);
BX_SMF void SvmInterceptIO(bxInstruction_c *i, unsigned op, Bit32u msr);
BX_SMF void SvmInterceptMSR(bxInstruction_c *i, unsigned port, unsigned len);
BX_SMF void register_svm_state(bx_param_c *parent);
#endif
#if BX_CONFIGURE_MSRS
int load_MSRs(const char *file);
#endif
@ -4461,6 +4515,11 @@ BX_CPP_INLINE bx_bool BX_CPU_C::alignment_check(void)
}
#endif
BX_CPP_INLINE int BX_CPU_C::bx_cpuid_support_svm(void)
{
return (BX_CPU_THIS_PTR isa_extensions_bitmask & BX_ISA_SVM);
}
BX_CPP_INLINE int BX_CPU_C::bx_cpuid_support_smx(void)
{
return (BX_CPU_THIS_PTR isa_extensions_bitmask & BX_ISA_SMX);

View File

@ -82,7 +82,7 @@ athlon64_clawhammer.o: athlon64_clawhammer.@CPP_SUFFIX@ ../../bochs.h \
../../gui/gui.h ../../instrument/stubs/instrument.h ../cpu.h ../cpuid.h \
../crregs.h ../descriptor.h ../instr.h ../ia_opcodes.h ../lazy_flags.h \
../icache.h ../apic.h ../i387.h ../../fpu/softfloat.h ../../fpu/tag_w.h \
../../fpu/status_w.h ../../fpu/control_w.h ../xmm.h ../vmx.h \
../../fpu/status_w.h ../../fpu/control_w.h ../xmm.h ../vmx.h ../svm.h \
athlon64_clawhammer.h ../../cpu/cpuid.h
atom_n270.o: atom_n270.@CPP_SUFFIX@ ../../bochs.h ../../config.h ../../osdep.h \
../../bx_debug/debug.h ../../config.h ../../osdep.h \
@ -91,7 +91,7 @@ atom_n270.o: atom_n270.@CPP_SUFFIX@ ../../bochs.h ../../config.h ../../osdep.h \
../../instrument/stubs/instrument.h ../cpu.h ../cpuid.h ../crregs.h \
../descriptor.h ../instr.h ../ia_opcodes.h ../lazy_flags.h ../icache.h \
../apic.h ../i387.h ../../fpu/softfloat.h ../../fpu/tag_w.h \
../../fpu/status_w.h ../../fpu/control_w.h ../xmm.h ../vmx.h \
../../fpu/status_w.h ../../fpu/control_w.h ../xmm.h ../vmx.h ../svm.h \
../../param_names.h atom_n270.h
core2_penryn_t9600.o: core2_penryn_t9600.@CPP_SUFFIX@ ../../bochs.h ../../config.h \
../../osdep.h ../../bx_debug/debug.h ../../config.h ../../osdep.h \
@ -100,7 +100,7 @@ core2_penryn_t9600.o: core2_penryn_t9600.@CPP_SUFFIX@ ../../bochs.h ../../config
../../instrument/stubs/instrument.h ../cpu.h ../cpuid.h ../crregs.h \
../descriptor.h ../instr.h ../ia_opcodes.h ../lazy_flags.h ../icache.h \
../apic.h ../i387.h ../../fpu/softfloat.h ../../fpu/tag_w.h \
../../fpu/status_w.h ../../fpu/control_w.h ../xmm.h ../vmx.h \
../../fpu/status_w.h ../../fpu/control_w.h ../xmm.h ../vmx.h ../svm.h \
../../param_names.h core2_penryn_t9600.h ../../cpu/cpuid.h
core_duo_t2400_yonah.o: core_duo_t2400_yonah.@CPP_SUFFIX@ ../../bochs.h \
../../config.h ../../osdep.h ../../bx_debug/debug.h ../../config.h \
@ -109,7 +109,7 @@ core_duo_t2400_yonah.o: core_duo_t2400_yonah.@CPP_SUFFIX@ ../../bochs.h \
../../gui/gui.h ../../instrument/stubs/instrument.h ../cpu.h ../cpuid.h \
../crregs.h ../descriptor.h ../instr.h ../ia_opcodes.h ../lazy_flags.h \
../icache.h ../apic.h ../i387.h ../../fpu/softfloat.h ../../fpu/tag_w.h \
../../fpu/status_w.h ../../fpu/control_w.h ../xmm.h ../vmx.h \
../../fpu/status_w.h ../../fpu/control_w.h ../xmm.h ../vmx.h ../svm.h \
../../param_names.h core_duo_t2400_yonah.h
corei7_sandy_bridge_2600K.o: corei7_sandy_bridge_2600K.@CPP_SUFFIX@ ../../bochs.h \
../../config.h ../../osdep.h ../../bx_debug/debug.h ../../config.h \
@ -118,7 +118,7 @@ corei7_sandy_bridge_2600K.o: corei7_sandy_bridge_2600K.@CPP_SUFFIX@ ../../bochs.
../../gui/gui.h ../../instrument/stubs/instrument.h ../cpu.h ../cpuid.h \
../crregs.h ../descriptor.h ../instr.h ../ia_opcodes.h ../lazy_flags.h \
../icache.h ../apic.h ../i387.h ../../fpu/softfloat.h ../../fpu/tag_w.h \
../../fpu/status_w.h ../../fpu/control_w.h ../xmm.h ../vmx.h \
../../fpu/status_w.h ../../fpu/control_w.h ../xmm.h ../vmx.h ../svm.h \
../../param_names.h corei7_sandy_bridge_2600K.h ../../cpu/cpuid.h
corei5_arrandale_m520.o: corei5_arrandale_m520.@CPP_SUFFIX@ ../../bochs.h \
../../config.h ../../osdep.h ../../bx_debug/debug.h ../../config.h \
@ -127,7 +127,7 @@ corei5_arrandale_m520.o: corei5_arrandale_m520.@CPP_SUFFIX@ ../../bochs.h \
../../gui/gui.h ../../instrument/stubs/instrument.h ../cpu.h ../cpuid.h \
../crregs.h ../descriptor.h ../instr.h ../ia_opcodes.h ../lazy_flags.h \
../icache.h ../apic.h ../i387.h ../../fpu/softfloat.h ../../fpu/tag_w.h \
../../fpu/status_w.h ../../fpu/control_w.h ../xmm.h ../vmx.h \
../../fpu/status_w.h ../../fpu/control_w.h ../xmm.h ../vmx.h ../svm.h \
../../param_names.h corei5_arrandale_m520.h ../../cpu/cpuid.h
p2_klamath.o: p2_klamath.@CPP_SUFFIX@ ../../bochs.h ../../config.h ../../osdep.h \
../../bx_debug/debug.h ../../config.h ../../osdep.h \
@ -136,7 +136,7 @@ p2_klamath.o: p2_klamath.@CPP_SUFFIX@ ../../bochs.h ../../config.h ../../osdep.h
../../instrument/stubs/instrument.h ../cpu.h ../cpuid.h ../crregs.h \
../descriptor.h ../instr.h ../ia_opcodes.h ../lazy_flags.h ../icache.h \
../apic.h ../i387.h ../../fpu/softfloat.h ../../fpu/tag_w.h \
../../fpu/status_w.h ../../fpu/control_w.h ../xmm.h ../vmx.h \
../../fpu/status_w.h ../../fpu/control_w.h ../xmm.h ../vmx.h ../svm.h \
p2_klamath.h
p3_katmai.o: p3_katmai.@CPP_SUFFIX@ ../../bochs.h ../../config.h ../../osdep.h \
../../bx_debug/debug.h ../../config.h ../../osdep.h \
@ -145,7 +145,7 @@ p3_katmai.o: p3_katmai.@CPP_SUFFIX@ ../../bochs.h ../../config.h ../../osdep.h \
../../instrument/stubs/instrument.h ../cpu.h ../cpuid.h ../crregs.h \
../descriptor.h ../instr.h ../ia_opcodes.h ../lazy_flags.h ../icache.h \
../apic.h ../i387.h ../../fpu/softfloat.h ../../fpu/tag_w.h \
../../fpu/status_w.h ../../fpu/control_w.h ../xmm.h ../vmx.h p3_katmai.h
../../fpu/status_w.h ../../fpu/control_w.h ../xmm.h ../vmx.h ../svm.h p3_katmai.h
p4_prescott_celeron_336.o: p4_prescott_celeron_336.@CPP_SUFFIX@ ../../bochs.h \
../../config.h ../../osdep.h ../../bx_debug/debug.h ../../config.h \
../../osdep.h ../../gui/siminterface.h ../../cpudb.h \
@ -153,7 +153,7 @@ p4_prescott_celeron_336.o: p4_prescott_celeron_336.@CPP_SUFFIX@ ../../bochs.h \
../../gui/gui.h ../../instrument/stubs/instrument.h ../cpu.h ../cpuid.h \
../crregs.h ../descriptor.h ../instr.h ../ia_opcodes.h ../lazy_flags.h \
../icache.h ../apic.h ../i387.h ../../fpu/softfloat.h ../../fpu/tag_w.h \
../../fpu/status_w.h ../../fpu/control_w.h ../xmm.h ../vmx.h \
../../fpu/status_w.h ../../fpu/control_w.h ../xmm.h ../vmx.h ../svm.h \
../../param_names.h p4_prescott_celeron_336.h ../../cpu/cpuid.h
p4_willamette.o: p4_willamette.@CPP_SUFFIX@ ../../bochs.h ../../config.h \
../../osdep.h ../../bx_debug/debug.h ../../config.h ../../osdep.h \
@ -162,7 +162,7 @@ p4_willamette.o: p4_willamette.@CPP_SUFFIX@ ../../bochs.h ../../config.h \
../../instrument/stubs/instrument.h ../cpu.h ../cpuid.h ../crregs.h \
../descriptor.h ../instr.h ../ia_opcodes.h ../lazy_flags.h ../icache.h \
../apic.h ../i387.h ../../fpu/softfloat.h ../../fpu/tag_w.h \
../../fpu/status_w.h ../../fpu/control_w.h ../xmm.h ../vmx.h \
../../fpu/status_w.h ../../fpu/control_w.h ../xmm.h ../vmx.h ../svm.h \
../../param_names.h p4_willamette.h
pentium_mmx.o: pentium_mmx.@CPP_SUFFIX@ ../../bochs.h ../../config.h ../../osdep.h \
../../bx_debug/debug.h ../../config.h ../../osdep.h \
@ -171,7 +171,7 @@ pentium_mmx.o: pentium_mmx.@CPP_SUFFIX@ ../../bochs.h ../../config.h ../../osdep
../../instrument/stubs/instrument.h ../cpu.h ../cpuid.h ../crregs.h \
../descriptor.h ../instr.h ../ia_opcodes.h ../lazy_flags.h ../icache.h \
../apic.h ../i387.h ../../fpu/softfloat.h ../../fpu/tag_w.h \
../../fpu/status_w.h ../../fpu/control_w.h ../xmm.h ../vmx.h \
../../fpu/status_w.h ../../fpu/control_w.h ../xmm.h ../vmx.h ../svm.h \
pentium_mmx.h
amd_k6_2_chomper.o: amd_k6_2_chomper.@CPP_SUFFIX@ ../../bochs.h ../../config.h ../../osdep.h \
../../bx_debug/debug.h ../../config.h ../../osdep.h \
@ -180,5 +180,5 @@ amd_k6_2_chomper.o: amd_k6_2_chomper.@CPP_SUFFIX@ ../../bochs.h ../../config.h .
../../instrument/stubs/instrument.h ../cpu.h ../cpuid.h ../crregs.h \
../descriptor.h ../instr.h ../ia_opcodes.h ../lazy_flags.h ../icache.h \
../apic.h ../i387.h ../../fpu/softfloat.h ../../fpu/tag_w.h \
../../fpu/status_w.h ../../fpu/control_w.h ../xmm.h ../vmx.h \
../../fpu/status_w.h ../../fpu/control_w.h ../xmm.h ../vmx.h ../svm.h \
amd_k6_2_chomper.h

View File

@ -44,6 +44,9 @@ public:
#if BX_SUPPORT_VMX
virtual Bit32u get_vmx_extensions_bitmask(void) const { return 0; }
#endif
#if BX_SUPPORT_SVM
virtual Bit32u get_svm_extensions_bitmask(void) const { return 0; }
#endif
virtual void get_cpuid_leaf(Bit32u function, Bit32u subfunction, cpuid_function_t *leaf) const = 0;
@ -106,6 +109,7 @@ typedef bx_cpuid_t* (*bx_create_cpuid_method)(BX_CPU_C *cpu);
#define BX_ISA_FMA4 (BX_CONST64(1) << 34) /* FMA4 instruction (AMD) */
#define BX_ISA_XOP (BX_CONST64(1) << 35) /* XOP instruction (AMD) */
#define BX_ISA_TBM (BX_CONST64(1) << 36) /* TBM instruction (AMD) */
#define BX_ISA_SVM (BX_CONST64(1) << 37) /* SVM instruction (AMD) */
// cpuid non-ISA features
#define BX_CPU_DEBUG_EXTENSIONS (1 << 0) /* Debug Extensions support */

View File

@ -56,6 +56,10 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::MOV_DdRd(bxInstruction_c *i)
exception(BX_GP_EXCEPTION, 0);
}
#if BX_SUPPORT_SVM
if (SVM_DR_WRITE_INTERCEPTED(i->nnn())) Svm_Vmexit(SVM_VMEXIT_DR0_WRITE + i->nnn());
#endif
invalidate_prefetch_q();
/* This instruction is always treated as a register-to-register,
@ -161,6 +165,10 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::MOV_RdDd(bxInstruction_c *i)
exception(BX_GP_EXCEPTION, 0);
}
#if BX_SUPPORT_SVM
if (SVM_DR_READ_INTERCEPTED(i->nnn())) Svm_Vmexit(SVM_VMEXIT_DR0_READ + i->nnn());
#endif
/* This instruction is always treated as a register-to-register,
* regardless of the encoding of the MOD field in the MODRM byte.
*/
@ -233,6 +241,10 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::MOV_DqRq(bxInstruction_c *i)
exception(BX_GP_EXCEPTION, 0);
}
#if BX_SUPPORT_SVM
if (SVM_DR_WRITE_INTERCEPTED(i->nnn())) Svm_Vmexit(SVM_VMEXIT_DR0_WRITE + i->nnn());
#endif
invalidate_prefetch_q();
/* This instruction is always treated as a register-to-register,
@ -339,6 +351,10 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::MOV_RqDq(bxInstruction_c *i)
exception(BX_GP_EXCEPTION, 0);
}
#if BX_SUPPORT_SVM
if (SVM_DR_READ_INTERCEPTED(i->nnn())) Svm_Vmexit(SVM_VMEXIT_DR0_READ + i->nnn());
#endif
/* This instruction is always treated as a register-to-register,
* regardless of the encoding of the MOD field in the MODRM byte.
*/

View File

@ -202,9 +202,9 @@ struct bx_efer_t {
IMPLEMENT_CRREG_ACCESSORS(LMA, 10);
#endif
IMPLEMENT_CRREG_ACCESSORS(NXE, 11);
#if BX_SUPPORT_X86_64
IMPLEMENT_CRREG_ACCESSORS(SVME, 12); /* AMD Secure Virtual Machine */
IMPLEMENT_CRREG_ACCESSORS(LMSLE, 13); /* AMD Long Mode Segment Limit */
#if BX_SUPPORT_X86_64
IMPLEMENT_CRREG_ACCESSORS(FFXSR, 14);
#endif

View File

@ -411,14 +411,14 @@ static const BxOpcodeInfo_t BxOpcodeInfoG7[64+8] = {
/* 0F 01 D5 */ { 0, BX_IA_ERROR },
/* 0F 01 D6 */ { 0, BX_IA_ERROR },
/* 0F 01 D7 */ { 0, BX_IA_ERROR },
/* 0F 01 D8 */ { 0, BX_IA_ERROR },
/* 0F 01 D9 */ { 0, BX_IA_ERROR },
/* 0F 01 DA */ { 0, BX_IA_ERROR },
/* 0F 01 DB */ { 0, BX_IA_ERROR },
/* 0F 01 DC */ { 0, BX_IA_ERROR },
/* 0F 01 DD */ { 0, BX_IA_ERROR },
/* 0F 01 DE */ { 0, BX_IA_ERROR },
/* 0F 01 DF */ { 0, BX_IA_ERROR },
/* 0F 01 D8 */ { 0, BX_IA_VMRUN },
/* 0F 01 D9 */ { 0, BX_IA_VMMCALL },
/* 0F 01 DA */ { 0, BX_IA_VMLOAD },
/* 0F 01 DB */ { 0, BX_IA_VMSAVE },
/* 0F 01 DC */ { 0, BX_IA_STGI },
/* 0F 01 DD */ { 0, BX_IA_CLGI },
/* 0F 01 DE */ { 0, BX_IA_SKINIT },
/* 0F 01 DF */ { 0, BX_IA_INVLPGA },
/* 0F 01 E0 */ { 0, BX_IA_SMSW_Ew },
/* 0F 01 E1 */ { 0, BX_IA_SMSW_Ew },
/* 0F 01 E2 */ { 0, BX_IA_SMSW_Ew },
@ -490,14 +490,14 @@ static const BxOpcodeInfo_t BxOpcodeInfoG7q[64+8] = {
/* 0F 01 D5 */ { 0, BX_IA_ERROR },
/* 0F 01 D6 */ { 0, BX_IA_ERROR },
/* 0F 01 D7 */ { 0, BX_IA_ERROR },
/* 0F 01 D8 */ { 0, BX_IA_ERROR },
/* 0F 01 D9 */ { 0, BX_IA_ERROR },
/* 0F 01 DA */ { 0, BX_IA_ERROR },
/* 0F 01 DB */ { 0, BX_IA_ERROR },
/* 0F 01 DC */ { 0, BX_IA_ERROR },
/* 0F 01 DD */ { 0, BX_IA_ERROR },
/* 0F 01 DE */ { 0, BX_IA_ERROR },
/* 0F 01 DF */ { 0, BX_IA_ERROR },
/* 0F 01 D8 */ { 0, BX_IA_VMRUN },
/* 0F 01 D9 */ { 0, BX_IA_VMMCALL },
/* 0F 01 DA */ { 0, BX_IA_VMLOAD },
/* 0F 01 DB */ { 0, BX_IA_VMSAVE },
/* 0F 01 DC */ { 0, BX_IA_STGI },
/* 0F 01 DD */ { 0, BX_IA_CLGI },
/* 0F 01 DE */ { 0, BX_IA_SKINIT },
/* 0F 01 DF */ { 0, BX_IA_INVLPGA },
/* 0F 01 E0 */ { 0, BX_IA_SMSW_Ew },
/* 0F 01 E1 */ { 0, BX_IA_SMSW_Ew },
/* 0F 01 E2 */ { 0, BX_IA_SMSW_Ew },

View File

@ -171,6 +171,12 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::CMC(bxInstruction_c *i)
BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::PUSHF_Fw(bxInstruction_c *i)
{
#if BX_SUPPORT_SVM
if (BX_CPU_THIS_PTR in_svm_guest) {
if (SVM_INTERCEPT(0, SVM_INTERCEPT0_PUSHF)) Svm_Vmexit(SVM_VMEXIT_PUSHF);
}
#endif
Bit16u flags = (Bit16u) read_eflags();
if (v8086_mode()) {
@ -199,6 +205,12 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::PUSHF_Fw(bxInstruction_c *i)
BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::POPF_Fw(bxInstruction_c *i)
{
#if BX_SUPPORT_SVM
if (BX_CPU_THIS_PTR in_svm_guest) {
if (SVM_INTERCEPT(0, SVM_INTERCEPT0_POPF)) Svm_Vmexit(SVM_VMEXIT_POPF);
}
#endif
// Build a mask of the following bits:
// x,NT,IOPL,OF,DF,IF,TF,SF,ZF,x,AF,x,PF,x,CF
Bit32u changeMask = EFlagsOSZAPCMask | EFlagsTFMask | EFlagsDFMask | EFlagsNTMask;
@ -257,6 +269,12 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::POPF_Fw(bxInstruction_c *i)
BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::PUSHF_Fd(bxInstruction_c *i)
{
#if BX_SUPPORT_SVM
if (BX_CPU_THIS_PTR in_svm_guest) {
if (SVM_INTERCEPT(0, SVM_INTERCEPT0_PUSHF)) Svm_Vmexit(SVM_VMEXIT_PUSHF);
}
#endif
if (v8086_mode() && (BX_CPU_THIS_PTR get_IOPL()<3)) {
BX_DEBUG(("PUSHFD: #GP(0) in v8086 mode"));
exception(BX_GP_EXCEPTION, 0);
@ -270,6 +288,12 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::PUSHF_Fd(bxInstruction_c *i)
BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::POPF_Fd(bxInstruction_c *i)
{
#if BX_SUPPORT_SVM
if (BX_CPU_THIS_PTR in_svm_guest) {
if (SVM_INTERCEPT(0, SVM_INTERCEPT0_POPF)) Svm_Vmexit(SVM_VMEXIT_POPF);
}
#endif
// Build a mask of the following bits:
// ID,VIP,VIF,AC,VM,RF,x,NT,IOPL,OF,DF,IF,TF,SF,ZF,x,AF,x,PF,x,CF
Bit32u changeMask = EFlagsOSZAPCMask | EFlagsTFMask |
@ -314,6 +338,12 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::POPF_Fd(bxInstruction_c *i)
#if BX_SUPPORT_X86_64
BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::PUSHF_Fq(bxInstruction_c *i)
{
#if BX_SUPPORT_SVM
if (BX_CPU_THIS_PTR in_svm_guest) {
if (SVM_INTERCEPT(0, SVM_INTERCEPT0_PUSHF)) Svm_Vmexit(SVM_VMEXIT_PUSHF);
}
#endif
// VM & RF flags cleared in image stored on the stack
push_64(read_eflags() & 0x00fcffff);
@ -322,6 +352,12 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::PUSHF_Fq(bxInstruction_c *i)
BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::POPF_Fq(bxInstruction_c *i)
{
#if BX_SUPPORT_SVM
if (BX_CPU_THIS_PTR in_svm_guest) {
if (SVM_INTERCEPT(0, SVM_INTERCEPT0_POPF)) Svm_Vmexit(SVM_VMEXIT_POPF);
}
#endif
// Build a mask of the following bits:
// ID,VIP,VIF,AC,VM,RF,x,NT,IOPL,OF,DF,IF,TF,SF,ZF,x,AF,x,PF,x,CF
Bit32u changeMask = EFlagsOSZAPCMask | EFlagsTFMask | EFlagsDFMask

View File

@ -864,6 +864,25 @@ void bx_generic_cpuid_t::init_isa_extensions_bitmask(void)
}
#endif
#if BX_SUPPORT_SVM
static unsigned svm_enabled = SIM->get_param_num(BXPN_CPUID_SVM)->get();
if (svm_enabled) {
features_bitmask |= BX_ISA_SVM;
if (! x86_64_enabled) {
BX_PANIC(("PANIC: SVM emulation requires x86-64 support !"));
return;
}
}
#endif
#if BX_SUPPORT_VMX && BX_SUPPORT_SVM
if (vmx_enabled && svm_enabled) {
BX_PANIC(("PANIC: VMX and SVM emulation cannot be enabled together in same configuration !"));
return;
}
#endif
#endif // CPU_LEVEL >= 6
#endif // CPU_LEVEL >= 5
@ -976,6 +995,22 @@ void bx_generic_cpuid_t::init_vmx_extensions_bitmask(void)
}
#endif
#if BX_SUPPORT_SVM
void bx_generic_cpuid_t::init_svm_extensions_bitmask(void)
{
Bit32u features_bitmask = 0;
/*
static bx_bool svm_enabled = SIM->get_param_bool(BXPN_CPUID_SVM)->get();
if (svm_enabled) {
// do smth
}
*/
this->svm_extensions_bitmask = features_bitmask;
}
#endif
/*
* Get CPU version information:
*

View File

@ -41,6 +41,9 @@ public:
#if BX_SUPPORT_VMX
virtual Bit32u get_vmx_extensions_bitmask(void) const { return vmx_extensions_bitmask; }
#endif
#if BX_SUPPORT_SVM
virtual Bit32u get_svm_extensions_bitmask(void) const { return svm_extensions_bitmask; }
#endif
virtual void get_cpuid_leaf(Bit32u function, Bit32u subfunction, cpuid_function_t *leaf) const;
@ -52,12 +55,18 @@ private:
#if BX_SUPPORT_VMX
void init_vmx_extensions_bitmask(void);
#endif
#if BX_SUPPORT_SVM
void init_svm_extensions_bitmask(void);
#endif
Bit64u isa_extensions_bitmask;
Bit32u cpu_extensions_bitmask;
#if BX_SUPPORT_VMX
Bit32u vmx_extensions_bitmask;
#endif
#if BX_SUPPORT_SVM
Bit32u svm_extensions_bitmask;
#endif
#if BX_SUPPORT_SMP
unsigned nprocessors;

View File

@ -1366,13 +1366,24 @@ bx_define_opcode(BX_IA_VMWRITE_GqEq, &BX_CPU_C::VMWRITE, &BX_CPU_C::VMWRITE, BX_
bx_define_opcode(BX_IA_INVEPT, &BX_CPU_C::INVEPT, &BX_CPU_C::BxError, BX_ISA_VMX, 0)
bx_define_opcode(BX_IA_INVVPID, &BX_CPU_C::INVVPID, &BX_CPU_C::BxError, BX_ISA_VMX, 0)
#endif
bx_define_opcode(BX_IA_VMFUNC, &BX_CPU_C::VMFUNC, &BX_CPU_C::VMFUNC, BX_ISA_VMX, 0)
bx_define_opcode(BX_IA_VMFUNC, &BX_CPU_C::BxError, &BX_CPU_C::VMFUNC, BX_ISA_VMX, 0)
// VMX
// SMX
bx_define_opcode(BX_IA_GETSEC, &BX_CPU_C::GETSEC, &BX_CPU_C::GETSEC, BX_ISA_SMX, 0)
// SMX
// SVM
bx_define_opcode(BX_IA_VMRUN, &BX_CPU_C::BxError, &BX_CPU_C::VMRUN, BX_ISA_SVM, 0)
bx_define_opcode(BX_IA_VMMCALL, &BX_CPU_C::BxError, &BX_CPU_C::VMMCALL, BX_ISA_SVM, 0)
bx_define_opcode(BX_IA_VMLOAD, &BX_CPU_C::BxError, &BX_CPU_C::VMLOAD, BX_ISA_SVM, 0)
bx_define_opcode(BX_IA_VMSAVE, &BX_CPU_C::BxError, &BX_CPU_C::VMSAVE, BX_ISA_SVM, 0)
bx_define_opcode(BX_IA_STGI, &BX_CPU_C::BxError, &BX_CPU_C::STGI, BX_ISA_SVM, 0)
bx_define_opcode(BX_IA_CLGI, &BX_CPU_C::BxError, &BX_CPU_C::CLGI, BX_ISA_SVM, 0)
bx_define_opcode(BX_IA_SKINIT, &BX_CPU_C::BxError, &BX_CPU_C::SKINIT, BX_ISA_SVM, 0)
bx_define_opcode(BX_IA_INVLPGA, &BX_CPU_C::BxError, &BX_CPU_C::INVLPGA, BX_ISA_SVM, 0)
// SVM
#if BX_CPU_LEVEL >= 6
bx_define_opcode(BX_IA_INVPCID, &BX_CPU_C::INVPCID, &BX_CPU_C::BxError, BX_ISA_INVPCID, 0)
#endif

View File

@ -607,6 +607,10 @@ void BX_CPU_C::register_state(void)
register_vmx_state(cpu);
#endif
#if BX_SUPPORT_VMX
register_svm_state(cpu);
#endif
BXRS_HEX_PARAM_SIMPLE32(cpu, async_event);
BXRS_PARAM_BOOL(cpu, INTR, INTR);
@ -980,6 +984,8 @@ void BX_CPU_C::reset(unsigned source)
BX_CPU_THIS_PTR efer_suppmask |= (BX_EFER_SCE_MASK | BX_EFER_LME_MASK | BX_EFER_LMA_MASK);
if (BX_CPUID_SUPPORT_CPU_EXTENSION(BX_CPU_FFXSR))
BX_CPU_THIS_PTR efer_suppmask |= BX_EFER_FFXSR_MASK;
if (BX_CPUID_SUPPORT_CPU_EXTENSION(BX_ISA_SVM))
BX_CPU_THIS_PTR efer_suppmask |= BX_EFER_SVME_MASK;
}
#endif
@ -1099,6 +1105,11 @@ void BX_CPU_C::reset(unsigned source)
/*BX_IA32_FEATURE_CONTROL_LOCK_BIT | */BX_IA32_FEATURE_CONTROL_VMX_ENABLE_BIT;
#endif
#if BX_SUPPORT_SVM
BX_CPU_THIS_PTR in_svm = BX_CPU_THIS_PTR in_svm_guest = 0;
BX_CPU_THIS_PTR svm_gif = 1;
#endif
#if BX_SUPPORT_SMP
// notice if I'm the bootstrap processor. If not, do the equivalent of
// a HALT instruction.

View File

@ -478,6 +478,12 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::INVLPG(bxInstruction_c* i)
VMexit_INVLPG(i, laddr);
#endif
#if BX_SUPPORT_SVM
if (BX_CPU_THIS_PTR in_svm_guest) {
if (SVM_INTERCEPT(0, SVM_INTERCEPT0_INVLPG)) Svm_Vmexit(SVM_VMEXIT_INVLPG);
}
#endif
#if BX_SUPPORT_X86_64
if (IsCanonical(laddr))
#endif

View File

@ -48,6 +48,12 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::PAUSE(bxInstruction_c *i)
VMexit_PAUSE(i);
#endif
#if BX_SUPPORT_SVM
if (BX_CPU_THIS_PTR in_svm_guest) {
if (SVM_INTERCEPT(0, SVM_INTERCEPT0_PAUSE)) Svm_Vmexit(SVM_VMEXIT_PAUSE);
}
#endif
BX_NEXT_INSTR(i);
}
@ -72,6 +78,12 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::CPUID(bxInstruction_c *i)
}
#endif
#if BX_SUPPORT_SVM
if (BX_CPU_THIS_PTR in_svm_guest) {
if (SVM_INTERCEPT(0, SVM_INTERCEPT0_CPUID)) Svm_Vmexit(SVM_VMEXIT_CPUID);
}
#endif
struct cpuid_function_t leaf;
BX_CPU_THIS_PTR cpuid->get_cpuid_leaf(EAX, ECX, &leaf);
@ -135,6 +147,12 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::HLT(bxInstruction_c *i)
VMexit_HLT(i);
#endif
#if BX_SUPPORT_SVM
if (BX_CPU_THIS_PTR in_svm_guest) {
if (SVM_INTERCEPT(0, SVM_INTERCEPT0_HLT)) Svm_Vmexit(SVM_VMEXIT_HLT);
}
#endif
// stops instruction execution and places the processor in a
// HALT state. An enabled interrupt, NMI, or reset will resume
// execution. If interrupt (including NMI) is used to resume
@ -177,6 +195,12 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::INVD(bxInstruction_c *i)
}
#endif
#if BX_SUPPORT_SVM
if (BX_CPU_THIS_PTR in_svm_guest) {
if (SVM_INTERCEPT(0, SVM_INTERCEPT0_INVD)) Svm_Vmexit(SVM_VMEXIT_INVD);
}
#endif
invalidate_prefetch_q();
BX_DEBUG(("INVD: Flush internal caches !"));
@ -403,10 +427,16 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::RDPMC(bxInstruction_c *i)
if (BX_CPU_THIS_PTR cr4.get_PCE() || CPL==0 || real_mode()) {
#if BX_SUPPORT_VMX
if (BX_CPU_THIS_PTR in_vmx_guest)
if (BX_CPU_THIS_PTR in_vmx_guest)
VMexit_RDPMC(i);
#endif
#if BX_SUPPORT_SVM
if (BX_CPU_THIS_PTR in_svm_guest) {
if (SVM_INTERCEPT(0, SVM_INTERCEPT0_RDPMC)) Svm_Vmexit(SVM_VMEXIT_RDPMC);
}
#endif
/* According to manual, Pentium 4 has 18 counters,
* previous versions have two. And the P4 also can do
* short read-out (EDX always 0). Otherwise it is
@ -449,6 +479,10 @@ Bit64u BX_CPU_C::get_TSC(void)
#if BX_SUPPORT_VMX
if (BX_CPU_THIS_PTR in_vmx_guest)
tsc += VMX_TSC_Offset();
#endif
#if BX_SUPPORT_SVM
if (BX_CPU_THIS_PTR in_svm_guest)
tsc += BX_CPU_THIS_PTR vmcb.ctrls.tsc_offset;
#endif
return tsc;
}
@ -467,25 +501,28 @@ void BX_CPU_C::set_TSC(Bit64u newval)
BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::RDTSC(bxInstruction_c *i)
{
#if BX_CPU_LEVEL >= 5
if (! BX_CPU_THIS_PTR cr4.get_TSD() || CPL==0) {
#if BX_SUPPORT_VMX
if (BX_CPU_THIS_PTR in_vmx_guest)
VMexit_RDTSC(i);
#endif
// return ticks
Bit64u ticks = BX_CPU_THIS_PTR get_TSC();
RAX = GET32L(ticks);
RDX = GET32H(ticks);
BX_DEBUG(("RDTSC: ticks 0x%08x:%08x", EDX, EAX));
} else {
if (BX_CPU_THIS_PTR cr4.get_TSD() && CPL != 0) {
BX_ERROR(("RDTSC: not allowed to use instruction !"));
exception(BX_GP_EXCEPTION, 0);
}
#if BX_SUPPORT_VMX
if (BX_CPU_THIS_PTR in_vmx_guest)
VMexit_RDTSC(i);
#endif
#if BX_SUPPORT_SVM
if (BX_CPU_THIS_PTR in_svm_guest)
if (SVM_INTERCEPT(0, SVM_INTERCEPT0_RDTSC)) Svm_Vmexit(SVM_VMEXIT_RDTSC);
#endif
// return ticks
Bit64u ticks = BX_CPU_THIS_PTR get_TSC();
RAX = GET32L(ticks);
RDX = GET32H(ticks);
BX_DEBUG(("RDTSC: ticks 0x%08x:%08x", EDX, EAX));
#endif
BX_NEXT_INSTR(i);
@ -505,24 +542,28 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::RDTSCP(bxInstruction_c *i)
}
#endif
if (! BX_CPU_THIS_PTR cr4.get_TSD() || CPL==0) {
#if BX_SUPPORT_VMX
if (BX_CPU_THIS_PTR in_vmx_guest)
VMexit_RDTSC(i);
#endif
// return ticks
Bit64u ticks = BX_CPU_THIS_PTR get_TSC();
RAX = GET32L(ticks);
RDX = GET32H(ticks);
RCX = MSR_TSC_AUX;
} else {
if (BX_CPU_THIS_PTR cr4.get_TSD() && CPL != 0) {
BX_ERROR(("RDTSCP: not allowed to use instruction !"));
exception(BX_GP_EXCEPTION, 0);
}
#if BX_SUPPORT_VMX
if (BX_CPU_THIS_PTR in_vmx_guest)
VMexit_RDTSC(i);
#endif
#if BX_SUPPORT_SVM
if (BX_CPU_THIS_PTR in_svm_guest)
if (SVM_INTERCEPT(1, SVM_INTERCEPT1_RDTSCP)) Svm_Vmexit(SVM_VMEXIT_RDTSCP);
#endif
// return ticks
Bit64u ticks = BX_CPU_THIS_PTR get_TSC();
RAX = GET32L(ticks);
RDX = GET32H(ticks);
RCX = MSR_TSC_AUX;
#endif
BX_NEXT_INSTR(i);

View File

@ -728,6 +728,12 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SGDT_Ms(bxInstruction_c *i)
VMexit_Instruction(i, VMX_VMEXIT_GDTR_IDTR_ACCESS);
#endif
#if BX_SUPPORT_SVM
if (BX_CPU_THIS_PTR in_svm_guest) {
if (SVM_INTERCEPT(0, SVM_INTERCEPT0_GDTR_READ)) Svm_Vmexit(SVM_VMEXIT_GDTR_READ);
}
#endif
Bit16u limit_16 = BX_CPU_THIS_PTR gdtr.limit;
Bit32u base_32 = (Bit32u) BX_CPU_THIS_PTR gdtr.base;
@ -749,6 +755,12 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SIDT_Ms(bxInstruction_c *i)
VMexit_Instruction(i, VMX_VMEXIT_GDTR_IDTR_ACCESS);
#endif
#if BX_SUPPORT_SVM
if (BX_CPU_THIS_PTR in_svm_guest) {
if (SVM_INTERCEPT(0, SVM_INTERCEPT0_IDTR_READ)) Svm_Vmexit(SVM_VMEXIT_IDTR_READ);
}
#endif
Bit16u limit_16 = BX_CPU_THIS_PTR idtr.limit;
Bit32u base_32 = (Bit32u) BX_CPU_THIS_PTR idtr.base;
@ -776,6 +788,12 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::LGDT_Ms(bxInstruction_c *i)
VMexit_Instruction(i, VMX_VMEXIT_GDTR_IDTR_ACCESS);
#endif
#if BX_SUPPORT_SVM
if (BX_CPU_THIS_PTR in_svm_guest) {
if (SVM_INTERCEPT(0, SVM_INTERCEPT0_GDTR_WRITE)) Svm_Vmexit(SVM_VMEXIT_GDTR_WRITE);
}
#endif
Bit32u eaddr = (Bit32u) BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
Bit16u limit_16 = read_virtual_word_32(i->seg(), eaddr);
@ -805,6 +823,12 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::LIDT_Ms(bxInstruction_c *i)
VMexit_Instruction(i, VMX_VMEXIT_GDTR_IDTR_ACCESS);
#endif
#if BX_SUPPORT_SVM
if (BX_CPU_THIS_PTR in_svm_guest) {
if (SVM_INTERCEPT(0, SVM_INTERCEPT0_IDTR_WRITE)) Svm_Vmexit(SVM_VMEXIT_IDTR_WRITE);
}
#endif
Bit32u eaddr = (Bit32u) BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
Bit16u limit_16 = read_virtual_word_32(i->seg(), eaddr);
@ -830,6 +854,12 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SGDT64_Ms(bxInstruction_c *i)
VMexit_Instruction(i, VMX_VMEXIT_GDTR_IDTR_ACCESS);
#endif
#if BX_SUPPORT_SVM
if (BX_CPU_THIS_PTR in_svm_guest) {
if (SVM_INTERCEPT(0, SVM_INTERCEPT0_GDTR_READ)) Svm_Vmexit(SVM_VMEXIT_GDTR_READ);
}
#endif
Bit16u limit_16 = BX_CPU_THIS_PTR gdtr.limit;
Bit64u base_64 = BX_CPU_THIS_PTR gdtr.base;
@ -851,6 +881,12 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::SIDT64_Ms(bxInstruction_c *i)
VMexit_Instruction(i, VMX_VMEXIT_GDTR_IDTR_ACCESS);
#endif
#if BX_SUPPORT_SVM
if (BX_CPU_THIS_PTR in_svm_guest) {
if (SVM_INTERCEPT(0, SVM_INTERCEPT0_IDTR_READ)) Svm_Vmexit(SVM_VMEXIT_IDTR_READ);
}
#endif
Bit16u limit_16 = BX_CPU_THIS_PTR idtr.limit;
Bit64u base_64 = BX_CPU_THIS_PTR idtr.base;
@ -877,6 +913,12 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::LGDT64_Ms(bxInstruction_c *i)
VMexit_Instruction(i, VMX_VMEXIT_GDTR_IDTR_ACCESS);
#endif
#if BX_SUPPORT_SVM
if (BX_CPU_THIS_PTR in_svm_guest) {
if (SVM_INTERCEPT(0, SVM_INTERCEPT0_GDTR_WRITE)) Svm_Vmexit(SVM_VMEXIT_GDTR_WRITE);
}
#endif
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
Bit64u base_64 = read_virtual_qword_64(i->seg(), (eaddr + 2) & i->asize_mask());
@ -907,6 +949,12 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::LIDT64_Ms(bxInstruction_c *i)
VMexit_Instruction(i, VMX_VMEXIT_GDTR_IDTR_ACCESS);
#endif
#if BX_SUPPORT_SVM
if (BX_CPU_THIS_PTR in_svm_guest) {
if (SVM_INTERCEPT(0, SVM_INTERCEPT0_IDTR_WRITE)) Svm_Vmexit(SVM_VMEXIT_IDTR_WRITE);
}
#endif
bx_address eaddr = BX_CPU_CALL_METHODR(i->ResolveModrm, (i));
Bit64u base_64 = read_virtual_qword_64(i->seg(), (eaddr + 2) & i->asize_mask());

View File

@ -47,6 +47,10 @@ TODO (know issues in CPU model):
- Dual-monitor treatment of SMIs and SMM not implemented yet
- VMENTER to not-active state not supported yet
[!] SMX, SVM (AMD)
[!] SVM:
- Nested paging support not implemented yet
- More?
[!] TODO: Convert CPUDB to plugins and search for them in runtime

View File

@ -3140,6 +3140,8 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::GETSEC(bxInstruction_c *i)
#if BX_SUPPORT_VMX
void BX_CPU_C::register_vmx_state(bx_param_c *parent)
{
if (! bx_cpuid_support_vmx()) return;
// register VMX state for save/restore param tree
bx_list_c *vmx = new bx_list_c(parent, "VMX", 9);

View File

@ -68,6 +68,11 @@ void disassembler::RAX_Reg(const x86_insn *insn)
dis_sprintf("%s", general_64bit_regname[rAX_REG]);
}
void disassembler::RCX_Reg(const x86_insn *insn)
{
dis_sprintf("%s", general_64bit_regname[rCX_REG]);
}
// segment registers
void disassembler::CS(const x86_insn *insn) { dis_sprintf("%s", segment_name[CS_REG]); }
void disassembler::DS(const x86_insn *insn) { dis_sprintf("%s", segment_name[DS_REG]); }

View File

@ -65,6 +65,7 @@
#define EAX_Reg &disassembler::EAX_Reg
#define RAX_Reg &disassembler::RAX_Reg
#define RCX_Reg &disassembler::RCX_Reg
#define CS &disassembler::CS
#define DS &disassembler::DS

View File

@ -425,11 +425,22 @@ static BxDisasmOpcodeTable_t BxDisasmGroupRmXSETGET[8] = {
/* 7 */ { 0, &Ia_Invalid }
};
static BxDisasmOpcodeTable_t BxDisasmGroupRmG7SVM[8] = {
/* 0 */ { 0, &Ia_vmrun },
/* 1 */ { 0, &Ia_vmmcall },
/* 2 */ { 0, &Ia_vmload },
/* 3 */ { 0, &Ia_vmsave },
/* 4 */ { 0, &Ia_stgi },
/* 5 */ { 0, &Ia_clgi },
/* 6 */ { 0, &Ia_skinit },
/* 7 */ { 0, &Ia_invlpga }
};
static BxDisasmOpcodeTable_t BxDisasmGroupG7R[8] = {
/* 0 */ { GRPSSE(G7VMX) }, // VMX
/* 1 */ { GRPRM(MONITOR) },
/* 2 */ { GRPRM(XSETGET) },
/* 3 */ { 0, &Ia_Invalid },
/* 3 */ { GRPRM(G7SVM) }, // SVM
/* 4 */ { 0, &Ia_smsw_Ew },
/* 5 */ { 0, &Ia_Invalid },
/* 6 */ { 0, &Ia_lmsw_Ew },

View File

@ -76,6 +76,7 @@
#define IA_FMA4 (BX_CONST64(1) << 34) /* FMA4 instruction (AMD) */
#define IA_XOP (BX_CONST64(1) << 35) /* XOP instruction (AMD) */
#define IA_TBM (BX_CONST64(1) << 36) /* TBM instruction (AMD) */
#define IA_SVM (BX_CONST64(1) << 37) /* SVM instruction (AMD) */
/* general purpose bit register */
enum {
@ -429,6 +430,7 @@ public:
// 64-bit general purpose registers
void RAX_Reg(const x86_insn *insn);
void RCX_Reg(const x86_insn *insn);
// segment registers
void CS(const x86_insn *insn);

View File

@ -162,6 +162,7 @@ Ia_cdqe = { "cdqe", "cltq", XX, XX, XX, XX, 0 },
Ia_cflush = { "cflush", "cflush", Mb, XX, XX, XX, IA_CLFLUSH },
Ia_clc = { "clc", "clc", XX, XX, XX, XX, 0 },
Ia_cld = { "cld", "cld", XX, XX, XX, XX, 0 },
Ia_clgi = { "clgi", "clgi", XX, XX, XX, XX, IA_SVM },
Ia_cli = { "cli", "cli", XX, XX, XX, XX, 0 },
Ia_clts = { "clts", "clts", XX, XX, XX, XX, 0 },
Ia_cmc = { "cmc", "cmc", XX, XX, XX, XX, 0 },
@ -493,6 +494,7 @@ Ia_Invalid = { "(invalid)", "(invalid)", XX, XX, XX, XX, 0 },
Ia_invd = { "invd", "invd", XX, XX, XX, XX, IA_486 },
Ia_invept_Gy_Mdq = { "invept", "invept", Gy, Mdq, XX, XX, IA_VMX },
Ia_invlpg = { "invlpg", "invlpg", Mx, XX, XX, XX, IA_486 },
Ia_invlpga = { "invlpga", "invlpga", RAX_Reg, RCX_Reg, XX, XX, IA_SVM },
Ia_invpcid_Gy_Mdq = { "invpcid", "invpcid", Gy, Mdq, XX, XX, IA_INVPCID },
Ia_invvpid_Gy_Mdq = { "invvpid", "invvpid", Gy, Mdq, XX, XX, IA_VMX },
Ia_inw_AX_DX = { "in", "inw", AX_Reg, DX_Reg, XX, XX, 0 },
@ -1260,6 +1262,7 @@ Ia_shrx_Gy_Ey_By = { "shrx", "shrx", Gy, Ey, By, XX, IA_BMI2 },
Ia_shufpd_Vpd_Wpd_Ib = { "shufpd", "shufpd", Vpd, Wpd, Ib, XX, IA_SSE2 },
Ia_shufps_Vps_Wps_Ib = { "shufps", "shufps", Vps, Wps, Ib, XX, IA_SSE },
Ia_sidt = { "sidt", "sidt", Ms, XX, XX, XX, 0 },
Ia_skinit = { "skinit", "skinit", RAX_Reg, XX, XX, XX, IA_SVM },
Ia_sldt = { "sldt", "sldt", Ew, XX, XX, XX, 0 },
Ia_smsw_Ew = { "smsw", "smsw", Ew, XX, XX, XX, 0 },
Ia_sqrtpd_Vpd_Wpd = { "sqrtpd", "sqrtpd", Vpd, Wpd, XX, XX, IA_SSE2 },
@ -1268,6 +1271,7 @@ Ia_sqrtsd_Vsd_Wsd = { "sqrtsd", "sqrtsd", Vsd, Wsd, XX, XX, IA_SSE2 },
Ia_sqrtss_Vss_Wss = { "sqrtss", "sqrtss", Vss, Wss, XX, XX, IA_SSE },
Ia_stc = { "stc", "stc", XX, XX, XX, XX, 0 },
Ia_std = { "std", "std", XX, XX, XX, XX, 0 },
Ia_stgi = { "stgi", "stgi", XX, XX, XX, XX, IA_SVM },
Ia_sti = { "sti", "sti", XX, XX, XX, XX, 0 },
Ia_stmxcsr = { "stmxcsr", "stmxcsr", Md, XX, XX, XX, IA_SSE },
Ia_stosb_Yb_AL = { "stosb", "stosb", Yb, AL_Reg, XX, XX, 0 },
@ -1525,6 +1529,8 @@ Ia_vminps_Vps_Hps_Wps = { "vminps", "vminps", Vps, Hps, Wps, XX, IA_AVX },
Ia_vminsd_Vsd_Hpd_Wsd = { "vminsd", "vminsd", Vsd, Hpd, Wsd, XX, IA_AVX },
Ia_vminss_Vss_Hps_Wss = { "vminss", "vminss", Vss, Hps, Wss, XX, IA_AVX },
Ia_vmlaunch = { "vmlaunch", "vmlaunch", XX, XX, XX, XX, IA_VMX },
Ia_vmload = { "vmload", "vmload", RAX_Reg, XX, XX, XX, IA_SVM },
Ia_vmmcall = { "vmmcall", "vmmcall", XX, XX, XX, XX, IA_SVM },
Ia_vmovapd_Vpd_Wpd = { "vmovapd", "vmovapd", Vpd, Wpd, XX, XX, IA_AVX },
Ia_vmovapd_Wpd_Vpd = { "vmovapd", "vmovapd", Wpd, Vpd, XX, XX, IA_AVX },
Ia_vmovaps_Vps_Wps = { "vmovaps", "vmovaps", Vps, Wps, XX, XX, IA_AVX },
@ -1574,6 +1580,8 @@ Ia_vmptrst_Mq = { "vmptrst", "vmptrst", Mq, XX, XX, XX, IA_VMX },
Ia_vmread_Ed_Gd = { "vmread", "vmread", Ed, Gd, XX, XX, IA_VMX },
Ia_vmread_Eq_Gq = { "vmread", "vmread", Eq, Gq, XX, XX, IA_VMX },
Ia_vmresume = { "vmresume", "vmresume", XX, XX, XX, XX, IA_VMX },
Ia_vmrun = { "vmrun", "vmrun", RAX_Reg, XX, XX, XX, IA_SVM },
Ia_vmsave = { "vmsave", "vmsave", RAX_Reg, XX, XX, XX, IA_SVM },
Ia_vmulpd_Vpd_Hpd_Wpd = { "vmulpd", "vmulpd", Vpd, Hpd, Wpd, XX, IA_AVX },
Ia_vmulps_Vps_Hps_Wps = { "vmulps", "vmulps", Vps, Hps, Wps, XX, IA_AVX },
Ia_vmulsd_Vsd_Hpd_Wsd = { "vmulsd", "vmulsd", Vsd, Hpd, Wsd, XX, IA_AVX },

View File

@ -81,7 +81,7 @@ ferr.o: ferr.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h
../cpu/crregs.h ../cpu/descriptor.h ../cpu/instr.h ../cpu/ia_opcodes.h \
../cpu/lazy_flags.h ../cpu/icache.h ../cpu/apic.h ../cpu/i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
../cpu/xmm.h ../cpu/vmx.h ../cpu/stack.h softfloat-specialize.h \
../cpu/xmm.h ../cpu/vmx.h ../cpu/svm.h ../cpu/stack.h softfloat-specialize.h \
softfloat.h
fpatan.o: fpatan.@CPP_SUFFIX@ softfloatx80.h softfloat.h ../config.h \
softfloat-specialize.h softfloat-macros.h softfloat-round-pack.h \
@ -95,7 +95,7 @@ fpu.o: fpu.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \
../cpu/crregs.h ../cpu/descriptor.h ../cpu/instr.h ../cpu/ia_opcodes.h \
../cpu/lazy_flags.h ../cpu/icache.h ../cpu/apic.h ../cpu/i387.h \
../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h ../fpu/control_w.h \
../cpu/xmm.h ../cpu/vmx.h ../cpu/stack.h ../iodev/iodev.h ../plugin.h \
../cpu/xmm.h ../cpu/vmx.h ../cpu/svm.h ../cpu/stack.h ../iodev/iodev.h ../plugin.h \
../extplugin.h ../param_names.h softfloatx80.h softfloat.h \
softfloat-specialize.h
fpu_arith.o: fpu_arith.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
@ -105,7 +105,7 @@ fpu_arith.o: fpu_arith.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../cpu/cpuid.h ../cpu/crregs.h ../cpu/descriptor.h ../cpu/instr.h \
../cpu/ia_opcodes.h ../cpu/lazy_flags.h ../cpu/icache.h ../cpu/apic.h \
../cpu/i387.h ../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h \
../fpu/control_w.h ../cpu/xmm.h ../cpu/vmx.h ../cpu/stack.h \
../fpu/control_w.h ../cpu/xmm.h ../cpu/vmx.h ../cpu/svm.h ../cpu/stack.h \
softfloatx80.h softfloat.h softfloat-specialize.h
fpu_compare.o: fpu_compare.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
@ -114,7 +114,7 @@ fpu_compare.o: fpu_compare.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../cpu/cpuid.h ../cpu/crregs.h ../cpu/descriptor.h ../cpu/instr.h \
../cpu/ia_opcodes.h ../cpu/lazy_flags.h ../cpu/icache.h ../cpu/apic.h \
../cpu/i387.h ../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h \
../fpu/control_w.h ../cpu/xmm.h ../cpu/vmx.h ../cpu/stack.h \
../fpu/control_w.h ../cpu/xmm.h ../cpu/vmx.h ../cpu/svm.h ../cpu/stack.h \
softfloatx80.h softfloat.h softfloat-specialize.h
fpu_const.o: fpu_const.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
@ -123,7 +123,7 @@ fpu_const.o: fpu_const.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../cpu/cpuid.h ../cpu/crregs.h ../cpu/descriptor.h ../cpu/instr.h \
../cpu/ia_opcodes.h ../cpu/lazy_flags.h ../cpu/icache.h ../cpu/apic.h \
../cpu/i387.h ../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h \
../fpu/control_w.h ../cpu/xmm.h ../cpu/vmx.h ../cpu/stack.h \
../fpu/control_w.h ../cpu/xmm.h ../cpu/vmx.h ../cpu/svm.h ../cpu/stack.h \
softfloatx80.h softfloat.h softfloat-specialize.h
fpu_load_store.o: fpu_load_store.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
@ -132,7 +132,7 @@ fpu_load_store.o: fpu_load_store.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h
../cpu/cpuid.h ../cpu/crregs.h ../cpu/descriptor.h ../cpu/instr.h \
../cpu/ia_opcodes.h ../cpu/lazy_flags.h ../cpu/icache.h ../cpu/apic.h \
../cpu/i387.h ../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h \
../fpu/control_w.h ../cpu/xmm.h ../cpu/vmx.h ../cpu/stack.h \
../fpu/control_w.h ../cpu/xmm.h ../cpu/vmx.h ../cpu/svm.h ../cpu/stack.h \
softfloatx80.h softfloat.h softfloat-specialize.h
fpu_misc.o: fpu_misc.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../bx_debug/debug.h ../config.h ../osdep.h ../gui/siminterface.h \
@ -141,7 +141,7 @@ fpu_misc.o: fpu_misc.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../cpu/cpuid.h ../cpu/crregs.h ../cpu/descriptor.h ../cpu/instr.h \
../cpu/ia_opcodes.h ../cpu/lazy_flags.h ../cpu/icache.h ../cpu/apic.h \
../cpu/i387.h ../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h \
../fpu/control_w.h ../cpu/xmm.h ../cpu/vmx.h ../cpu/stack.h \
../fpu/control_w.h ../cpu/xmm.h ../cpu/vmx.h ../cpu/svm.h ../cpu/stack.h \
softfloatx80.h softfloat.h softfloat-specialize.h
fpu_tags.o: fpu_tags.@CPP_SUFFIX@ ../config.h softfloat.h softfloat-specialize.h \
../cpu/i387.h ../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h \
@ -153,7 +153,7 @@ fpu_trans.o: fpu_trans.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \
../cpu/cpuid.h ../cpu/crregs.h ../cpu/descriptor.h ../cpu/instr.h \
../cpu/ia_opcodes.h ../cpu/lazy_flags.h ../cpu/icache.h ../cpu/apic.h \
../cpu/i387.h ../fpu/softfloat.h ../fpu/tag_w.h ../fpu/status_w.h \
../fpu/control_w.h ../cpu/xmm.h ../cpu/vmx.h ../cpu/stack.h \
../fpu/control_w.h ../cpu/xmm.h ../cpu/vmx.h ../cpu/svm.h ../cpu/stack.h \
softfloatx80.h softfloat.h softfloat-specialize.h
fsincos.o: fsincos.@CPP_SUFFIX@ softfloatx80.h softfloat.h ../config.h \
softfloat-specialize.h softfloat-macros.h softfloat-round-pack.h \

View File

@ -1087,8 +1087,8 @@ void bx_init_hardware()
#if BX_SUPPORT_X86_64
bx_bool x86_64_enabled = SIM->get_param_bool(BXPN_CPUID_X86_64)->get();
BX_INFO((" x86-64 support: %s", x86_64_enabled?"yes":"no"));
bx_bool xlarge_pages_enabled = SIM->get_param_bool(BXPN_CPUID_1G_PAGES)->get();
BX_INFO((" 1G paging support: %s", xlarge_pages_enabled?"yes":"no"));
bx_bool xlarge_enabled = SIM->get_param_bool(BXPN_CPUID_1G_PAGES)->get();
BX_INFO((" 1G paging support: %s", xlarge_enabled?"yes":"no"));
#else
BX_INFO((" x86-64 support: no"));
#endif
@ -1115,6 +1115,10 @@ void bx_init_hardware()
BX_INFO((" VMX support: no"));
}
#endif
#if BX_SUPPORT_SVM
bx_bool svm_enabled = SIM->get_param_bool(BXPN_CPUID_SVM)->get();
BX_INFO((" SVM support: %s", svm_enabled?"yes":"no"));
#endif
#endif // BX_CPU_LEVEL >= 6
}
else {

View File

@ -56,6 +56,7 @@
#define BXPN_CPUID_SEP "cpuid.sep"
#define BXPN_CPUID_XSAVE "cpuid.xsave"
#define BXPN_CPUID_XSAVEOPT "cpuid.xsaveopt"
#define BXPN_CPUID_SVM "cpuid.svm"
#define BXPN_CPUID_VMX "cpuid.vmx"
#define BXPN_CPUID_AVX "cpuid.avx"
#define BXPN_CPUID_AVX_F16CVT "cpuid.avx_f16c"