14289:49005710b522 |
26-Aug-2019 |
Pouya Fotouhi <Pouya.Fotouhi@amd.com> |
arch-x86: ignore non-temporal hint for movntps/movntpd SSE insts
Making the implementation of movntps/movntpd consistent with other non-temporal instructions. We are ignoring the hint here, and implementing those instructions as cacheable instructions.
This change adds a warning to let user know about this workaround. Also, this change add the address check for second part of move.
Change-Id: I811652b24cf39ca2f5c5d4c9e9e417f69190b55c Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/20408 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> Tested-by: kokoro <noreply+kokoro@google.com> |
14287:1c9774d969ac |
18-Sep-2019 |
Hoa Nguyen <hoanguyen@ucdavis.edu> |
arch-x86: Change warn to warn_once for NT instructions
Change-Id: I50353716f2a913b9b106b140644d95991879f662 Signed-off-by: Hoa Nguyen <hoanguyen@ucdavis.edu> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/21039 Reviewed-by: Gabe Black <gabeblack@google.com> Reviewed-by: Pouya Fotouhi <pfotouhi@ucdavis.edu> Maintainer: Gabe Black <gabeblack@google.com> Tested-by: kokoro <noreply+kokoro@google.com> |
14224:2edf6ec03c9d |
26-Aug-2019 |
Pouya Fotouhi <Pouya.Fotouhi@amd.com> |
arch-x86: Adding warning for movnti
We are ignoring the non-temporal hint here, and implementing this instruction as a cacheable instruction.
This change adds a warning to let user know about this workaround.
Change-Id: I2e40437a44282fe9cf7772a25a8870bd8729a6ed Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/20428 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
14220:d8f83e601091 |
20-Aug-2019 |
Pouya Fotouhi <Pouya.Fotouhi@amd.com> |
arch-x86: implement movntq/movntdq instructions
Non-temporal quadword/double-quadword move instructions. This change ignores the non-temporal hint and instructions are implemented to send cacheable request to memory. This would have some "performance" impact (i.e. having some cache pollution) to get better "correctness" in behavior.
Change-Id: I2052ac0970f61a54bafb7332762debcb7103202d Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/20288 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
14033:a1cb162f68d9 |
31-May-2019 |
Brandon Potter <brandon.potter@amd.com> |
x86: fix movsd bug on %xmm register
The movsd instruction should zero out half the register, but does not do it. This changeset adds the necessary microop to the instruction to cause correct behavior.
Change-Id: I5278da3634c78a97ed0586f687a36c6dc5a34c60 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19068 Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com> Reviewed-by: Michael LeBeane <Michael.Lebeane@amd.com> Reviewed-by: Gabe Black <gabeblack@google.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Gabe Black <gabeblack@google.com> Tested-by: kokoro <noreply+kokoro@google.com> |
12683:6e14a1dd346d |
20-Apr-2017 |
Steve Reinhardt <steve.reinhardt@amd.com> |
arch-x86: implement movntps/movntpd SSE insts
These are non-temporal packed SSE stores.
Change-Id: I526cd6551b38d6d35010bc6173f23d017106b466 Reviewed-on: https://gem5-review.googlesource.com/9861 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com> |
12587:e7ce22ce119f |
12-Mar-2018 |
Gabe Black <gabeblack@google.com> |
x86: Simplify the implementations of RDTSC and RDTSCP slightly.
These instructions originally read the TSC into t1 and then unpacked it into eax and edx using a move, a right shift, and then another move. We can combine the second shift and move. The shift will move the upper 32 bits into the lower 32 bits, and clear the upper 32 bits to zero. This has the same effect as moving the lower 32 bits post-shift into another register, since the upper 32 bits will be cleared to zero based on x86 partial register access semantics.
Change-Id: Iba85e501c7e84147ad0047f5c555e61bdf8f032b Reviewed-on: https://gem5-review.googlesource.com/9044 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Gabe Black <gabeblack@google.com> |
12586:ab24f7edc1e3 |
12-Mar-2018 |
Gabe Black <gabeblack@google.com> |
x86: Implement the RDTSCP instruction.
This is very similar to RDTSC, except that it requires all younger instructions to retire before it completes, and it writes the TSC_AUX MSR into ECX. I've added an mfence as an iniitial microop to ensure that memory accesses complete before RDTSCP runs, and added an rdval microop at the end to read the TSC_AUX value into ECX.
Change-Id: I9766af562b7fd0c22e331b56e06e8818a9e268c9 Reviewed-on: https://gem5-review.googlesource.com/9043 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Gabe Black <gabeblack@google.com> |
12585:d8dc3be32b91 |
12-Mar-2018 |
Gabe Black <gabeblack@google.com> |
x86: Mark the RDTSC instruction as .serialize_before.
Change-Id: I20bf6a57ea4354aac9267845bb37b70b83d6fcde Reviewed-on: https://gem5-review.googlesource.com/9042 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Gabe Black <gabeblack@google.com> |
12584:2af98e1fb894 |
12-Mar-2018 |
Gabe Black <gabeblack@google.com> |
x86: Replace the .serializing directive with .serialize_(before|after).
This makes it explicit which type of serialization you want, and also makes it possible to make a macroop serialize before. The old serializing directive was renamed .serialize_after in the microcode assembler, and throughout the microcode implementation, and its behavior is unchanged. More specifically, it still marks the last microop within the macroop as IsSerializing and IsSerializeAfter.
The new .serialize_before directive does something similar and marks the first microop as IsSerializing and IsSerializeBefore.
Change-Id: Ia53466c734c651c65400809de7ef903c4a6c3e7e Reviewed-on: https://gem5-review.googlesource.com/9041 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Gabe Black <gabeblack@google.com> |
12463:84f365522633 |
15-Jan-2018 |
Swapnil Haria <swapnilster@gmail.com> |
arch-x86: Adding clflush, clflushopt, clwb instructions
This patch adds support for cache flushing instructions in x86. It piggybacks on support for similar instructions in arm ISA added by Nikos Nikoleris. I have tested each instruction using microbenchmarks.
Change-Id: I72b6b8dc30c236a21eff7958fa231f0663532d7d Reviewed-on: https://gem5-review.googlesource.com/7401 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com> |
12390:464513ab8668 |
13-Dec-2017 |
Gabe Black <gabeblack@google.com> |
x86: Use operand size 4 when it would be 2 for cmpxchg8b.
This means the instruction is treated as cmpxchg8b when the effective operand size is 16 bits.
Change-Id: I4d9bb295f96097e1746a9bbccb2c579d14738fab Reviewed-on: https://gem5-review.googlesource.com/6603 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Gabe Black <gabeblack@google.com> |
12368:511bd7aa22d1 |
05-Dec-2017 |
Gabe Black <gabeblack@google.com> |
x86: Split apart x87's FSW and TOP, and add a missing break.
The FSW and TOP values are technically part of the same register, but they have very different behaviors. One of them can be renamed and float along without affecting global state, while the other requires serialization. They just need to *look* like the same register when read by the user.
Also, there was a missing break in setMiscRegNoEffect.
Change-Id: If58de0f566f65068208240f4001209fb9e1826d6 Reviewed-on: https://gem5-review.googlesource.com/6441 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Gabe Black <gabeblack@google.com> |
12361:ed9f9d629a7e |
04-Dec-2017 |
Gabe Black <gabeblack@google.com> |
x86: LOOP's operand size defaults to 64 bits in 64 bit mode.
The microcode for those instructions needs a directive which overrides that setting in the instructions emulation environment.
Reported-by: Matt Sinclair <mattdsinclair@gmail.com>
Change-Id: I474d938c0b3cf01da92ec817a58b08de783f1967 Reviewed-on: https://gem5-review.googlesource.com/6301 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com> |
11829:cb5390385d87 |
10-Feb-2017 |
Jason Lowe-Power <jason@lowepower.com> |
x86: Fix implicit stack addressing in 64-bit mode
When in 64-bit mode, if the stack is accessed implicitly by an instruction the alternate address prefix should be ignored if present.
This patch adds an extra flag to the ldstop which signifies when the address override should be ignored. Then, for all of the affected instructions, this patch adds two options to the ld and st opcode to use the current stack addressing mode for all addresses and to ignore the AddressSizeFlagBit. Finally, this patch updates the x86 TLB to not truncate the address if it is in 64-bit mode and the IgnoreAddrSizeFlagBit is set.
This fixes a problem when calling __libc_start_main with a binary that is linked with a recent version of ld. This version of ld uses the address override prefix (0x67) on the call instruction instead of a nop.
Note: This has not been tested in compatibility mode and only the call instruction with the address override prefix has been tested.
See [1] page 9 (pdf page 45)
For instructions that are affected see [1] page 519 (pdf page 555).
[1] http://support.amd.com/TechDocs/24594.pdf
Signed-off-by: Jason Lowe-Power <jason@lowepower.com> |
11329:82bb3ee706b3 |
06-Feb-2016 |
Alexandru Dutu <alexandru.dutu@amd.com> |
x86: revamp cmpxchg8b/cmpxchg16b implementation
The previous implementation did a pair of nested RMW operations, which isn't compatible with the way that locked RMW operations are implemented in the cache models. It was convenient though in that it didn't require any new micro-ops, and supported cmpxchg16b using 64-bit memory ops. It also worked in AtomicSimpleCPU where atomicity was guaranteed by the core and not by the memory system. It did not work with timing CPU models though.
This new implementation defines new 'split' load and store micro-ops which allow a single memory operation to use a pair of registers as the source or destination, then uses a single ldsplit/stsplit RMW pair to implement cmpxchg. This patch requires support for 128-bit memory accesses in the ISA (added via a separate patch) to support cmpxchg16b. |
11320:42ecb523c64a |
06-Feb-2016 |
Steve Reinhardt <steve.reinhardt@amd.com> |
style: remove trailing whitespace
Result of running 'hg m5style --skip-all --fix-white -a'. |
11160:10f28b61fcb1 |
06-Oct-2015 |
Steve Reinhardt <steve.reinhardt@amd.com> |
x86: implement rcpps and rcpss SSE insts
These are packed single-precision approximate reciprocal operations, vector and scalar versions, respectively.
This code was basically developed by copying the code for sqrtps and sqrtss. The mrcp micro-op was simplified relative to msqrt since there are no double-precision versions of this operation. |
11159:9459593cb649 |
06-Oct-2015 |
Steve Reinhardt <steve.reinhardt@amd.com> |
x86: implement fild, fucomi, and fucomip x87 insts
fild loads an integer value into the x87 top of stack register. fucomi/fucomip compare two x87 register values (the latter also doing a stack pop). These instructions are used by some versions of GNU libstdc++. |
10959:30c700ee0d47 |
20-Jul-2015 |
David Hashe <david.hashe@amd.com> |
x86: x86 instruction-implementation bug fixes
Added explicit data sizes and an opcode type for correct execution. |
10899:b8b8ad2c72dd |
04-Jul-2015 |
Nikos Nikoleris <nikos.nikoleris@gmail.com> |
x86: Adjust the size of the values written to the x87 misc registers All x87 misc registers are implemented in an array of 64 bit values but in real hardware the size of some of these registers is smaller. Previsouly all 64 bits where incorrectly set and then later read. To ensure correctness we mask the value in setMiscRegNoEffect to write only the valid bits.
Committed by: Nilay Vaish <nilay@cs.wisc.edu> |
10784:2f1a0f6d5d77 |
13-Apr-2015 |
Nilay Vaish <nilay@cs.wisc.edu> |
x86: implements x87 mult/div instructions |
10644:24447dc69101 |
10-Jan-2015 |
Emilio Castillo <castilloe@unican.es> |
x86 : fxsave and fxrestore missing template code
This patch corrects the FXSAVE and FXRSTOR Macroops. The actual code used for saving/restore the FP registers is in the file but it was not used.
The FXSAVE and FXRSTOR instructions are used in the kernel for saving and loading the state of the mmx,xmm and fpu registers.
This operation is triggered in FS by issuing a Device Not Available Fault. The cr0 register has a TS flag that is set upon each context change. Every time a task access any FP related register (SIMD as well) if the TS flag is set to one, the device not available fault is issued. The kernel saves the current state of the registers, and restore the previous state of the currently running task.
Right now Gem5 lacks of this capability. the Device Not Available Fault is never issued, leading to several problems when different threads share the same CPU and SMT is not used. The PARSEC Ferret benchmark is an example of this behavior.
In order to test this a hack in the atomic cpu code was done to detect if a static instruction has any FP operands and the cr0 reg TS bit is set. This check must be done in the ISA dependent code. But it seems to be tricky to access the cr0 register while executing an instruction.
Committed by: Nilay Vaish <nilay@cs.wisc.edu> |
10632:b415e0dabe21 |
03-Jan-2015 |
Maxime Martinasso <maxime.cscs@gmail.com> |
x86: implements the simd128 ADDSUBPD instruction
This patch implements the simd128 ADDSUBPD instruction for the x86 architecture.
Tested with a simple program in assembly language which executes the instruction. Checked that different versions of the instruction are executed by using the execution tracing option.
Committed by: Nilay Vaish <nilay@cs.wisc.edu |
10544:049273bc03f6 |
17-Nov-2014 |
Gabe Black <gabeblack@google.com> |
x86: Fix setting segment bases in real mode.
The data size used for actually writing the base value for the segment was the default size, but really it should set the entire value without any possible truncation. |
10543:8fb2884b0a75 |
17-Nov-2014 |
Gabe Black <gabeblack@google.com> |
x86: Fix some bugs in the real mode far jmp instruction.
The far pointer should be shifted right to get the selector value, not left. Also, when calculating the width of the offset, the wrong register was used in one spot. |
10474:799c8ee4ecba |
16-Oct-2014 |
Andreas Hansson <andreas.hansson@arm.com> |
arch: Use shared_ptr for all Faults
This patch takes quite a large step in transitioning from the ad-hoc RefCountingPtr to the c++11 shared_ptr by adopting its use for all Faults. There are no changes in behaviour, and the code modifications are mostly just replacing "new" with "make_shared". |
10045:8bc3887d5e72 |
27-Jan-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
x86: use lfpimm instead of limm for fptan |
10044:42e058cae3d0 |
27-Jan-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
x86: implements x87 add/sub instructions |
10043:301f2c0b3423 |
27-Jan-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
x86: implements fxch instruction. |
9985:d70124a5d594 |
26-Nov-2013 |
Christian Menard <christian.menard@tu-dresden.de> |
x86: Implementation of Int3 and Int_Ib in long mode
This is an implementation of the x86 int3 and int immediate instructions for long mode according to 'AMD64 Programmers Manual Volume 3'. |
9896:e31776cf4743 |
29-Sep-2013 |
Andreas Sandberg <andreas@sandberg.pp.se> |
x86: Add support for FXSAVE, FXSAVE64, FXRSTOR, and FXRSTOR64 |
9895:a1f661af9dc9 |
29-Sep-2013 |
Andreas Sandberg <andreas@sandberg.pp.se> |
x86: Add support for FLDENV & FNSTENV |
9894:c0a3920859bd |
29-Sep-2013 |
Andreas Sandberg <andreas@sandberg.pp.se> |
x86: Add support for loading 32-bit and 80-bit floats in the x87
The x87 FPU supports three floating point formats: 32-bit, 64-bit, and 80-bit floats. The current gem5 implementation supports 32-bit and 64-bit floats, but only works correctly for 64-bit floats. This changeset fixes the 32-bit float handling by correctly loading and rounding (using truncation) 32-bit floats instead of simply truncating the bit pattern.
80-bit floats are loaded by first loading the 80-bits of the float to two temporary integer registers. A micro-op (cvtint_fp80) then converts the contents of the two integer registers to the internal FP representation (double). Similarly, when storing an 80-bit float, there are two conversion routines (ctvfp80h_int and cvtfp80l_int) that convert an internal FP register to 80-bit and stores the upper 64-bits or lower 32-bits to an integer register, which is the written to memory using normal integer stores. |
9893:5924b77fb8fc |
30-Sep-2013 |
Andreas Sandberg <andreas@sandberg.pp.se> |
x86: Fix re-entrancy problems in x87 store instructions
X87 store instructions typically loads and pops the top value of the stack and stores it in memory. The current implementation pops the stack at the same time as the floating point value is loaded to a temporary register. This will corrupt the state of the x87 stack if the store fails. This changeset introduces a pop87 micro-instruction that pops the stack and uses this instruction in the affected macro-instructions to pop the stack after storing the value to memory. |
9764:7e744dcb1904 |
18-Jun-2013 |
Andreas Sandberg <andreas@sandberg.pp.se> |
x86: Fix loading of floating point constants
This changeset actually fixes two issues:
* The lfpimm instruction didn't work correctly when applied to a floating point constant (it did work for integers containing the bit string representation of a constant) since it used reinterpret_cast to convert a double to a uint64_t. This caused a compilation error, at least, in gcc 4.6.3.
* The instructions loading floating point constants in the x87 processor didn't work correctly since they just stored a truncated integer instead of a double in the floating point register. This changeset fixes the old microcode by using lfpimm instruction instead of the limm instructions. |
9761:f2102d45a753 |
18-Jun-2013 |
Andreas Sandberg <andreas@sandberg.pp.se> |
x86: Make fprem like the fprem on a real x87
The current implementation of fprem simply does an fmod and doesn't simulate any of the iterative behavior in a real fprem. This isn't normally a problem, however, it can lead to problems when switching between CPU models. If switching from a real CPU in the middle of an fprem loop to a simulated CPU, the output of the fprem loop becomes correupted. This changeset changes the fprem implementation to work like the one on real hardware. |
9758:353587055aff |
18-Jun-2013 |
Andreas Sandberg <andreas@sandberg.pp.se> |
x86: Fix the flag handling code in FABS and FCHS
This changeset fixes two problems in the FABS and FCHS implementation. First, the ISA parser expects the assignment in flag_code to be a pure assignment and not an and-assignment, which leads to the isa_parser omitting the misc reg update. Second, the FCHS and FABS macro-ops don't set the SetStatus flag, which means that the default micro-op version, which doesn't update FSW, is executed. |
9700:2ea56473f400 |
21-May-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
x86: mark instructions for being function call/return Currently call and return instructions are marked as IsCall and IsReturn. Thus, the branch predictor does not use RAS for these instructions. Similarly, the number of function calls that took place is recorded as 0. This patch marks these instructions as they should be. |
9671:483f5ff33dd1 |
23-Apr-2013 |
Christian Menard <Christian.Menard@tu-dresden.de> |
x86: increment the stack pointer in lret inst The 'lret' instruction reloads instruction pointer and code segment from the stack and then pops them. But the popping part is missing from the current implementation. This caused incorrect behavior in some code related to the Fiasco OS. Microops are being added to rectify the behavior of the instruction.
Committed by: Nilay Vaish <nilay@cs.wisc.edu> |
9582:0632d2d1575c |
11-Mar-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
x86: implement some of the x87 instructions This patch implements ftan, fprem, fyl2x, fld* floating-point instructions. |
9472:8a2175fa7fa0 |
15-Jan-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
x86: implements fsin, fcos instructions |
9471:4193ed60eed7 |
15-Jan-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
x86: implements emms instruction |
9470:68f7e0bcf4aa |
15-Jan-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
x86: implement fabs, fchs instructions |
9372:7ba317c33683 |
30-Dec-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
x86: implement x87 fp instruction fnstsw This patch implements the fnstsw instruction. The code was originally written by Vince Weaver. Gabe had made some comments about the code, but those were never addressed. This patch addresses those comments. |
9371:7c1484cc9b10 |
30-Dec-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
x86: implement x87 fp instruction fsincos This patch implements the fsincos instruction. The code was originally written by Vince Weaver. Gabe had made some comments about the code, but those were never addressed. This patch addresses those comments. |
9009:d45a02bd5391 |
19-May-2012 |
Marc Orr <marc.orr@gmail.com> |
x86 ISA: Implement the sse3 haddps instruction.
Shuffle the 32 bit values into position, and then add in parallel. |
8973:d69afa89c2ee |
29-Apr-2012 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the IMUL_R_P_I macroop.
The disp displacement was left off the load microop so the wrong value was used. |
8672:2c7ece076c8b |
09-Jan-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
X86: Add memory fence to I/O instructions |
8610:9bdd52a2214c |
03-Nov-2011 |
Nilay Vaish<nilay@cs.wisc.edu> |
x86: Add microop for fence This patch adds a new microop for memory barrier. The microop itself does nothing, but since it is marked as a memory barrier, the O3 CPU should flush all the pending loads and stores before the fence to the memory system. |
8290:3c628a51f6e1 |
06-May-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the Lldt instructions so they load the ldtr and not the tr. |
8103:53c2d9b1c15d |
02-Mar-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Mark IO reads and writes as non-speculative. |
7932:6220632e8636 |
07-Feb-2011 |
Tim Harris <tharris@microsoft.com> |
X86: Use all 64 bits of the lstar register in the SYSCALL_64 macroop.
During SYSCALL_64, use dataSize=8 when handling new rip (ref http://www.intel.com/Assets/PDF/manual/253668.pdf 5.8.8 IA32_LSTAR is a 64-bit address) |
7931:fb0a01641d73 |
07-Feb-2011 |
Tim Harris <tharris@microsoft.com> |
X86: Fix JMP_FAR_I to unpack a far pointer correctly.
JMP_FAR_I was unpacking its far pointer operand using sll instead of srl like it should, and also putting the components in the wrong registers for use by other microcode. |
7930:fb13c36c3951 |
07-Feb-2011 |
Tim Harris <tharris@microsoft.com> |
X86: Read the LDT/GDT at CPL0 when executing an iret.
During iret access LDT/GDT at CPL0 rather than after transition to user mode (if I'm reading the Intel IA-64 architecture spec correctly, the contents of the descriptor table are read before the CPL is updated). |
7872:b21a94bf6a28 |
02-Feb-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Replace the stupd microop with a store/update sequence. |
7690:ae58aacfab8f |
29-Sep-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the RIP relative versions of the BT, BTC, BTR, and BTS instructions. |
7622:b49144029ec8 |
23-Aug-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Mark serializing macroops and regular instructions as such. |
7501:a75564db03c3 |
21-Jul-2010 |
Tushar Krishna <Tushar.Krishna@amd.com> |
Fix x86 XCHG macro-op to use locked micro-ops for all memory accesses |
7087:fb8d5786ff30 |
24-May-2010 |
Nathan Binkert <nate@binkert.org> |
copyright: Change HP copyright on x86 code to be more friendly |
6801:353726c415f4 |
19-Dec-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add a common named flag for signed media operations. |
6800:335f8b406bb9 |
19-Dec-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Create a common flag with a name to indicate high multiplies. |
6799:36131e4dfb6e |
19-Dec-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Create a common flag with a name to indicate scalar media instructions. |
6733:16817406af29 |
10-Nov-2009 |
Vince Weaver <vince@csl.cornell.edu> |
X86: Fix bugs in movd implementation.
Unfortunately my implementation of the movd instruction had two bugs.
In one case, when moving a 32-bit value into an xmm register, the lower half of the xmm register was not zero extended.
The other case is that xmm was used instead of xmmlm as the source for a register move. My test case didn't notice this at first as it moved xmm0 to eax, which both have the same register number. |
6715:fb4a3a61bc74 |
04-Nov-2009 |
Vince Weaver <vince@csl.cornell.edu> |
X86: Fix problem with movhps instruction
This problem is like the one fixed with movhpd a few weeks ago. A +8 displacement is used to access memory when there should be none.
This fix is needed for the perlbmk spec2k benchmark to run. |
6707:0e5037cecaf7 |
30-Oct-2009 |
Vince Weaver <vince@csl.cornell.edu> |
X86: Add support for x86 psrldq and pslldq instructions
These are complicated instructions and the micro-code might be suboptimal.
This has been tested with some small sample programs (attached)
The psrldq instruction is needed by various spec2k programs. |
6706:ea20065f6614 |
30-Oct-2009 |
Vince Weaver <vince@csl.cornell.edu> |
X86: Implement movd_Vo_Edp on X86
This patch implements the movd_Vo_Edp series of instructions.
It addresses various concerns by Gabe Black about which file the instruction belonged in, as well as supporting REX prefixed instructions properly.
This instruction is needed for some of the spec2k benchmarks, most notably bzip2. |
6705:3c810b64ee7d |
30-Oct-2009 |
Vince Weaver <vince@csl.cornell.edu> |
X86: Implement the X86 sse2 haddpd instruction
This patch implements the haddpd instruction.
It fixes the problem in the previous version (pointed out by Gabe Black) where an incorrect result would happen if you issue the instruction with the same argument twice, i.e. "haddpd %xmm0,%xmm0"
This instruction is used by many spec2k benchmarks. |
6698:21047815f78e |
28-Oct-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Replace "DISPLACEMENT" with disp in movhpd. |
6697:4863725cb4d9 |
27-Oct-2009 |
Vince Weaver <vince@csl.cornell.edu> |
Fix problem with the x86 sse movhpd instruction.
The movhpd instruction was writing to the wrong memory offset. |
6696:e533bec78924 |
21-Oct-2009 |
Vince Weaver <vince@csl.cornell.edu> |
Implement X86 sse2 movdqu and movdqa instructions
The movdqa instruction should enforce 16-byte alignment. This implementation does not do that.
These instructions are needed for most of x86_64 spec2k to run. |
6645:c248b0348d85 |
16-Sep-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix checking the NT bit during an IRET. |
6644:57fba079b7ff |
16-Sep-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix setting the busy bit in the task descriptor in LTR. |
6619:de112a8ac3d8 |
20-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the decoding for and fill out FST and FSTP. |
6610:dbfe22c711d5 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement MOVNTI. |
6608:6d1f74b21533 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement MOVQ2DQ. |
6607:dba8e329e783 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement MOVDQ2Q. |
6606:03fd282998d0 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the media instructions that convert fp values to ints. |
6604:b750348f6da3 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the instructions that compare fp values and write a mask as a result. |
6602:95b882ce7b10 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the instructions that compare fp values and write to rflags. |
6600:bb997cd711af |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement MOVSS. |
6599:a578850e7524 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement LDMXCSR. |
6598:82d1d4d217e4 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement STMXCSR. |
6597:4903cea6a8c2 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the shuffle media instructions. |
6595:2aec993cdd8f |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the mask move instructions. |
6593:f27fd3c3a153 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the instructions that move sign bits. |
6591:3d1ea9362fe5 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the insert/extract instructions. |
6588:f449753172ee |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the media average instructions. |
6586:e8af0cf94c37 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the multiply and add instructions. |
6584:5355f44912f6 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the media shifts that operate on 64 bits or less at a time. |
6582:7e1af04f4ead |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the sum of absolute differences instructions. |
6580:a1c40860fe09 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the media integer subtract instructions. |
6578:825b77196521 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the integer media multiply instructions. |
6575:e5a3ae40c4d0 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the integer media max instructions. |
6573:6e14c5d36a1a |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the integer media min instructions. |
6571:91d9599956f3 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the media integer addition instructions. |
6569:e8cb266c9451 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the instructions that convert between forms of floating point. |
6567:819107c2c851 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the instructions that compare fp values and write masks as the result. |
6565:b7f5a02ea9b7 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the MOVDDUP instruction. |
6564:9ed64f6888cf |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement many of the media mov instructions. |
6563:2c5b80c75da7 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the media instructions that convert integer values to floating point. |
6561:3f716cda05c9 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the floating point media instructions. |
6559:e4f60f716103 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the floating point media multiply instructions. |
6557:f677e05d723d |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the floating point media subtract instructions. |
6555:dae81a15cfcc |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the floating point media add instructions. |
6553:897523ead7ce |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the media sqrt instructions. |
6551:52b4167056ed |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the media floating point max instructions. |
6549:d6ae13f56801 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the media floating point min instructions. |
6547:3f6c31c3d59e |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the pack instructions. |
6545:9c68aea7b1e6 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Rename sel to ext for media microops. |
6544:406ad51ece90 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Move the MMX version of MOVD into the simd64 directory. |
6543:a9a5dd560925 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the remaining unpack instructions. |
6542:059e35b593a8 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement PANDN, ANDNPS, and ANDNPD. |
6540:17414b661543 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement PAND, ANDPS, and ANDPD. |
6538:6cf5a0235ae8 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement POR, ORPD and ORPS. |
6536:dc54f4fd6116 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement PXOR. |
6535:b595412884f9 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: (Re)implement XORPS and XORPD. |
6533:2977e2e2dc27 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement PUNPCKLQDQ. |
6532:f7c42d003529 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement PUNPCKHQDQ. |
6531:6e2f4aa11482 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement PUNPCKHDQ. |
6530:cdb6bde20266 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement PUNPCKHWD. |
6529:cde96afcb3e3 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement PUNPCKHBW. |
6528:5c3a713ec1bb |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement PUNPCKLDQ. |
6527:4af40cccf527 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement PUNPCKLWD. |
6526:2f72755b4af7 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the versions of PUNPCKLBW that use XMM registers. |
6525:b252af5cda46 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the MOVQ instruction. |
6523:da0f91a2d60b |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the versions of MOVD that have an MMX source. |
6522:c256e28ad056 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the versions of PUNPCKLBW that use MMX registers. |
6520:962f58808d53 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the versions of MOVD that have an MMX destination. |
6519:36369ba5fad6 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Ignore the size part of XMM/MMX operands. The instructions know what they want. |
6518:1ad4a7774b3c |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Use suffixes to differentiate XMM/MMX/GPR operands. |
6514:1802d70f4092 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Turn the DIV and IDIV microcode into templates and generate all the variants. |
6513:e2ffac65a76a |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Remove some FIXMEs from IDIV that have been fixed. |
6512:b19a86a6d424 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Turn the CMPXCHG8B microcode into a template and generate each variant. |
6503:843ec3da7584 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix a bug introduced to IDIV in a recent attempt to fix another bug. |
6486:33faa9915d16 |
09-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the CMPXCHG8B/CMPXCHG16B instruction. |
6485:4f70960761cd |
09-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Don't clobber the original dividend when doing signed divide. |
6482:e4b8ec60fd4b |
08-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make not taken conditional moves leave the destination alone. Adjust CMOVcc. The manuals from both AMD and Intel say that when writing to a 32 bit destination in 64 bit mode, the upper 32 bits of the register are filled with zeros. They also both say that the CMOV instructions leave their destination alone when their condition fails. Unfortunately, it seems that CMOV will zero extend its destination register whether or not it was supposed to actually do a move on both platforms. This seems to be the only case where this happens, but it would be hard to say for sure. |
6481:fa6d324aa2f9 |
07-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: (Re)Implemented SHRD. |
6480:ed9d773de88f |
07-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement SHLD. |
6478:2ec6bfc8f9c7 |
07-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the qaud width bswap instruction handle the fact that 32 bit operations zero extend. |
6476:adbd07f1630d |
07-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Don't truncate the immediate parameter for the ENTER instruction. |
6475:951199885fd8 |
07-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Adjust the various sizes used for the enter and leave instructions. |
6474:585faad1057f |
07-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make scas compare its operands in the right order. |
6473:2b1bb253c05e |
07-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix a copy/paste error for cmovnp. |
6463:fe6165923529 |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix condition code setting for signed multiplies with negative results. |
6460:59108c231208 |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Use the new forced folding mechanism for the SAHF and LAHF instructions. |
6459:f7f0d361d6fc |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the indexing for ah in byte division instructions. |
6458:d959f578ae42 |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the indexing for ah in byte multiply instructions. |
6455:709527fb7250 |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Set the flags on rotate left with carry instructions. |
6450:b9aa6a397b57 |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Set the flags for rotate right with carry instructions. |
6448:a32abe4e17e1 |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Set the flags on a rotate right instruction. |
6445:647111272094 |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Actually set the flags on a rotate left instruction. |
6345:f9ae7c3a036c |
16-Jul-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Take limitted advantage of the compilers type checking for microop operands. |
6344:b7104eda0795 |
16-Jul-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix a number of places where the wrong form of a microop was used. |
6298:9af8736c26be |
09-Jul-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix a bug in IRET_PROT's microcode. The immediate form of sra was intended. |
6222:9ee4a06a960b |
29-May-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Keep track of more descriptor state to accomodate KVM. |
6097:842991b33990 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a locking version of XADD. |
6096:72f1239a1583 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a locking version of BTC. |
6095:c36f932461d9 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a locking version of BTR. |
6094:28198ab3adec |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a locking version of CMPXCHG. |
6093:7b88298769c7 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a locking version of BTS. |
6092:e4ffbb3546fa |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a locking version of DEC. |
6091:d430acd6d5ce |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a locking version of INC. |
6090:80d7669e9cdb |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a locking version of NEG. |
6089:030c2a63fb61 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a locking version of NOT. |
6088:c698cbf56cf1 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a locking version of XCHG. |
6087:7736bc8824a1 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a locking version of XOR. |
6086:2ac9ab003d54 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a locking version of SUB. |
6085:c210d3e04532 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a locking version of AND. |
6084:cb751de62299 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a locking version of SBB. |
6083:c669a6f8fa9e |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a locking version of ADC. |
6082:5db340cc3c47 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a locking version of OR. |
6081:e5da3985fa99 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a locking version of ADD. |
6070:3b0f44b3e0e1 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the TEST instruction set all the flags it's supposed to. |
6062:2116d308076f |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Explicitly use the right width in a few places that need a 64 bit value. |
6060:3d524dc980a8 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement far jmp. |
6057:882f1b921de7 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the interrupt entering microcode record the value to use, not actually use it. |
6055:40bdbc32e3db |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the save machine status word instruction (SMSW). |
6054:0aa0a6189767 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the load machine status word instruction (LMSW). |
6051:47a52383002b |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the mov to segment selector in real mode instruction microcode. |
6048:65a321a3a691 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the INIT IPI. |
6020:0647c8b31a99 |
06-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
Merge ARM into the head. ARM will compile but may not actually work. |
5977:4fff54ab52ae |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement shrd. |
5974:9ed073dd5214 |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Set address size to 64 bits when generating addresses internally. |
5968:6f9f1438360a |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make instructions that use intseg preserve all 8 bytes of their addresses. |
5961:969fb3187eba |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Compute shift instruction flags correctly. |
5948:871fccb3fb7a |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement IST stack switching. |
5937:177534612ec0 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the lldt instruction. |
5934:367ac7cae7b5 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make rdcr use merge and the mov to control register instructions use the right operand size. |
5933:8b9bc09b149c |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement CLTS. |
5932:afa0866171e1 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the segment register reading microops use merge. |
5931:d42d507ccdb1 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the mov to debug register intructions. |
5930:ec124ac0984b |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Rename oszForPseudoDesc maxOsz to reflect its more general use. |
5928:410d14f82f13 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix a few bugs with the segment register instructions in real mode. Fix a few instances where the register form of zext was used where zexti was intended. Also get rid of the 64 bit only rip relative addressed version since 64 bit and real mode are mutually exclusive. |
5927:5e3367b103da |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Do a merge for the zero extension microop. |
5920:5a9c976270d6 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a basic prefetch instruction. |
5916:4bbd6239223c |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Update CS later so stack accesses have the right permission checks. |
5913:f2bfe08dc873 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Use atCPL0 for accesses that are part of CPU machinery. |
5911:8d6e40f38063 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Move where CS is set so CPL checks work out. |
5908:c24a1ffc4ad0 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the sysret instruction in long mode. |
5907:8a633e6a8df1 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the longmode versions of the syscall instruction. |
5903:3d7f94358641 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make exceptions handle stack switching. |
5902:7a323daa3df2 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the LTR instruction. |
5858:54f64fb1bd62 |
01-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: All x86 fault classes now attempt to do something useful. |
5856:f770af5600c9 |
01-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the long mode interrupt/exception microcode handle an error code. |
5853:606b9525071d |
01-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the chks microop check for the right int descriptor type. |
5852:1a40b07bbc30 |
01-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Touch up the interrupt entering microcode. |
5846:66021eb985f5 |
01-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the microcode for the LODS instruction. |
5815:18ed7aa8e8e1 |
25-Jan-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the xadd instruction. |
5814:a9e8668557bf |
25-Jan-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the bswap instruction. |
5812:d12ff89c7692 |
25-Jan-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix a bug in the iret microcode. |
5685:a55b78e4b6d6 |
13-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the segment setting code in IRET, and make it restore the flags. |
5683:e1a1d8bba254 |
13-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the swapgs instruction. |
5680:39ae093fb4eb |
13-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement entering an interrupt in microcode. |
5661:443e6f925027 |
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Create a SeqOp class of microops and make Br one of them. |
5659:f4b9c344d1ca |
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement CPUID with a magical function instead of microcode. |
5590:2ff5831fd2eb |
09-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make far ret modify CS instead of some random selector. |
5543:3af77710f397 |
10-Sep-2008 |
Ali Saidi <saidi@eecs.umich.edu> |
style: Remove non-leading tabs everywhere they shouldn't be. Developers should configure their editors to not insert tabs |
5540:bf358d99eff7 |
03-Sep-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the microcode for sign/zero extending moves that use high byte registers. |
5453:5048e2840f39 |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the cpuid processor identifier return a real string. |
5448:67c8b7badec1 |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement and hook up STI and CLI instructions. |
5434:2f6dad874e14 |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a partial, sort of correct version of the protected mode variant of iret. |
5433:1b0b8e9ba6a9 |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Change how segment loading is performed. |
5432:e1e42f18d376 |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make pushes and pops use the stack size instead of the data size. |
5426:0bdcc60ccc45 |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add microops and supporting code to manipulate the whole rflags register. |
5423:536fb3cc5a9b |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Redo BSF. |
5420:dc0041a51920 |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make string instructions work when rcx=0. |
5418:501cb81c89df |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Bypass unaligned access support for register addressed MSRs. |
5415:5c28e3dbdc8e |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the implementation of BSF. |
5414:bed5152f6368 |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Bit scan forward/reverse were accidentally transposed. |
5413:809f33a926c4 |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix a byte register indexing issue in the sign extending move from memory microcode. |
5409:0343cd06df4f |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add in some support for the tsc register. |
5359:8c6ff200e4c1 |
26-Feb-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the INVLPG instruction and the TIA microop. |
5333:0e394c08dcbc |
23-Jan-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Optomize the bit scanning instruction microassembly a little. More can be done. |
5332:0e25e0b6982c |
22-Jan-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement and attach the BSR and BSF instructions. |
5331:8d8aaad0bc36 |
21-Jan-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fill out group17 in the decoder. |
5326:7e4cef0e528b |
12-Jan-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Redo the bit test instructions. |
5325:f55260052610 |
12-Jan-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the wrmsr instruction. |
5322:db50c4044662 |
12-Jan-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the general IO instructions dataSize. |
5307:e27f5a64f459 |
03-Dec-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Please excuse my dear Aunt Sally. (precedence bug) |
5306:79cedb731af5 |
02-Dec-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make sure the memory index is calculated using the address size for bit test instructions. |
5305:8b379ad9406d |
02-Dec-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix a copy/paste mistake where the bit test instructions were using an immediate where they should use a register. |
5302:a1c79b171e23 |
02-Dec-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the 0xA0-0xA3 versions of mov use the right sized immediates. |
5297:4e2607ff906f |
02-Dec-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix a copy paste error in the bts microcode. |
5296:5caa774215cd |
02-Dec-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement mov from control register. |
5295:5268691561b4 |
02-Dec-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: First crack at far returns. This is grossly approximate. |
5294:7222bdaed33b |
02-Dec-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Reorganize segmentation and implement segment selector movs. |
5292:a26311673ef0 |
02-Dec-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the LIDT instruction. |
5291:5d38610cff05 |
02-Dec-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the lgdt instruction. |
5243:4228b7b5704b |
12-Nov-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix a stupid typo where WRMSR and RDMSR were switched, and add a debug statement. |
5241:a6602acdd046 |
12-Nov-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the wrcr microop which writes a control register, and some control register work. |
5240:6dc723c9c6a9 |
12-Nov-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement some bit testing instructions. |
5239:0920dfb94514 |
12-Nov-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Change the meaning of the sext and zext width operand, and make sext set zext if the sign bit is 0. |
5179:9ea5593e01f2 |
22-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Use the cda microop where appropriate. The ENTER instruction still needs these. |
5176:43fb805e1b85 |
21-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Start using the stupd microop, and update statistics accordingly. |
5175:ee904e392de2 |
21-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the stupd microop ("store with update", not "stupid") and use it in ENTER. |
5174:73a760aa0129 |
19-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the PUSHF, POPF, SAHF, and LAHF instructions. |
5173:07204d59a328 |
19-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Impelement the HLT instruction and fix the "halt" microop. |
5171:eab735dc951d |
19-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the ENTER instruction. This could probably be optimized by cleaning up the indexing in the main loop. |
5167:3668fc87f144 |
19-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the string IO instructions, ins and outs. |
5166:d749d156ce52 |
19-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the undocumented SALC instruction which sets AL to 0xFF if CF=1 and 0x00 otherwise. |
5165:ce7b4b8a24c5 |
19-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the XLAT instruction. |
5164:c2124685af1d |
19-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the BOUND instruction. |
5161:e7334f2d7bef |
19-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the in/out instructions. These will still need support from the TLB and memory system. |
5160:ada1b67c97ab |
19-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the LOOP instructions. |
5158:8cf2433105ff |
19-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implemented the jrcx instruction. |
5151:dec27c6c2b3b |
12-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Added some new versions of MOV and a new argument type tag. |
5150:4b5a97744185 |
12-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implemented LODS. |
5149:356e00996637 |
12-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement MSR reads and writes and the wrsmr and rdmsr instructions. There are no priviledge checks, so these instructions will all work in all modes. |
5125:62bd932bcb0b |
03-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Distinguish between the rep and repe prefixes. STOS and MOVS only accept the rep prefix which always loops until rcx becomes 0. The other string instructions accept repe (same encoding as rep) and repne which also check the condition code flags each iteration. |
5123:cd30bb46e146 |
03-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix places where movfp was used incorrectly. |
5121:a5f3cfdc4ee5 |
03-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix x87 floating point stack register indexing. |
5119:a4469f2919f3 |
03-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Put ldst into the microcode (the earlier changeset didn't really). Also clean things up as much as possible so that faulting won't break an instruction. More microops which verify addresses are needed. |
5117:b422964a705c |
03-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix up the microcode for the FST and FSTP instructions. |
5114:edcdf9b908ec |
03-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add classes for the actual x86 faults. |
5112:fccb2f791196 |
03-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement MOVS |
5111:65afc8009c08 |
03-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement STOS. |
5084:675cb680830f |
19-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the fld, fst, and fstp instructions. |
5081:2ccce8600a9d |
19-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Put in stubs for x87, 64 bit and 128 bit SIMD instruction microcode. |
5077:4c25f95fa600 |
13-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix how ECF is computed in genFlags, and get rid of some duplicate code. |
5075:4ae876c5037d |
13-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Total overhaul of the division instructions and microops. |
5063:8eb72b1bd3c6 |
06-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Rework the multiplication microops so that they work like they would in the patent. |
5062:4c98f8cdcc11 |
06-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make signed multiplication do something different from unsigned. |
5059:33478a26f73e |
06-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add a square root microop and the SSE sqrt instruction. |
5058:be23162b7370 |
06-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add SSE comparison instructions and microops and move some FP microops to be with the other ones. |
5052:791ae1b04d72 |
05-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement an SSE xor microop and instruction. |
5048:59b695cf3799 |
05-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Hook in the fp arithmetic instructions. Stale python made it work before. |
5047:4a3593bec248 |
05-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement some SSE fp microops and instructions. |
5046:da031ef02439 |
05-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add some SSE floating point/integer conversion microops. |
5044:b5a2bcd3d9a3 |
05-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix a typo in the microassembly for the cqo instruction. |
5043:a69b7f532f79 |
05-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement idiv and propogate the mul corner case fix. |
5042:bc2c08abe249 |
05-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix a corner case where mul would overwrite an original register value it still needed. |
5031:53b9e86e652d |
29-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the movaps instruction. |
5030:bd8f65d4ac59 |
29-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the movsd instruction. |
5029:68c3f3be8c8a |
29-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the movlpd instruction. |
5010:e53f4e0bb2ac |
26-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Return values for some cpuid functions that match what my development machine returns. |
5009:78d53ea88c74 |
26-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the microassembler accept lines which are just labels. The labels on these lines will be associated with whatever the next microop is. |
5008:2d852642081e |
26-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make cpuid actually consider the eax parameter and return different values. |
5006:46bde2e856dd |
26-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement cmps (string compare) |
5005:a7d60f1aa908 |
26-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make shift instructions set some of the flags they're supposed to. The flag mechanism for microops needs to be fleshd out a little more to allow for custom flag calculation methods for certain microops. Shift is an example where the rules for calculating OF and CF are unique. |
4953:1181cf10e11e |
07-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implemented and hooked in SCAS (scan string) Fixed the asz assembler symbol. Adjusted the condion checks to have appropriate options. Implemented the SCAS microcode. Attached SCAS into the decoder. |
4868:99d4946469a1 |
04-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement microops and instructions that manipulate the flags register. |
4864:a78c58ce5499 |
04-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the cmpxchg instruction. |
4863:b6dacc9a39ff |
04-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Start implementing segmentation support. Make instructions observe segment prefixes, default segment rules, segment base addresses. Also fix some microcode and add sib and riprel "keywords" to the x86 specialization of the microassembler. |
4861:d73032e1dca0 |
04-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add the arch_prctl system call and fix up some microcoding. The arch_prctl system call is used to set and get the FS and GS segment bases. The FS segment is use for TLS, so glibc needs to be able to set it up. |
4819:4d21a72b55ed |
30-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Set up RIP relative LEA instructions operands correctly. |
4818:f05a634443c5 |
30-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement unsigned divide. The non-byte version ignores rdx which it shouldn't. |
4811:f4c050c1edeb |
30-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a stub CPUID function which is hardcode to return certain values. |
4810:27acbaf1d4e3 |
30-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Force jumps to use 64 bit operand size. |
4809:ee82bc15a483 |
30-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make instructions use pick, and implement/adjust some multiplication microops and instructions. |
4802:512e30d94584 |
30-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement LEAVE |
4798:85351424da98 |
29-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make logic instructions flag setting work. The instructions now ask for the appropriate flags to be set, and the microops do the "right thing" with the CF and OF flags, namely zero them. |
4797:f26c5c593b7a |
29-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make arithmetic instructions set the appropriate flags. |
4788:2128419a6dd2 |
29-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix popa and push with the stack pointer. POPA used st instead of ld, and it didn't skip rsp. push rsp needs to store the -original- value of the stack pointer. |
4770:52a479af7b14 |
27-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix pc relative versions of add and subtract. |
4769:3e3254436181 |
27-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement rotate-by-one instructions, and make register rotates use registers. |
4768:ce8d118a1fa7 |
27-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement shift-by-one instructions, and make register shifts use registers. |
4764:3cc6c2bddf1c |
27-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Implement NOT |
4755:b7b9c2e654a5 |
24-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fix immediate shifts. Implement register shifts. |
4754:6550874ebca8 |
24-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fix immediate rotates and add register ones. |
4753:0b7f5f77ee84 |
24-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Clean out part of an old comment. |
4752:fc6ee2904dad |
24-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Implement cmov. |
4751:e1f5eee86899 |
24-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Implement cdqe and cqo, which are also called cbw and cwde, and cwd and cdq respectively, depending on the operand size. |
4750:fb23e50d24cd |
24-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Implement setcc. |
4749:1ee5f5cd8001 |
24-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Get rid of an old comment. |
4748:4e34bb56cfd4 |
24-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Get rid of an old comment |
4747:0971cd0cf1da |
23-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Implement pusha, popa, three operand imul, hook them into the decoder, and clean up the decoder a little. |
4746:7960a6867f55 |
22-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Make the operand size reflect the size specifier on the operand tags, and implement NEG |
4734:a71b1b6b0678 |
21-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Implemented and hooked in xchg, rotate with carry, and ret instructions |
4732:9fdd1a5ab692 |
21-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fixed the distinction between far and near versions of jmp, call and ret. Implemented some shifts, rotates, and pushes. |
4730:77e3e9b15e7e |
20-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Implement UD2 and replace the place holder in the decoder. |
4728:d60b98171bef |
20-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Implement adc and sbb instructions and microops. |
4727:8a6b7746df57 |
20-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Implement the rest of the conditional jump instructions and hook them into the decoder. |
4725:441c280b5936 |
20-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Define and fill out a lot of different instructions and instruction versions. Added two of the shift microops. |
4723:b663328cf5a1 |
20-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Comment, implement, fix, and trim the move microassembly. |
4722:0659a6c26d3c |
20-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Implement jnbe. |
4721:0399ca728102 |
20-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Appended _NEAR to the near version of call and return. |
4719:6e85e2d8b07c |
20-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Implement the increment and decrement instructions, and the two operand form of signed multiplication. |
4712:79b4c64296ce |
19-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
x86 fixes Make the emulation environment consider the rex prefix. Implement and hook in forms of j, jmp, cmp, syscall, movzx Added a format for an instruction to carry a call to the SE mode syscalls system Made memory instructions which refer to the rip do so directly Made the operand size overridable in the microassembly Made the "ext" field of register operations 16 bits to hold a sparse encoding of flags to set or conditions to predicate on Added an explicit "rax" operand for the syscall format Implemented syscall returns. |
4709:884a54d8d22f |
18-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Implement near returns. |
4705:7fc758c834c0 |
18-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fix a comment to refer to the right type of instruction. |
4703:4158cad49287 |
18-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Implement some forms of add. |
4697:8d9b2d777c61 |
18-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Implement the x86 nop to be a "fault" microop which returns "NoFault". |
4692:8536c20cdc5b |
17-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Implemented jnz. |
4691:52ec6c3573f6 |
17-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Use limm to set up immediate value for subtract instruction. |
4690:1f1a4393c47c |
17-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Implement the jz instruction. |
4689:51d601a6be95 |
17-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Make "test" set some condition codes. It still needs to zero the overflow and carry flags to be correct. |
4620:5acc50eeacf7 |
21-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Make symbols for regular registers. |
4617:42cb778fbe66 |
21-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Use the new symbols to clean up the assembler. |
4609:29b5f66fed1a |
20-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Implement rip relative addressing and put in some missing loads and stores. |
4601:38c989d15fef |
20-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Make memory instructions work better, add more macroop implementations, add an lea microop, move EmulEnv into it's own .cc and .hh. |
4595:5162e9a7728c |
19-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
More faithfulness to what instructions should work in what modes, and added the MOVSXD instruction. |
4592:520664dfb26f |
19-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Make instructions that are illegal in 64 bit mode not do the wrong thing in 64 bit mode. Also add in more versions of PUSH and POP, and a version of near CALL. |
4589:97c65c2bd53f |
19-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Get rid of the commented out versions of macroops which have been reimplemented. The comments are basically functioning like a todo list. |
4587:2c9a2534a489 |
19-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Get rid of the immediate and displacement components of the EmulEnv struct and use them directly out of the instruction. The extra copies are conceptually realistic but are just innefficient as implemented. Also don't use the zeroeth microcode register for general storage since it's now the zero register, and implement a load and a store microops. |
4575:d0017efdfa02 |
14-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Implement a handful more instructions and differentiate macroops based on the operand types they expect. |
4570:24eda664bafa |
14-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Make POP special case its dataSize to default to 64 bits in 64 bit mode. |
4562:ebc2d9545634 |
13-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Partially implement "POP" |
4545:03725ca8b7ea |
12-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add in MOV instructions. |
4529:5f32651bc10e |
08-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Move the microcode assembly to a python package instead of isa_parser files. Also, the code is now a single string which runs through the microcode assembler rather than docstrings associated with classes named after each architectural level instruction. |