Stanislav Shwartsman
46e36b463b
size-optimization for SSE opcode tables
2013-10-10 20:21:15 +00:00
Stanislav Shwartsman
0b2e533a55
more avx512 instructions done
2013-10-09 19:45:36 +00:00
Stanislav Shwartsman
d6d1c707df
implemented set of integer avx512 instructions
2013-10-08 19:44:52 +00:00
Stanislav Shwartsman
09254eb474
avx512 implementation fixes and next steps
2013-10-08 18:31:18 +00:00
Stanislav Shwartsman
cb0eee9456
disasm fixes
2013-10-07 19:02:53 +00:00
Stanislav Shwartsman
85b0402668
fixes for disasm
2013-10-02 19:23:34 +00:00
Stanislav Shwartsman
e592f81209
updates to internal disasm
2013-10-01 18:47:55 +00:00
Stanislav Shwartsman
fd383435f0
- Initial code for bx_Instruction_c disassembler which (together with Bochs decoder) will replace Bochs disasm module someday (very soon).
...
The code already knows to disasm most of the opcodes with their operands.
- Split according to OSIZE opcodes RDFSBASE/WRFSBASE / RDGSBASE/WRGSBASE both for disasm and performance
- Minimize amount of opcode forms in ia_opcodes.h again.
For example Udq means the same as Wdq but with no memory form.
2013-09-30 19:01:42 +00:00
Stanislav Shwartsman
ff79cbd596
Infrstructure change to support disasm of BxInstruction_c directly (without calling disasm)
...
The end goal will be also merging of disasm and cpu decoder to one module and remove the disasm.
Two bug fixes on the way:
TBM: fixed 64-bit TBM instructions with memory access (did 32-bit load instead of 64-bit)
BMI2: fixed operands order for PEXT/PDEP instructions
AVX2: fixed gather instruction decoding bug from decoder alias commit
2013-09-24 05:21:00 +00:00
Stanislav Shwartsman
404b8b1475
move end of trace indication to separate 'flags' field of bx_ia_opcode. this saves a lot of code duplication and simplifies the decode tables. also on the way found missing SVM opcodes that missed 'end of trace' mark
2013-09-21 18:58:01 +00:00
Stanislav Shwartsman
cd55ace8c8
fixed compilation err, rename opcode and handler functions for PUSHA/POPA instructions
2013-09-21 10:03:49 +00:00
Stanislav Shwartsman
0441f82b02
implement more AVX512 instructions
2013-09-19 20:35:55 +00:00
Stanislav Shwartsman
8b3a0acde9
implement first EVEX instructions - VADDPS/PD/SS/SD
2013-09-19 18:31:30 +00:00
Stanislav Shwartsman
0cb0acc30f
added evex decode tables - next step to populate them :)
2013-09-15 20:48:39 +00:00
Stanislav Shwartsman
7297323c69
First step of AVX512 support implementation (simplest)
...
decode and implement KMASK manipulation instructions
disasm: coming soon
2013-09-08 19:19:16 +00:00
Stanislav Shwartsman
a6b85d9443
compress xop tables for vex.l - smaller binary size
2013-09-06 18:56:46 +00:00
Stanislav Shwartsman
69f947cef2
fixes and small optimizations for avx and xop decoding
2013-09-05 18:29:50 +00:00
Stanislav Shwartsman
59c65151f5
various fixes
2013-08-29 19:43:15 +00:00
Stanislav Shwartsman
5d61c19b0b
evex support - step2
2013-08-27 20:47:24 +00:00
Stanislav Shwartsman
735154a755
oops, typo bug in prev commit
2013-08-24 19:46:04 +00:00
Stanislav Shwartsman
701d88388e
fixed FCS/FDS deprecation
2013-08-22 20:21:36 +00:00
Stanislav Shwartsman
3a7e336cb6
more opcode alias - now VEX.W alias
2013-08-21 18:45:36 +00:00
Stanislav Shwartsman
115ec37a4c
make decoder tables smaller using decode aliases
2013-08-21 04:52:49 +00:00
Stanislav Shwartsman
3fabcb00b7
VMX: CMPXHG instructions should always write to the memory destination, even if the value unchanged - it affects VMEXIT conditions for the full apic virtualization
...
Fixed also CMPXHG16B instruction (last one, others were fixed earlier)
2013-08-04 19:37:04 +00:00
Stanislav Shwartsman
7005afd3a8
clean up BxRepeatable attribute - not needed anymore after VL AVX field moved to new location
2013-07-26 15:42:49 +00:00
Stanislav Shwartsman
2dbe81db51
first infrastructure changes to support EVEX prefix and AVX-512 extensions recently published by Intel
2013-07-26 12:50:56 +00:00
Stanislav Shwartsman
852b5c3749
implemented SHA new instructions announced in recent Intel SDM extensions document rev015
2013-07-24 18:44:22 +00:00
Stanislav Shwartsman
c7698a5589
implemented fcs/fds deprecation. added haswell to cpudb.h as well
2013-06-20 20:12:53 +00:00
Stanislav Shwartsman
9651b5d53c
bugfix: vmx preemption timer vmexit should not wakeup CPU from sleep state. cpuid: added definitions from recently published intel SDM rev047
2013-06-04 20:28:27 +00:00
Stanislav Shwartsman
3fbdf7ff03
do not recognize MTRR MSRs when mtrr is not enabled
2013-04-17 19:59:56 +00:00
Stanislav Shwartsman
025fb15461
properly handle RDMSR/WRMSR of MSR_PAT when PAT feature is disabled
2013-04-11 19:41:54 +00:00
Stanislav Shwartsman
a277d60d89
implemented vmentering to non-active cpu state
2013-04-09 15:43:15 +00:00
Stanislav Shwartsman
53d14c01b5
correctly signal bit 12 (nmi unblocking by iret) in vmx interruption info. todo: find how to implement it clean way
2013-03-06 21:11:23 +00:00
Stanislav Shwartsman
1a770dd260
implementation of virtual NMI
2013-03-05 21:12:43 +00:00
Volker Ruppert
058c0e05fb
- removed wx debugger dialogs (enhanced gui debugger now almost stable with wx)
2013-02-16 12:22:13 +00:00
Volker Ruppert
97de484efb
use enhanced gui debugger instead of classic wx debugger if BX_DEBUGGER_GUI == 1
...
The Windows version looks almost stable, but the GTK version fails in some cases.
That's why the classic wx debugger is still available if BX_DEBUGGER_GUI is set to 0.
- added function close_debug_dialog() to handle the simulation stop case in wx
- disable all the wx debugger related code if BX_DEBUGGER_GUI is set to 1
- added enhanced debugger specific init code similar to the code in sdl.cc
- include debugger related resources on Windows
- TODO: make the GTK / wxGTK case stable and remove the wx debugger
2013-02-12 21:08:35 +00:00
Stanislav Shwartsman
64df073617
implemented virtualization exception feature
2013-01-28 16:30:25 +00:00
Stanislav Shwartsman
d38fce8218
preparation for future extension in translate_linear - I would like to return data to caller through tlbEntry
2013-01-27 19:27:30 +00:00
Stanislav Shwartsman
3ab0331307
implemented VMCS shadowing (Intel SDM rev045)
2013-01-21 19:55:00 +00:00
Stanislav Shwartsman
4bed791ccb
Added year 2013 to Copyright in all files already modified in new year
2013-01-19 20:45:03 +00:00
Stanislav Shwartsman
c337b7babb
Intel Software Developers Manual rev45 was released
...
Added CPUID bits and preparations for newly documented VMX features
2013-01-16 16:57:48 +00:00
Stanislav Shwartsman
d93607cfe6
implemented pause threshold count in SVN + bugfix in SMAP
2013-01-08 21:03:22 +00:00
Stanislav Shwartsman
c6b1f6c22b
fixed IsValidPageAlignedPhyAddr check for VMX/SVM
2012-12-30 19:49:20 +00:00
Stanislav Shwartsman
685e0091b4
fixed decoding of RDRAND/RDSEED with 0x66 prefix
2012-12-27 19:31:21 +00:00
Stanislav Shwartsman
48d7fa3786
fixed code duplication, mainly in vmx/svm code
2012-12-26 21:59:16 +00:00
Stanislav Shwartsman
182ad65ea3
changes in avx emulation code
2012-12-09 16:42:48 +00:00
Stanislav Shwartsman
574b69c81e
fixed MSDEV warnings
2012-11-27 15:40:45 +00:00
Stanislav Shwartsman
edf4ea4c74
fixed SF bug #1318 dbg: several issues with 'set' command
2012-11-06 20:01:02 +00:00
Stanislav Shwartsman
7bace61c12
fixed compilation issue
2012-11-05 06:41:10 +00:00
Stanislav Shwartsman
8a01ee1661
implemented SVM decode assists. some is still missing - coming soon
2012-11-02 07:46:50 +00:00
Stanislav Shwartsman
744001e35e
Implemented VMX APIC Registers Virtualization and VMX Virtual Interrupt Delivery emulation
...
Bugfix: VMX: VmEntry should do TPR Virtualization (TPR Shadow + APIC Access Virtualization case is affected) and even could possibly cause TPR Threshold VMEXIT
2012-10-26 18:43:53 +00:00
Stanislav Shwartsman
2638c1136a
Add RDRAND/RDSEED instructions support (+ disasm)
...
Of course no true random numbers will be generated - use standard "C" rand() function as stub.
In future it will be possible to improve (using another random generator) or even use real rdrand/rdseed intrinsics
2012-10-09 15:16:48 +00:00
Stanislav Shwartsman
e7a2c9892c
re-implement VTPF write using event handling interface as trap event (in preparation to more apic virtualization features)
2012-10-07 09:16:13 +00:00
Stanislav Shwartsman
c48e516386
implemented injection of MTF event. The MTF VMexec control is still not implemented yet
2012-10-05 20:48:22 +00:00
Stanislav Shwartsman
1b228aec32
Fixed double and triple fault detection in exception.cc. Remove errorno variable from CPU (redundant now)
2012-10-04 20:52:27 +00:00
Stanislav Shwartsman
2ca0c6c677
Move INTR, Local APIC INTR and SVN VINTR into new event interface (hardest part)
...
Minor speedup (of 1-2%) was observed due to new implementation
Remove obsolete dbg_take_irq function and dbg_force_interrupt function from CPU code, the functions were not working properly anyway
2012-10-03 20:24:29 +00:00
Stanislav Shwartsman
49bb3ba8f5
some cleanups and optimizations with new event interface
2012-10-03 15:49:45 +00:00
Stanislav Shwartsman
ae06a0825b
svm virq - move to new event interface
2012-10-02 20:49:16 +00:00
Stanislav Shwartsman
9132c29280
optimization and code duplication cleanup in event handling code
2012-10-02 20:07:26 +00:00
Stanislav Shwartsman
b2afa834c5
fixed compilation with intrumentation w/o x86-64
2012-09-25 20:48:46 +00:00
Stanislav Shwartsman
08d0ef6dbf
fixes for new event handling code
2012-09-25 13:53:26 +00:00
Stanislav Shwartsman
40ba9c8d7b
introducing new interface for handling CPU events based on vector of events and not on many not related variables. this is very initial implementation which takes into new interface only few events, more will code soon
2012-09-25 09:35:38 +00:00
Stanislav Shwartsman
2f3c7ff8e4
implemented SMAP (Supervisor Mode Access Protection) from [Intel Architecture Instruction Set Extensions Programming Reference] rev14
...
fixed enabling of ADX extensions in generic CPUID when enabled through .bochsrc
Small code cleanups on the way to implementation of APIC Registers Virtualization features disclosed in recent Intel SDM rev043
2012-09-10 15:22:26 +00:00
Stanislav Shwartsman
f1fd44b2cf
preparations for apic regs virtualization feature described in SDM rev044
2012-09-06 15:21:08 +00:00
Stanislav Shwartsman
40a9992aa6
small cleanups
2012-08-28 16:05:39 +00:00
Stanislav Shwartsman
c41cbe6d56
Link traces over taken branch optimization which makes handlers chaining even more efficient.
...
I observed 5% speedup in all disk images over 2.6pre1.
The change is safe (passed all regressions) and I will be glad to make it into Bochs 2.6!
2012-08-21 19:58:41 +00:00
Stanislav Shwartsman
fee1000ba2
split PINSRB instruction to /r and /m form
2012-08-07 14:38:43 +00:00
Stanislav Shwartsman
cc694377b9
Standartization of Bochs instruction handlers.
...
Bochs instruction emulation handlers won't refer to direct fields of instructions like MODRM.NNN or MODRM.RM anymore.
Use generic source/destination indications like SRC1, SRC2 and DST.
All handlers are modified to support new notation. In addition fetchDecode module was modified to assign sources to instructions properly.
Immediate benefits:
- Removal of several duplicated handlers (FMA3 duplicated with FMA4 is a trivial example)
- Simpler to understand fetch-decode code
Future benefits:
- Integration of disassembler into Bochs CPU module, ability to disasm bx_instruction_c instance (planned)
Huge patch. Almost all source files wre modified.
2012-08-05 13:52:40 +00:00
Stanislav Shwartsman
a1ebdc41ac
Fixed SF bug [3548109] VMX State Not Restored After Entering SMM on 32-bit Systems
...
Fixed .conf.nothing configure script
Fixed copyright for some files
2012-07-27 08:13:39 +00:00
Stanislav Shwartsman
e0729e32b8
fixed bug 3548108 VMEXIT instruction length Not always getting updated
2012-07-26 16:03:26 +00:00
Stanislav Shwartsman
d9998269ef
added branch_eip into near branch instructiontation callbacks
2012-07-24 15:32:55 +00:00
Stanislav Shwartsman
5d66e8450e
implemented ADCX/ADOX instructions from rev013 of arch extensions published by Intel
2012-07-12 14:51:54 +00:00
Stanislav Shwartsman
1964ef679a
fixed compilation with x86-64 disabled
2012-07-01 14:46:27 +00:00
Stanislav Shwartsman
f12396566c
added CR8 to control registers print in debugger
2012-06-28 18:27:26 +00:00
Stanislav Shwartsman
515d8b5c25
add new instrumentation callbacks for physical memory access from CPU
2012-06-18 11:41:26 +00:00
Stanislav Shwartsman
39c14ef0d1
Implemented EPT A/D extensions support.
...
Bochs is fully aligned with the latest published revision of
Intel Architecture Manual (revision 043) now.
2012-05-02 18:11:39 +00:00
Stanislav Shwartsman
d4688e8b95
- Do not compile support for alignment check (#AC exception) by default
...
for CPU emulation performance reasons, the alignment check compilation
still can be enabled using configure option --enable-alignment-check.
There is no software in the world which enable #AC exception checking, this
x86 feature is completely legacy but its emulation support costs up to 3-5%
emulation speed.
The checking for #AC exception enable still will be done, if
CPL == 3, EFLAGS.AC = 1 and CR0.AM = 1
but the alignment check is not compiled in, the Bochs will PANIC with corresponding message.
You can press 'always continue' and ignore the PANIC, the simulation will continue as if alignment checking is not enabled.
2012-03-25 19:07:17 +00:00
Stanislav Shwartsman
3ca29cbdf3
stack direct access optimization - 5% emu speedup to all 32-bit guests, for 64-bit guests speedup is less because they have less stack accesses
2012-03-25 11:54:32 +00:00
Stanislav Shwartsman
b5a33e82ac
fixed a lot of code duplication in debugging/instrumentation of mem access
2012-03-20 18:26:04 +00:00
Stanislav Shwartsman
e1506e3e29
some cleanup in CPU code + patch SVM SS.DPL instead of failing VMRUN
2012-03-19 19:24:15 +00:00
Stanislav Shwartsman
bd4aa017fe
Lazy flags improvement patch by Darek Mihocka - measured 5% speedup everywhere accross the board
...
The problem with Parity is it is generally referenced very rarely so the current lazy flags code is not efficient to updated Parify flag only (because it updates low 8 bits of .result value the existing Zero Flag has to be shadowed in .auxbits.
So I flipped it around, to make Parity be shadowed in auxbits. .result now is only needed to derive Zero Flag, and both Sign and Parify are derived from .result + .auxbits (as Zero Flag is now). For the 90% of the conditional jumps that are JZ or JNZ, this is a speedup.
Parity is now derived from 8 bits in .result and 8 bits in .auxbits, and Sign is derived from one flag in .result and 1 bit in .auxbits by XOR-ing them all together. It makes the code sequences for SAHF and POPF simpler too.
2012-03-17 08:51:52 +00:00
Stanislav Shwartsman
25ffaeeea8
fixed VMX issue + small code reorg
2012-03-13 15:18:21 +00:00
Stanislav Shwartsman
1f14c171ed
rename some SSE handlers
2012-02-28 18:53:58 +00:00
Stanislav Shwartsman
d4541f1a88
removed dedicated handler for MOVNTI - can be replaced with existing handlers
2012-02-27 15:50:43 +00:00
Stanislav Shwartsman
959ab435cf
fixed compilation err with SVM
2012-02-24 21:31:31 +00:00
Stanislav Shwartsman
92376fb693
svm updates
2012-02-19 12:16:58 +00:00
Stanislav Shwartsman
bb7a648d91
Major commit !
...
------------
Implemented SVN nested paging support - the Virtual Box boots perfectly with Nested Paging guest !
A lot of code duplication was added for now - major cleanup will follow later.
! Added AMD Phenom X3 8650 (Toliman) configuration to the CPUDB - this configuration has Nested Paging enabled.
Some CPUID modules rework done to enable Toliman configuration.
Ckean up 'executable' attribute from all CPU source files.
2012-02-13 23:29:01 +00:00
Stanislav Shwartsman
813fe4e6b9
reduce code duplication - continue preparing for nested paging implementation
2012-02-13 20:06:04 +00:00
Stanislav Shwartsman
0b5f798af1
re-commit changes from SVN rev11026 which were accidentially undo'ed by last Volker's commit
2012-02-12 19:13:57 +00:00
Volker Ruppert
de94b08a1a
- class bx_list_c now contains a chained list of parameters. Removed the now
...
obsolete maxsize parameter from all lists.
2012-02-12 18:43:20 +00:00
Stanislav Shwartsman
855d2adece
cleanups in paging code
2012-02-12 16:09:35 +00:00
Stanislav Shwartsman
9bebe91826
eliminate duplicated cpu methods by adding extra param to opcodes with no modrm
2012-02-03 10:24:59 +00:00
Stanislav Shwartsman
14ec87768e
expand FCMOV function to 8 different functions - each one is much simpler to implement and understand
2012-02-01 12:07:53 +00:00
Stanislav Shwartsman
9461797886
added extra param to debugger phy access callback + cleanup in vmexit functions
2012-01-17 21:50:15 +00:00
Stanislav Shwartsman
7d641450ec
remove param from check_entry_PAE function - it is always the same for all calls
2012-01-15 20:25:39 +00:00
Stanislav Shwartsman
4db23355cd
rework in paging code before nested paging implementation for SVM - step 1
2012-01-15 17:54:13 +00:00
Stanislav Shwartsman
f5d55f5eb6
- Implemented Task Switch intercept in SVM, cleanup in task switch handling code
...
- Changed (c) year in several cpu files
- Cleanup and indent fixes in VMX code
2012-01-11 20:21:29 +00:00
Stanislav Shwartsman
cb366e00c5
fixed code duplication in exceptions
2012-01-11 06:27:35 +00:00
Stanislav Shwartsman
2900956327
Split back some frequently used arithmetic and logic opcodes (which were done as Load+Op before).
2012-01-09 13:09:59 +00:00
Stanislav Shwartsman
76ee7b499b
svm updates
2012-01-08 14:09:51 +00:00
Stanislav Shwartsman
0e17f8f195
implemented AMD APIC extensions for SVM support
2012-01-04 16:06:37 +00:00
Stanislav Shwartsman
a0b5ff48ec
more SVM fixes
2011-12-31 14:22:51 +00:00
Stanislav Shwartsman
3c0d712146
SVM fixes
2011-12-31 13:58:55 +00:00
Stanislav Shwartsman
0a14f08f16
completing SVM coding, missed - CPUID, extended APIC
2011-12-28 16:12:28 +00:00
Stanislav Shwartsman
2b8371f2b6
implemented SVM_GIF handling
2011-12-27 20:46:15 +00:00
Stanislav Shwartsman
7f5f917a34
more SVM implementation
2011-12-27 19:42:11 +00:00
Stanislav Shwartsman
6ae86a059b
firt cleanup in SVM code. added intercept check for MSR and IO
2011-12-26 19:57:39 +00:00
Stanislav Shwartsman
8b4a2c2034
implemented some more intercepts.
...
fixed compilation without SVM
2011-12-26 16:33:13 +00:00
Stanislav Shwartsman
bfcbb81602
SVM:
...
- IO intercept is not implemented yet
- MSR intercept is not implemented yet
VMX:
Fixed Bochs PANIC crash when doing I/O access crossing VMX I/O permission bitmaps.
This can happen because access_physical_read and access_physical_write cannot access memory cross 4K boundary.
2011-12-25 22:09:31 +00:00
Stanislav Shwartsman
a44c1b8e1e
SVM and VMX share tsc offset code
2011-12-25 19:53:23 +00:00
Stanislav Shwartsman
75bda1d5cd
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.
2011-12-25 19:35:29 +00:00
Stanislav Shwartsman
e7ed8aca5c
move inhibit interrrupts functionality to icount interface
2011-12-21 06:17:45 +00:00
Stanislav Shwartsman
f6203dae7d
instrumentation: added special indication for indirect call/jump
2011-12-18 18:11:56 +00:00
Stanislav Shwartsman
b8f2d91b9a
fixed compilation err
2011-11-28 21:16:40 +00:00
Stanislav Shwartsman
8cb359fab5
fixed flags handling for BMI instructions
2011-11-27 13:23:26 +00:00
Stanislav Shwartsman
100622e958
fix ULL suffix for 64bit int, use BX_CONST64 instead
2011-11-26 19:01:53 +00:00
Stanislav Shwartsman
c74f590077
implemented TSC-Deadline APIC timer mode
2011-11-21 12:51:50 +00:00
Stanislav Shwartsman
9be8552b80
- Implemented VM Functions support and EPTP-Switching VM Functions
...
- Added VMEXIT conditions for INVPCID instruction
Now Bochs is fully aligned with latest pulished Intel's SDM rev040.
2011-11-05 07:31:51 +00:00
Stanislav Shwartsman
b1a6b34616
implemented PERMIL2PS/PERMIL2PD XOP instructions
2011-10-20 17:37:57 +00:00
Stanislav Shwartsman
5cc04b9955
Implemented AMDs Buldozer XOP and TBM extensions.
...
XOP: few instructions are still missing, coming soon
BX_PANIC(("VPERMILPS_VpsHpsWpsVIbR: not implemented yet"));
BX_PANIC(("VPERMILPD_VpdHpdWpdVIbR: not implemented yet"));
BX_PANIC(("VPMADCSSWD_VdqHdqWdqVIbR: not implemented yet"));
BX_PANIC(("VPMADCSWD_VdqHdqWdqVIbR: not implemented yet"));
BX_PANIC(("VFRCZPS_VpsWpsR: not implemented yet"));
BX_PANIC(("VFRCZPD_VpdWpdR: not implemented yet"));
BX_PANIC(("VFRCZSS_VssWssR: not implemented yet"));
BX_PANIC(("VFRCZSD_VsdWsdR: not implemented yet"));
2011-10-19 20:54:04 +00:00
Stanislav Shwartsman
2580d8c46d
added FMA4 AMD instructions support, fixed mem access length for Intel scalar FMA instructions
2011-10-07 14:09:35 +00:00
Stanislav Shwartsman
6751af5d8e
added AVX FMA extensions support. The implementation is based on QEMU patch by Peter Maydell (fixed)
2011-09-29 22:20:56 +00:00
Stanislav Shwartsman
275194fb32
#GP on reading VMX_EPT_VPID_CAP MSR when EPT and VPID disabled
2011-09-26 20:36:26 +00:00
Stanislav Shwartsman
0547c8823e
compilation w/o x86-64
2011-09-26 19:48:58 +00:00
Stanislav Shwartsman
12ad45395b
enable Penryn VMX capabilities with VMX=1, VMX=2 is required for EPT and heavier stuff
2011-09-26 19:36:20 +00:00
Stanislav Shwartsman
0aadf88c07
more polishing for vmx configurability
2011-09-26 18:08:31 +00:00
Stanislav Shwartsman
c28c7f6a06
Supply real VMX capabilities together with the CPU MODEL .bochsrc option.
...
So now the same single option will choose not only the CPUID flags but also VMX capabilities matching real HW machine.
Removed cpuid of core2_extreme_x9770 from the cpudb. I don't remember its VMX capabilities anyway.
There is another Penryn model in the cpudb - core2_penryn_t9600.
2011-09-26 12:31:40 +00:00
Stanislav Shwartsman
b66feecc86
move common instrumentation constants (valid for all stubs) to cpu.h
2011-09-25 17:38:54 +00:00
Stanislav Shwartsman
62d0c8abf7
- Now you could disable x86-64 from .bochsrc so now it is possible to emulate
...
32-bit CPU using Bochs binary compiled with x86-64 support.
The commit also fixes some init.cc issues with initialization of SYSCALL/SYSRET MSR in AMD hosts and also includes code reorg.
2011-09-25 17:36:20 +00:00
Stanislav Shwartsman
1b9f286945
- New way of CPUs scheduling in SMP mode brings up to 50% speedup to the
...
SMP emulation. New implementation uses dynamic CPU quantum value and takes
full advantage of the trace cache. Each emulated processor will execute
the whole trace before switching to the next processor.
* It is also safe to use large (up to 16 instructions) quantum values for
the SMP emulation now and improve performance even further.
The same merge also completely fixes SF bug :
[3312237] stepN command might be not working properly
Handlers chaining speedups are also supported with SMP emulation now.
2011-09-22 19:38:52 +00:00
Stanislav Shwartsman
50207eeb90
- Added support for AMD SSE4A emulation, the instructions can be enabled
...
using .bochsrc CPUID option.
2011-09-18 16:18:22 +00:00
Stanislav Shwartsman
330bf62f61
added INVPCID instruction support
2011-09-16 20:06:23 +00:00
Stanislav Shwartsman
e2f0880f1c
support more than 32-bit cpu features vector
2011-09-14 20:22:24 +00:00
Stanislav Shwartsman
02e1a0f23c
Merge lazy flags optimization by Darek Mihocka.
...
I measure slight but consistent speedup of ~1-3% for all guests.
Tested: Windows XP/7 boot 32/64 bit, various Linux live CD
2011-09-12 19:36:53 +00:00
Stanislav Shwartsman
96cedbc756
continue handlers-chaining optimization: update time once per trace and not for every instruction
2011-09-06 15:35:39 +00:00
Stanislav Shwartsman
8099fd9efd
implemented alternative access to CR8: AMD feature. Lock CR0 -> CR8
2011-09-03 15:22:56 +00:00
Stanislav Shwartsman
1f5e036695
lzcnt/tzcnt bmi instructions implemented
2011-08-31 20:43:47 +00:00
Stanislav Shwartsman
d2f7351be2
cpu.h cleanup + update msdev workspaces cpudb projects
2011-08-30 22:22:07 +00:00
Stanislav Shwartsman
dfd769a102
- Fixed compilation issue with cpu-level=5
...
- SYSCALL/SYSRET: SYSCALL/SYSRET instructions are not supported in legacy mode for Intel processors
- CPUID: CPUID.0x80000001.EDX[11] SYSCALL/SYSRET support should not be reported outside long64 mode if legacy mode SYSCALL/SYSRET is not supported
- Added new CPUDB entry - AMD K6-2 3D proc3essor (Chomper)
2011-08-30 22:00:27 +00:00
Stanislav Shwartsman
fb9da23f9b
syscall/sysret are not supported outside long64 mode in Intel CPUs
2011-08-30 21:32:40 +00:00
Stanislav Shwartsman
c30275016e
avx2 added broadcast from register
2011-08-29 21:00:25 +00:00
Stanislav Shwartsman
44241a1e56
- Added support for AVX and AVX2 instructions emulation, to enable configure
...
with --enable-avx option. When compiled in, AVX still has to be enabled
using .bochsrc CPUID option. AVX2 FMA instructions still not implemented.
- Added support for Bit Manipulation Instructions (BMI) emulation. The BMI
instructions support can be enabled using .bochsrc CPUID option.
2011-08-27 13:47:16 +00:00
Stanislav Shwartsman
d841e82d87
MOVBE instruction exists only in memory form
2011-08-25 21:20:50 +00:00
Stanislav Shwartsman
002e7a3818
MSR_TSC_AUX is not available without RDTSCP
2011-08-21 19:09:35 +00:00
Stanislav Shwartsman
371dc200fc
Remove the 'trace' debug feature fro the main stream (which now runs with handlers chaining) and this way reduce each handler size.
...
Another 3% speedup on WinXP boot on top of handlers chaining + reduction of Bochs binary size by 45K.
2011-08-21 17:04:21 +00:00
Stanislav Shwartsman
13feb0772a
- 10% emulation speedup with handlers chaining optimization implemented. The
...
feature is enabled by default when configure with --enable-all-optimizations
option, to disable handlers chaining speedups configure with
--disable-handlers-chaining
2011-08-21 14:31:08 +00:00
Stanislav Shwartsman
dd79431702
rename AVX handlers - match their real operands
2011-08-20 15:10:18 +00:00
Stanislav Shwartsman
b8b63ac6ea
compile CPUDB to separate library
...
reduce compile-time dependencies
2011-08-18 18:55:22 +00:00
Stanislav Shwartsman
ed9b8478b5
undo RDTSC commit
2011-08-17 21:13:06 +00:00
Stanislav Shwartsman
165e6f0fdf
separate TSC to uniq feature that can be disabled in CPU configuration
2011-08-17 20:57:44 +00:00
Stanislav Shwartsman
b69f728246
Fixed internal debugger part of the bug:
...
#3312237 stepN command might be not working properly
The problem still can be exists for SMP.
2011-08-17 19:51:32 +00:00
Stanislav Shwartsman
6606c62439
cr4 available since Pentium only
2011-08-16 16:49:04 +00:00
Stanislav Shwartsman
6344c6a719
Added P2 Klamath CPUID + some code reorg again
2011-08-11 18:06:09 +00:00
Stanislav Shwartsman
f15bc6cf75
support for NX outside of x86-64.
...
required for Intel Yonah processor which is another interesting CPUID to be added
also found Via C7 CPUID, looking for the way to add it too
2011-08-10 22:04:33 +00:00
Stanislav Shwartsman
1b27438146
cleanups + small code reorg
2011-08-10 20:31:29 +00:00
Stanislav Shwartsman
360481b391
infastructure for RDMSR/WRMSR control for cpuid class
...
now the order is going to be:
1. MSRs emulated in Bochs (msr.cc)
2. MSRs emulated in model specific derivative class of cpuid_t
3. MSR can be loaded from msrs.def file
4. MSR is not found. We can fault or ignore based on ignore_bad_msrs option
2011-08-09 22:11:56 +00:00
Stanislav Shwartsman
2ee0029749
extract ffxsr support to separate CPU feature
2011-08-04 19:02:49 +00:00
Stanislav Shwartsman
075db389a9
added atom n270 cpuid + small fixes
2011-08-03 17:49:49 +00:00
Stanislav Shwartsman
e48765a511
VMX fixed, cleanups
2011-07-29 20:22:35 +00:00
Stanislav Shwartsman
4ac67ec386
compilation when cu_level < 4
2011-07-29 15:24:32 +00:00
Stanislav Shwartsman
78327d3e5e
First step toward completely configurable CPU.
...
Change CPUID to generic interface which could be chosen from .bochsrc.
Bochs CPU emulation will enable/disable features (like instruction sets) according to CPUID that is selected.
TODO: Add database of CPUID from real hardware CPUs
2011-07-28 16:17:42 +00:00
Stanislav Shwartsman
d11114ac19
Patch for emulating target with larger memory than host has available by Gary Cameron.
...
The patch was posted in mailing list at Thu 6/16/2011.
Desription for CHANGES:
- Memory
- Added new configure option which enables RAM file backing for large guest
memory with a smaller amount host memory, without causing a panic when
host memory is exhausted (patch by Gary Cameron). To enable configure with
--enable-large-ramfile option.
2011-07-22 17:46:06 +00:00
Stanislav Shwartsman
b4118fcbfe
correct natural width VMX field read/write len
2011-07-21 20:58:54 +00:00
Stanislav Shwartsman
a69eeb13f3
move cpuid defs to cpuid.h
2011-07-19 21:14:07 +00:00
Stanislav Shwartsman
cddd1e3758
MONITOR/MWAIT: Do monitor on cache line granularity only + bugfix with possible TLB caching of monitored line
2011-07-18 21:44:22 +00:00
Stanislav Shwartsman
002c86660a
reword all the CPU code in preparation for future CPU speedup implementation.
...
Bochs emulation can be another 10-15% faster using technique described in paper
"Fast Microcode Interpretation with Transactional Commit/Abort"
http://amas-bt.cs.virginia.edu/2011proceedings/amasbt2011-p3.pdf
2011-07-06 20:01:18 +00:00
Stanislav Shwartsman
909e750549
Implemented VMX preemption timer VMEXIT control (patch by Jianan Hao)
2011-07-03 15:59:48 +00:00
Stanislav Shwartsman
08ba847ce4
fix bug inserted with prev commit + cleanup
2011-06-28 16:04:40 +00:00
Stanislav Shwartsman
87953711b1
cleanup in mmx code
2011-06-26 19:31:42 +00:00
Stanislav Shwartsman
2f582db722
compile less stuff for cpu-level=5
2011-06-26 19:15:30 +00:00
Stanislav Shwartsman
beafa7c88b
improved x86 hw code bp handling
2011-06-24 13:38:34 +00:00
Stanislav Shwartsman
31be835056
bugfix + rename function
2011-06-14 19:56:28 +00:00
Stanislav Shwartsman
ef38c9e235
fix decode for VCVTPH2PS
2011-06-11 18:26:05 +00:00
Stanislav Shwartsman
8399dee24c
implemented AVX float16 convert instructions
2011-06-11 13:12:32 +00:00
Stanislav Shwartsman
3f075d1ddf
disasm for invpcid
2011-06-10 12:49:52 +00:00
Stanislav Shwartsman
29e3f6e762
remove trace cache disabled mode from the code. next step going to be - introducing new optimization features based on trace cache
2011-06-01 20:34:04 +00:00
Stanislav Shwartsman
04e9254e2c
AMD released new Vol4: 128 and 256 bit vector instructions, dropped SSE4A
2011-05-30 20:15:50 +00:00
Stanislav Shwartsman
ee3f9e36cb
Implemented Supervisor Mode Execution Protection (SMEP)
2011-05-29 16:28:26 +00:00
Stanislav Shwartsman
de95fa8e13
more changes towards configurable cpuid
2011-05-24 18:23:28 +00:00
Stanislav Shwartsman
92bb77ef1d
Merge patch from SF tracker:
...
[3298173] Breakpoint on VMEXIT event by Jianan Hao
Patch description:
The patch provides a new command "vmexitbp" to set breakpoint when VM guest exit. The simulation will be stopped before first HOST mode instruction is executed.
Usage:
Type "vmexitbp" in debugger command window to switch it on/off (similar to modebp).
Currently, the patch has no corresponding interface on GUI debugger. Someone may add it if interested.
2011-05-06 08:19:03 +00:00
Stanislav Shwartsman
a02ddb36d2
undo a change from 2 weeks ago that cause correctness failure
2011-05-06 08:03:45 +00:00
Stanislav Shwartsman
c44f82f4ac
small cleanup
2011-04-25 20:26:22 +00:00
Stanislav Shwartsman
a02d8cfe67
cleanups, simplications, copyright updates
2011-04-23 20:39:27 +00:00
Stanislav Shwartsman
4f46b6eab2
bcd flags handling change
2011-04-23 10:49:36 +00:00
Stanislav Shwartsman
a1b523dacd
warning fix
2011-04-22 15:18:05 +00:00
Stanislav Shwartsman
5230bd27ee
added/fixed comments
2011-04-21 15:51:36 +00:00
Stanislav Shwartsman
024a1ace38
move X2APIC to be .bochsrc option, rework of the cpuid code
2011-04-21 13:27:42 +00:00
Stanislav Shwartsman
6e79fdfb1e
optimize data hw breakpoint
2011-04-09 05:12:28 +00:00
Stanislav Shwartsman
4de76b0571
introduced victim cache for a trace cache structure.
...
Allows to significantly cut trace cache miss latenct and find data in victim cahe instead of redoding it
8 entries VC in parallel with direct map 64K entries
2011-03-25 23:06:34 +00:00
Stanislav Shwartsman
dd36d3c754
fixed code breakpoint hit
2011-03-24 19:06:58 +00:00
Stanislav Shwartsman
31dd6a70db
small cleanups
2011-03-20 21:16:45 +00:00
Stanislav Shwartsman
7664c55b08
first fixups after AVX
...
(and for AVX)
2011-03-20 18:27:31 +00:00
Stanislav Shwartsman
7ced718040
implemented AVX instructions support
...
many changes - some cleanup will follow
please report ay found bugs !
2011-03-19 20:09:34 +00:00
Stanislav Shwartsman
16021a0ddb
rename model_specific.h to be cpuid.h
2011-03-19 17:35:18 +00:00
Stanislav Shwartsman
63fe52f601
accessors for DR6 and DR7 fields
2011-03-15 20:20:15 +00:00
Stanislav Shwartsman
edd7c2d787
small reorg in cpuid code
2011-03-14 20:28:16 +00:00
Stanislav Shwartsman
acd320699d
small cleanups
2011-03-14 06:25:54 +00:00
Stanislav Shwartsman
2bef4597d6
volatile is redundant here
2011-03-03 19:51:29 +00:00
Stanislav Shwartsman
acb83acfa7
Fixed decoding of CRC32 instr
2011-02-26 20:43:11 +00:00
Stanislav Shwartsman
66682a0ba7
added ability to configure CPU family and model through .bochsrc
2011-02-25 15:05:48 +00:00
Stanislav Shwartsman
7d80a6ebe0
Adding Id and Rev property to all files
2011-02-24 21:54:04 +00:00
Stanislav Shwartsman
b5ebe5865e
Fixes for incoming bug report, missed changes in CVS, repository fixups and etc
2011-02-11 09:56:23 +00:00
Stanislav Shwartsman
498b591452
quick code reorg that gives 3% speedup
2011-01-26 11:48:13 +00:00
Stanislav Shwartsman
f1821fa3bf
SMC invalidation only for traces that were really affected by SMC store
2011-01-23 15:54:54 +00:00
Stanislav Shwartsman
12005d92cf
split more SSE ops
2011-01-21 19:46:44 +00:00
Stanislav Shwartsman
0de2b305bc
split SSE opcode
2011-01-21 19:21:16 +00:00
Stanislav Shwartsman
a31103e7d8
optimize fetchdecode tables - part2
2011-01-21 16:07:51 +00:00
Stanislav Shwartsman
fbc9b8b190
phase1 of opcode tables optimization
2011-01-20 16:24:42 +00:00
Stanislav Shwartsman
8c5c078b13
optimize sse and mmx code
2011-01-16 20:42:28 +00:00
Stanislav Shwartsman
45f0c72385
remove duplicated instr
2011-01-15 15:17:28 +00:00
Stanislav Shwartsman
fcdadabbc4
Rewritten SMC handling, removed pageWriteStamp, now trace fetch chck only for pAddr
2011-01-12 18:49:11 +00:00
Stanislav Shwartsman
a80b44b6db
split more sse ops
2011-01-09 20:18:02 +00:00
Stanislav Shwartsman
c5aca5ac21
move function to inline
2011-01-08 19:50:22 +00:00
Stanislav Shwartsman
37204c0aaa
split more SSE ops
2011-01-08 12:28:25 +00:00
Stanislav Shwartsman
a1bc92a46b
split more SSE opcodes
2011-01-08 11:20:29 +00:00
Stanislav Shwartsman
2946d0ac26
split more SSE ops
2010-12-30 21:45:39 +00:00
Stanislav Shwartsman
f9f868247a
split more SSE ops
2010-12-30 20:35:10 +00:00
Stanislav Shwartsman
fd5558d4be
another way to implement this op
2010-12-26 20:54:23 +00:00
Stanislav Shwartsman
25b1e2e58d
split more SSE ops
2010-12-26 20:41:47 +00:00
Stanislav Shwartsman
f705cbbc63
rename functions
2010-12-25 19:34:43 +00:00
Stanislav Shwartsman
1bd512e98d
split more SSE ops, optimizations in MMX code
2010-12-25 17:04:36 +00:00
Stanislav Shwartsman
c005444d5b
split more SSE opcodes
2010-12-25 07:59:15 +00:00
Stanislav Shwartsman
040a8e1a3a
split bunch of SSE opcodes
2010-12-24 08:35:00 +00:00
Stanislav Shwartsman
43600f3756
complete rework of SSE code
...
next step - split all SSE opcodes by ModC0
2010-12-22 21:16:02 +00:00
Stanislav Shwartsman
29a674e520
split rd/wr CR opcodes for simplicity
2010-12-19 22:36:19 +00:00
Stanislav Shwartsman
c7017b1c05
simplification
2010-12-19 21:41:15 +00:00
Stanislav Shwartsman
4a85a8680e
SSE optimization
2010-12-19 07:06:40 +00:00
Stanislav Shwartsman
48d94d6dc3
optimization
2010-12-18 11:58:16 +00:00
Stanislav Shwartsman
36291b0b1d
accessor to upper part of 64-bit reg
2010-11-12 20:46:59 +00:00
Stanislav Shwartsman
e6981218dc
next step for fully configurable CPU + more optimal VMX execution
...
- check at startup time which VMX fields are accessible
- next step: simplify VMREAD and VMWRITE instructions - eliminate switch statements
2010-11-11 21:41:03 +00:00
Stanislav Shwartsman
5ea2591cd9
fixes
2010-10-07 20:40:01 +00:00
Stanislav Shwartsman
6d089dd238
changed CPUID constants to defines
2010-10-07 16:39:31 +00:00
Stanislav Shwartsman
75f2ae9c18
fetchdecode simplification rework
2010-09-25 09:55:40 +00:00
Stanislav Shwartsman
1107ce138e
small fetchdecode optimization
2010-09-07 19:54:50 +00:00
Stanislav Shwartsman
31e8bfc5a7
Fixed fsgsbase cpuid bit
2010-07-22 20:19:00 +00:00
Stanislav Shwartsman
91ac0df65c
implemented GS/FS BASE access instructions published in _319433-007.pdf document
2010-07-22 16:41:59 +00:00
Stanislav Shwartsman
7f7c249934
disasm and some cpuid code according to recently published AVX_319433-007.pdf document
2010-07-22 15:12:08 +00:00
Stanislav Shwartsman
8d8d1590f5
fetchdecide rework for AVX (0xF3 SSE prefix encoded as 2 in VEX)
2010-05-23 19:17:41 +00:00
Stanislav Shwartsman
1c00193616
cleanup
2010-05-22 10:43:39 +00:00
Stanislav Shwartsman
fff0a79aea
a little simpler fetchdecode
2010-05-21 21:17:32 +00:00
Stanislav Shwartsman
3dfcfd0ccd
Split shift opcodes | optimize SAR opcode
2010-05-18 07:28:05 +00:00
Stanislav Shwartsman
74b87d2b68
fixes for CPUID and alloweds bits in CRs
2010-05-12 21:33:04 +00:00
Stanislav Shwartsman
d849cdf128
- Determine and select max physical address size automatically at
...
configure time:
- 32-bit physical address for 386/486 guests
- 36-bit physical address for PSE-36 enabled Pentium guest
- 40-bit physical address for PAE enabled P6 or later guests
2010-05-12 14:55:12 +00:00
Stanislav Shwartsman
49934bc853
cache page split instructions
...
next step - cache page split traces
2010-05-08 08:30:04 +00:00
Stanislav Shwartsman
b0d5142e18
comp fixes
2010-05-06 21:46:39 +00:00
Stanislav Shwartsman
ca95477b7f
Implement x86-64 PCID extension
2010-04-29 19:34:32 +00:00
Stanislav Shwartsman
1c2fa8cd0c
move 1G_pages support to runtime option
2010-04-24 09:36:04 +00:00
Stanislav Shwartsman
ea95341e05
compile fix
2010-04-22 18:48:39 +00:00
Stanislav Shwartsman
749d6c33d2
relocate lazy_flags code from cpu.h
2010-04-15 05:51:00 +00:00
Stanislav Shwartsman
689ecc57dd
split 2 more SSE opcodes
2010-04-08 17:35:32 +00:00