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> |
14277:73d5e60b3a7c |
06-Sep-2019 |
Gabe Black <gabeblack@google.com> |
arch, x86: Rework the debug faults and microops.
This makes the non-fatal microops advance the PC, and adds missing functions. The *_once Faults now also can be run once per *something*. They would previously be run once per Fault invoke function which is common to all M5WarnOnceFaults. The warn_once microop will now warn once per message.
Change-Id: I05974b93f3b2700077a411b243679c2ff0e8c2cb Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/20739 Reviewed-by: Gabe Black <gabeblack@google.com> Reviewed-by: Brandon Potter <Brandon.Potter@amd.com> 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> |
14164:9683bde0d48a |
14-Aug-2019 |
Gabe Black <gabeblack@google.com> |
x86: Make unsuccessful CPUID instructions zero the result.
The previous implementation left the registers unmodified which is technically correct since there is no defined behavior in that case or a fault to raise. That would make what happened when the following code consumed the result unpredictable because it would depend on what junk values were left in the registers. This was originally not a problem since the space of supported functions were tightly packed, but someone added a new function with a gap without adjusting this behavior.
This change makes CPUID zero out RAX, RBX, RCX, and RDX when it fails. That should be more predictable and cause less flakey failures.
Change-Id: If6ffb17c2969d34aff1600c0ffc32333d0b9be44 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/20168 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Pouya Fotouhi <pfotouhi@ucdavis.edu> Maintainer: Gabe Black <gabeblack@google.com> Tested-by: kokoro <noreply+kokoro@google.com> |
14087:ca8b1211541c |
12-Jul-2019 |
Hoa Nguyen <hoanguyen@ucdavis.edu> |
arch-x86: add unconditional tag to calls/returns
The branch predictor checks whether an instruction is unconditional branch before adding it or checking the RAS. With this change, the RAS is significantly more effective for short running x86 workloads.
Change-Id: I60af5f2f583b898ad77f79f4b0478d6cda88fc21 Signed-off-by: Hoa Nguyen <hoanguyen@ucdavis.edu> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19448 Maintainer: Jason Lowe-Power <jason@lowepower.com> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Gabe Black <gabeblack@google.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> |
13675:afeab32b3655 |
24-Jan-2019 |
Andreas Sandberg <andreas.sandberg@arm.com> |
python: Replace dict.has_key with 'key in dict'
Python 3 has removed dict.has_key in favour of 'key in dict'.
Change-Id: I9852a5f57d672bea815308eb647a0ce45624fad5 Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/15987 Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com> |
13613:a19963be12ca |
20-Nov-2018 |
Gabe Black <gabeblack@google.com> |
x86: Stop using/defining some ISA specific register types.
These have been replaced with the generic RegVal type.
Change-Id: I75c1134212067dea43aa0903d813633e06f3d6c6 Reviewed-on: https://gem5-review.googlesource.com/c/14476 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com> |
13611:c8b7847b4171 |
19-Nov-2018 |
Gabe Black <gabeblack@google.com> |
arch: cpu: Rename *FloatRegBits* to *FloatReg*.
Now that there's no plain FloatReg, there's no reason to distinguish FloatRegBits with a special suffix since it's the only way to read or write FP registers.
Change-Id: I3a60168c1d4302aed55223ea8e37b421f21efded Reviewed-on: https://gem5-review.googlesource.com/c/14460 Reviewed-by: Brandon Potter <Brandon.Potter@amd.com> Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Maintainer: Gabe Black <gabeblack@google.com> |
13441:d70ffc3dabf0 |
20-Nov-2018 |
Gabe Black <gabeblack@google.com> |
x86: Get rid of a problematic DPRINTF in PremFp.
This DPRINTF shouldn't be necessary since it shows the operands and results of the instruction which the trace should already make available. Also by passing the destination register to DPRINTF, the ISA parser will assume that it's also a source when tracking dependencies.
Change-Id: I820387c82578bdbb8d2e3d91652a6c0185077f54 Reviewed-on: https://gem5-review.googlesource.com/c/14475 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Gabe Black <gabeblack@google.com> |
12707:7819f067a128 |
23-May-2018 |
Gabe Black <gabeblack@google.com> |
x86: Add op classes to the MediaOps.
The ISA parser had been assuming these microops were all FloatAddOp which is usually not correct.
Change-Id: Ic54881d16f16b50c3d6a8c74b94bff9ae3b1f43e Reviewed-on: https://gem5-review.googlesource.com/10541 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com> Reviewed-by: Tariq Azmy <tariqslayer01@gmail.com> Maintainer: Anthony Gutierrez <anthony.gutierrez@amd.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> |
12682:dfc3bb0db088 |
13-Apr-2018 |
Gabe Black <gabeblack@google.com> |
x86: Add a ld/st microop flag for marking an access uncacheable.
This percolates down to the memory request object which will have its "UNCACHEABLE" flag set.
Change-Id: Ie73f4249bfcd57f45a473f220d0988856715a9ce Reviewed-on: https://gem5-review.googlesource.com/9881 Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Anthony Gutierrez <anthony.gutierrez@amd.com> |
12588:c007da6c777a |
29-Jan-2018 |
Gabe Black <gabeblack@google.com> |
x86: Add bitfields which can gather/scatter bases and limits.
Add bitfields which can gather/scatter base and limit fields within "normal" segment descriptors, and in TSS descriptors which have the same bitfields in the same positions for those two values.
This centralizes the code which manages those bitfields and makes it less likely that a local implementation will be buggy.
Change-Id: I9809aa626fc31388595c3d3b225c25a0ec6a1275 Reviewed-on: https://gem5-review.googlesource.com/7661 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> |
12407:c24d0c2d816d |
20-Dec-2017 |
Gabe Black <gabeblack@google.com> |
riscv,x86: Stop using the arch Nop machine instruction unnecessarily.
That particular ExtMachInst is a convenient placeholder, but a value of 0 in RISCV or a static uninitialized ExtMachInst (which will therefore be all zeroes) on x86 works just as well, and removes the need for an ISA specific constant.
Also, the idea of a universal Nop doesn't always make sense since it could be that what, exactly, doesn't do anything depends on context which would be lost on a constant value of an ExtMachInst. For instance, the value of an ExtMachInst that makes sense might depend on what mode the CPU was in, etc.
Change-Id: I1f1a43a5c607a667e11b79bcf6e059e4f7141b3f Reviewed-on: https://gem5-review.googlesource.com/6825 Reviewed-by: Gabe Black <gabeblack@google.com> Reviewed-by: Alec Roelke <ar4jc@virginia.edu> Maintainer: Gabe Black <gabeblack@google.com> |
12392:e0dbdf30a2a5 |
13-Dec-2017 |
Jason Lowe-Power <jason@lowepower.com> |
misc: Updates for gcc7.2 for x86
GCC 7.2 is much stricter than previous GCC versions. The following changes are needed:
* There is now a warning if there is an implicit fallthrough between two case statments. C++17 adds the [[fallthrough]]; declaration. However, to support non C++17 standards (i.e., C++11), we use M5_FALLTHROUGH. M5_FALLTHROUGH checks for [[fallthrough]] compliant C++17 compiler and if that doesn't exist, it defaults to nothing (no older compilers generate warnings). * The above resulted in a couple of bugs that were found. This is noted in the review request on gerrit. * throw() for dynamic exception specification is deprecated * There were a couple of new uninitialized variable warnings * Can no longer perform bitwise operations on a bool. * Must now include <functional> for std::function * Compiler bug for void* lambda. Changed to auto as work around. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82878
Change-Id: I5d4c782a4e133fa4cdb119e35d9aff68c6e2958e Signed-off-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-on: https://gem5-review.googlesource.com/5802 Reviewed-by: 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> |
12386:2bf5fb25a5f1 |
13-Dec-2017 |
Gabe Black <gabeblack@google.com> |
arm,sparc,x86,base,cpu,sim: Replace the Twin(32|64)_t types with.
Replace them with std::array<>s.
Change-Id: I76624c87a1cd9b21c386a96147a18de92b8a8a34 Reviewed-on: https://gem5-review.googlesource.com/6602 Maintainer: Gabe Black <gabeblack@google.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> |
12384:481add71d2e4 |
12-Dec-2017 |
Gabe Black <gabeblack@google.com> |
x86: Rework how "split" loads/stores are handled.
Explicitly separate the way the data is represented in the underlying representation from how it's represented in the instruction.
In order to make the ISA parser happy, the Mem operand needs to have a single, particular type. To handle that with scalar types, we just used uint64_ts and then worked with values that were smaller than the maximum we could hold. To work with these new array values, we also use an underlying uint64_t for each element.
To make accessing the underlying memory system more natural, when we go to actually read or write values, we translate the access into an array of the actual, correct underlying type. That way we don't have non-exact asserts which confuse gcc, or weird endianness conversion which assumes that the data should be flipped 8 bytes at a time.
Because the functions involved are generally inline, the syntactic niceness should all boil off, and the final implementation in the binary should be simple and efficient for the given data types.
Change-Id: I14ce7a2fe0dc2cbaf6ad4a0d19f743c45ee78e26 Reviewed-on: https://gem5-review.googlesource.com/6582 Reviewed-by: Gabe Black <gabeblack@google.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> |
12334:e0ab29a34764 |
30-Nov-2017 |
Gabe Black <gabeblack@google.com> |
misc: Rename misc.(hh|cc) to logging.(hh|cc)
These files aren't a collection of miscellaneous stuff, they're the definition of the Logger interface, and a few utility macros for calling into that interface (panic, warn, etc.).
Change-Id: I84267ac3f45896a83c0ef027f8f19c5e9a5667d1 Reviewed-on: https://gem5-review.googlesource.com/6226 Reviewed-by: Brandon Potter <Brandon.Potter@amd.com> Maintainer: Gabe Black <gabeblack@google.com> |
12236:126ac9da6050 |
04-Nov-2017 |
Gabe Black <gabeblack@google.com> |
alpha,arm,mips,power,riscv,sparc,x86: Merge exec decl templates.
In the ISA instruction definitions, some classes were declared with execute, etc., functions outside of the main template because they had CPU specific signatures and would need to be duplicated with each CPU plugged into them. Now that the instructions always just use an ExecContext, there's no reason for those templates to be separate. This change folds those templates together.
Change-Id: I13bda247d3d1cc07c0ea06968e48aa5b4aace7fa Reviewed-on: https://gem5-review.googlesource.com/5401 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Alec Roelke <ar4jc@virginia.edu> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12234:78ece221f9f5 |
02-Nov-2017 |
Gabe Black <gabeblack@google.com> |
alpha,arm,mips,power,riscv,sparc,x86,isa: De-specialize ExecContexts.
The ISA parser used to generate different copies of exec functions for each exec context class a particular CPU wanted to use. That's since been changed so that those functions take a pointer to the base ExecContext, so the code which would generate those extra functions can be removed, and some functions which used to be templated on an ExecContext subclass can be untemplated, or minimally less templated.
Now that some functions aren't going to be instantiated multiple times with different signatures, there are also opportunities to collapse templates and make many instruction definitions simpler within the parser. Since those changes will be less mechanical, they're left for later changes and will probably be done in smaller increments.
Change-Id: I0015307bb02dfb9c60380b56d2a820f12169ebea Reviewed-on: https://gem5-review.googlesource.com/5381 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12205:f29b67179a96 |
26-Sep-2017 |
Bjoern A. Zeeb <baz21@cam.ac.uk> |
arch-x86: fix CondInst decoding for MOV to Control Registers
MOV Rd,Cd is MR encoded but the control register is operand 2 not operand 1 hence this needs to be MODRM_REG not MODRM_RM. While MOV Cd,Rd is RM encoded registers are also swapped, so it also needs to be MODRM_REG as well (as it already correctly is).
This fixes incorrect UD2 reportings leading to invalid traps reported in O3 on X86 FS introduced with 4e939a7 .
Change-Id: Ib33c8ba87b00e0264d33da44fff64ed9e4d2d9d8 Reviewed-on: https://gem5-review.googlesource.com/4861 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
12170:efbf270e389d |
24-Aug-2017 |
Gabe Black <gabeblack@google.com> |
x86: Use the new CondInst format for moves to/from control registers.
The condition is whether the control register index is valid.
Change-Id: I8a225fcfd4955032b5bbf7d3392ee5bcc7d6bc64 Reviewed-on: https://gem5-review.googlesource.com/4581 Reviewed-by: Michael LeBeane <Michael.Lebeane@amd.com> Maintainer: Gabe Black <gabeblack@google.com> |
12169:6d567ca2553b |
24-Aug-2017 |
Gabe Black <gabeblack@google.com> |
x86: Add a "CondInst" format for conditionally decoded instructions.
A condition can be specified which will tell the decoder whether to return the instruction being requested, or, if the condition fails, UD2.
Change-Id: I0f1c075deb10754ce1dd88be1726a196294e41fd Reviewed-on: https://gem5-review.googlesource.com/4580 Reviewed-by: Michael LeBeane <Michael.Lebeane@amd.com> Maintainer: Gabe Black <gabeblack@google.com> |
12106:7784fac1b159 |
05-Apr-2017 |
Rekai Gonzalez-Alberquilla <Rekai.GonzalezAlberquilla@arm.com> |
cpu: Simplify the rename interface and use RegId
With the hierarchical RegId there are a lot of functions that are redundant now.
The idea behind the simplification is that instead of having the regId, telling which kind of register read/write/rename/lookup/etc. and then the function panic_if'ing if the regId is not of the appropriate type, we provide an interface that decides what kind of register to read depending on the register type of the given regId.
Change-Id: I7d52e9e21fc01205ae365d86921a4ceb67a57178 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> [ Fix RISCV build issues ] Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/2702 |
12104:edd63f9c6184 |
05-Apr-2017 |
Nathanael Premillieu <nathanael.premillieu@arm.com> |
arch, cpu: Architectural Register structural indexing
Replace the unified register mapping with a structure associating a class and an index. It is now much easier to know which class of register the index is referring to. Also, when adding a new class there is no need to modify existing ones.
Change-Id: I55b3ac80763702aa2cd3ed2cbff0a75ef7620373 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> [ Fix RISCV build issues ] Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/2700 |
12045:31d9a81ba286 |
24-May-2017 |
Gabe Black <gabeblack@google.com> |
x86: Rework how VEX prefixes are decoded.
Remove redundant information from the ExtMachInst, hash the vex information to ensure the decode cache works properly, print the vex info when printing an ExtMachInst, consider the vex info when comparing two ExtMachInsts, fold the info from the vex prefixes into existing settings, remove redundant decode code, handle vex prefixes one byte at a time and don't bother building up the entire prefix, and let instructions that care about vex use it in their implementation, instead of developing an entire parallel decode tree.
This also eliminates the error prone vex immediate decode table which was incomplete and would result in an out of bounds access for incorrectly encoded instructions or when the CPU was mispeculating, as it was (as far as I can tell) redundant with the tables that already existed for two and three byte opcodes. There were differences, but I think those may have been mistakes based on the documentation I found.
Also, in 32 bit mode, the VEX prefixes might actually be LDS or LES instructions which are still legal in that mode. A valid VEX prefix would look like an LDS/LES with an otherwise invalid modrm encoding, so use that as a signal to abort processing the VEX and turn the instruction into an LES/LDS as appropriate.
Change-Id: Icb367eaaa35590692df1c98862f315da4c139f5c Reviewed-on: https://gem5-review.googlesource.com/3501 Reviewed-by: Joe Gross <joe.gross@amd.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Anthony Gutierrez <anthony.gutierrez@amd.com> |
12025:fbfb3dd3f324 |
15-May-2017 |
Gabe Black <gabeblack@google.com> |
x86: Fix the multiplication microops.
If the operands were 64 bit, an intermediate calculation could lose a carry bit. This change rearranges that intermediate calculation if the operand width is large, and reworks the microop implementation in general in an attempt to make it easier to understand.
Change-Id: Ib36333f3f2695a33cd9623e43682de22ebd2e7ea Reviewed-on: https://gem5-review.googlesource.com/3381 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com> Maintainer: Anthony Gutierrez <anthony.gutierrez@amd.com> |
11877:5ea85692a53e |
20-Jul-2015 |
Brandon Potter <brandon.potter@amd.com> |
syscall_emul: [patch 13/22] add system call retry capability
This changeset adds functionality that allows system calls to retry without affecting thread context state such as the program counter or register values for the associated thread context (when system calls return with a retry fault).
This functionality is needed to solve problems with blocking system calls in multi-process or multi-threaded simulations where information is passed between processes/threads. Blocking system calls can cause deadlock because the simulator itself is single threaded. There is only a single thread servicing the event queue which can cause deadlock if the thread hits a blocking system call instruction.
To illustrate the problem, consider two processes using the producer/consumer sharing model. The processes can use file descriptors and the read and write calls to pass information to one another. If the consumer calls the blocking read system call before the producer has produced anything, the call will block the event queue (while executing the system call instruction) and deadlock the simulation.
The solution implemented in this changeset is to recognize that the system calls will block and then generate a special retry fault. The fault will be sent back up through the function call chain until it is exposed to the cpu model's pipeline where the fault becomes visible. The fault will trigger the cpu model to replay the instruction at a future tick where the call has a chance to succeed without actually going into a blocking state.
In subsequent patches, we recognize that a syscall will block by calling a non-blocking poll (from inside the system call implementation) and checking for events. When events show up during the poll, it signifies that the call would not have blocked and the syscall is allowed to proceed (calling an underlying host system call if necessary). If no events are returned from the poll, we generate the fault and try the instruction for the thread context at a distant tick. Note that retrying every tick is not efficient.
As an aside, the simulator has some multi-threading support for the event queue, but it is not used by default and needs work. Even if the event queue was completely multi-threaded, meaning that there is a hardware thread on the host servicing a single simulator thread contexts with a 1:1 mapping between them, it's still possible to run into deadlock due to the event queue barriers on quantum boundaries. The solution of replaying at a later tick is the simplest solution and solves the problem generally. |
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> |
11711:8565c34ec32e |
21-Nov-2016 |
Tony Gutierrez <anthony.gutierrez@amd.com> |
x86: fix issue with casting in Cvtf2i
UBSAN flags this operation because it detects that arg is being cast directly to an unsigned type, argBits. this patch fixes this by first casting the value to a signed int type, then reintrepreting the raw bits of the signed int into argBits. |
11703:08b78e0a3717 |
26-Oct-2016 |
Michael LeBeane <michael.lebeane@amd.com> |
dev: Add m5 op to toggle synchronization for dist-gem5. This patch adds the ability for an application to request dist-gem5 to begin/ end synchronization using an m5 op. When toggling on sync, all nodes agree on the next sync point based on the maximum of all nodes' ticks. CPUs are suspended until the sync point to avoid sending network messages until sync has been enabled. Toggling off sync acts like a global execution barrier, where all CPUs are disabled until every node reaches the toggle off point. This avoids tricky situations such as one node hitting a toggle off followed by a toggle on before the other nodes hit the first toggle off. |
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. |
11328:9512d2e25f14 |
06-Feb-2016 |
Steve Reinhardt <steve.reinhardt@amd.com> |
arch, x86: add support for arrays as memory operands
Although the cache models support wider accesses, the ISA descriptions assume that (for the most part) memory operands are integer types, which makes it difficult to define instructions that do memory accesses larger than 64 bits.
This patch adds some generic support for memory operands that are arrays of uint64_t, and specifically a 'u2qw' operand type for x86 that is an array of 2 uint64_ts (128 bits). This support is unused at this point, but will be needed shortly for cmpxchg16b. Ideally the 128-bit SSE memory accesses will also be rewritten to use this support.
Support for 128-bit accesses could also have been added using the gcc __int128_t extension, which would have been less disruptive. However, although clang also supports __int128_t, it's still non-standard. Also, more importantly, this approach creates a path to defining 256- and 512-byte operands as well, which will be useful for eventual AVX support. |
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'. |
11303:f694764d656d |
17-Jan-2016 |
Steve Reinhardt <steve.reinhardt@amd.com> |
cpu. arch: add initiateMemRead() to ExecContext interface
For historical reasons, the ExecContext interface had a single function, readMem(), that did two different things depending on whether the ExecContext supported atomic memory mode (i.e., AtomicSimpleCPU) or timing memory mode (all the other models). In the former case, it actually performed a memory read; in the latter case, it merely initiated a read access, and the read completion did not happen until later when a response packet arrived from the memory system.
This led to some confusing things, including timing accesses being required to provide a pointer for the return data even though that pointer was only used in atomic mode.
This patch splits this interface, adding a new initiateMemRead() function to the ExecContext interface to replace the timing-mode use of readMem().
For consistency and clarity, the readMemTiming() helper function in the ISA definitions is renamed to initiateMemRead() as well. For x86, where the access size is passed in explicitly, we can also get rid of the data parameter at this level. For other ISAs, where the access size is determined from the type of the data parameter, we have to keep the parameter for that purpose. |
11289:ab19693da8c9 |
07-Jan-2016 |
Gabor Dozsa <gabor.dozsa@arm.com> |
pseudo inst,util: Add optional key to initparam pseudo instruction
The key parameter can be used to read out various config parameters from within the simulated software. |
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. |
10924:d02e9c239892 |
17-Jul-2015 |
Nilay Vaish <nilay@cs.wisc.edu> |
x86: decode instructions with vex prefix
This patch updates the x86 decoder so that it can decode instructions with vex prefix. It also updates the isa with opcodes from vex opcode maps 1, 2 and 3. Note that none of the instructions have been implemented yet. The implementations would be provided in due course of time. |
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> |
10805:f2c472d4ff9c |
29-Apr-2015 |
Nilay Vaish <nilay@cs.wisc.edu> |
x86: change divide-by-zero fault to divide-error Same exception is raised whether division with zero is performed or the quotient is greater than the maximum value that the provided space can hold. Divide-by-Zero is the AMD terminology, while Divide-Error is Intel's. |
10784:2f1a0f6d5d77 |
13-Apr-2015 |
Nilay Vaish <nilay@cs.wisc.edu> |
x86: implements x87 mult/div instructions |
10773:16643e7b322a |
03-Apr-2015 |
Lena Olson <lena@cs.wisc.edu> |
x86: fix debug trace output for mwait
When running with the Exec flag, the mwait instruction attempted to print out its source registers, which were never actually initialized. This led to sporadic assertion failures when the value stored there was invalid.
Committed by: Nilay Vaish <nilay@cs.wisc.edu> |
10760:8f5993cfa916 |
23-Mar-2015 |
Steve Reinhardt <steve.reinhardt@amd.com> |
mem: rename Locked/LOCKED to LockedRMW/LOCKED_RMW
Makes x86-style locked operations even more distinct from LLSC operations. Using "locked" by itself should be obviously ambiguous now. |
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 |
10593:a39de7b8d2c9 |
04-Dec-2014 |
Gabe Black <gabeblack@google.com> |
x86: Rework opcode parsing to support 3 byte opcodes properly.
Instead of counting the number of opcode bytes in an instruction and recording each byte before the actual opcode, we can represent the path we took to get to the actual opcode byte by using a type code. That has a couple of advantages. First, we can disambiguate the properties of opcodes of the same length which have different properties. Second, it reduces the amount of data stored in an ExtMachInst, making them slightly easier/faster to create and process. This also adds some flexibility as far as how different types of opcodes are handled, which might come in handy if we decide to support VEX or XOP instructions.
This change also adds tables to support properly decoding 3 byte opcodes. Before we would fall off the end of some arrays, on top of the ambiguity described above.
This change doesn't measureably affect performance on the twolf benchmark. |
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. |
10529:05b5a6cf3521 |
06-Nov-2014 |
Marc Orr <morr@cs.wisc.edu> |
x86 isa: This patch attempts an implementation at mwait.
Mwait works as follows: 1. A cpu monitors an address of interest (monitor instruction) 2. A cpu calls mwait - this loads the cache line into that cpu's cache. 3. The cpu goes to sleep. 4. When another processor requests write permission for the line, it is evicted from the sleeping cpu's cache. This eviction is forwarded to the sleeping cpu, which then wakes up.
Committed by: Nilay Vaish <nilay@cs.wisc.edu> |
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". |
10341:0b4d10f53c2d |
03-Sep-2014 |
Mitch Hayenga <mitch.hayenga@arm.com> |
x86: Flag instructions that call suspend as IsQuiesce
The o3 cpu relies upon instructions that suspend a thread context being flagged as "IsQuiesce". If they are not, unpredictable behavior can occur. This patch fixes that for the x86 ISA. |
10313:01dda09b93e5 |
01-Sep-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
x86: set op class of two fp instructions This patch sets op class of two fp instructions: movfp and pop x87 stack as IntAluOp since these instructions do not make use of the fp alu. |
10196:be0e1724eb39 |
09-May-2014 |
Curtis Dunham <Curtis.Dunham@arm.com> |
arch: teach ISA parser how to split code across files
This patch encompasses several interrelated and interdependent changes to the ISA generation step. The end goal is to reduce the size of the generated compilation units for instruction execution and decoding so that batch compilation can proceed with all CPUs active without exhausting physical memory.
The ISA parser (src/arch/isa_parser.py) has been improved so that it can accept 'split [output_type];' directives at the top level of the grammar and 'split(output_type)' python calls within 'exec {{ ... }}' blocks. This has the effect of "splitting" the files into smaller compilation units. I use air-quotes around "splitting" because the files themselves are not split, but preprocessing directives are inserted to have the same effect.
Architecturally, the ISA parser has had some changes in how it works. In general, it emits code sooner. It doesn't generate per-CPU files, and instead defers to the C preprocessor to create the duplicate copies for each CPU type. Likewise there are more files emitted and the C preprocessor does more substitution that used to be done by the ISA parser.
Finally, the build system (SCons) needs to be able to cope with a dynamic list of source files coming out of the ISA parser. The changes to the SCons{cript,truct} files support this. In broad strokes, the targets requested on the command line are hidden from SCons until all the build dependencies are determined, otherwise it would try, realize it can't reach the goal, and terminate in failure. Since build steps (i.e. running the ISA parser) must be taken to determine the file list, several new build stages have been inserted at the very start of the build. First, the build dependencies from the ISA parser will be emitted to arch/$ISA/generated/inc.d, which is then read by a new SCons builder to finalize the dependencies. (Once inc.d exists, the ISA parser will not need to be run to complete this step.) Once the dependencies are known, the 'Environments' are made by the makeEnv() function. This function used to be called before the build began but now happens during the build. It is easy to see that this step is quite slow; this is a known issue and it's important to realize that it was already slow, but there was no obvious cause to attribute it to since nothing was displayed to the terminal. Since new steps that used to be performed serially are now in a potentially-parallel build phase, the pathname handling in the SCons scripts has been tightened up to deal with chdir() race conditions. In general, pathnames are computed earlier and more likely to be stored, passed around, and processed as absolute paths rather than relative paths. In the end, some of these issues had to be fixed by inserting serializing dependencies in the build.
Minor note: For the null ISA, we just provide a dummy inc.d so SCons is never compelled to try to generate it. While it seems slightly wrong to have anything in src/arch/*/generated (i.e. a non-generated 'generated' file), it's by far the simplest solution. |
10184:bbfa3152bdea |
09-May-2014 |
Curtis Dunham <Curtis.Dunham@arm.com> |
arch: remove inline specifiers on all inst constrs, all ISAs
With (upcoming) separate compilation, they are useless. Only link-time optimization could re-inline them, but ideally feedback-directed optimization would choose to do so only for profitable (i.e. common) instructions. |
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. |
10042:d4405a6bcc5a |
27-Jan-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
x86: correct error in emms 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'. |
9921:ee049bfce978 |
15-Oct-2013 |
Yasuko Eckert <yasuko.eckert@amd.com> |
arch/x86: add support for explicit CC register file
Convert condition code registers from being specialized ("pseudo") integer registers to using the recently added CC register class.
Nilay Vaish also contributed to this patch. |
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. |
9765:da0e0df0ba97 |
18-Jun-2013 |
Andreas Sandberg <andreas@sandberg.pp.se> |
x86: Add support for maintaining the x87 tag word
The current implementation of the x87 never updates the x87 tag word. This is currently not a big issue since the simulated x87 never checks for stack overflows, however this becomes an issue when switching between a virtualized CPU and a simulated CPU. This changeset adds support, which is enabled by default, for updating the tag register to every floating point microop that updates the stack top using the spm mechanism.
The new tag words is generated by the helper function X86ISA::genX87Tags(). This function is currently limited to flagging a stack position as valid or invalid and does not try to distinguish between the valid, zero, and special states. |
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. |
9699:76828cbe5de4 |
21-May-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
x86: add op class for int and fp microops in isa description Currently all the integer microops are marked as IntAluOp and the floating point microops are marked as FloatAddOp. This patch adds support for marking different microops differently. Now IntMultOp, IntDivOp, FloatDivOp, FloatMultOp, FloatCvtOp, FloatSqrtOp classes will be used as well. This will help in providing different latencies for different op class. |
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. |
9557:8666e81607a6 |
19-Feb-2013 |
Andreas Hansson <andreas.hansson@arm.com> |
scons: Fix warnings issued by clang 3.2svn (XCode 4.6)
This patch fixes the warnings that clang3.2svn emit due to the "-Wall" flag. There is one case of an uninitialised value in the ARM neon ISA description, and then a whole range of unused private fields that are pruned. |
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 |
9457:a4739b6f799d |
08-Jan-2013 |
LluÃs Vilanova <vilanova@ac.upc.edu> |
util: add m5_fail op.
Used as a command in full-system scripts helps the user ensure the benchmarks have finished successfully.
For example, one can use:
/path/to/benchmark args || /sbin/m5 fail 1
and thus ensure gem5 will exit with an error if the benchmark fails. |
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. |
9212:dc386ccc1db9 |
11-Sep-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
X86: make use of register predication The patch introduces two predicates for condition code registers -- one tests if a register needs to be read, the other tests whether a register needs to be written to. These predicates are evaluated twice -- during construction of the microop and during its execution. Register reads and writes are elided depending on how the predicates evaluate. |
9211:46c3a74952ec |
11-Sep-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
x86: Add a separate register for D flag bit The D flag bit is part of the cc flag bit register currently. But since it is not being used any where in the implementation, it creates an unnecessary dependency. Hence, it is being moved to a separate register. |
9038:d7ddf3266d46 |
04-Jun-2012 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Ensure that the CPUID instruction always writes its outputs.
The CPUID instruction was implemented so that it would only write its results if the instruction was successful. This works fine on the simple CPU where unwritten registers retain their old values, but on a CPU like O3 with renaming this is broken. The instruction needs to write the old values back into the registers explicitly if they aren't being changed. |
9023:e9201a7bce59 |
26-May-2012 |
Gabe Black <gblack@eecs.umich.edu> |
CPU: Merge the predecoder and decoder.
These classes are always used together, and merging them will give the ISAs more flexibility in how they cache things and manage the process. |
9022:bb25e7646c41 |
25-May-2012 |
Gabe Black <gblack@eecs.umich.edu> |
ISA: Make the decode function part of the ISA's decoder. |
9010:7891b96e1526 |
22-May-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
X86: Split Condition Code register This patch moves the ECF and EZF bits to individual registers (ecfBit and ezfBit) and the CF and OF bits to cfofFlag registers. This is being done so as to lower the read after write dependencies on the the condition code register. Ultimately we will have the following registers [ZAPS], [OF], [CF], [ECF], [EZF] and [DF]. Note that this is only one part of the solution for lowering the dependencies. The other part will check whether or not the condition code register needs to be actually read. This would be done through a separate patch. |
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. |
8946:fb6c89334b86 |
14-Apr-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
clang/gcc: Fix compilation issues with clang 3.0 and gcc 4.6
This patch addresses a number of minor issues that cause problems when compiling with clang >= 3.0 and gcc >= 4.6. Most importantly, it avoids using the deprecated ext/hash_map and instead uses unordered_map (and similarly so for the hash_set). To make use of the new STL containers, g++ and clang has to be invoked with "-std=c++0x", and this is now added for all gcc versions >= 4.6, and for clang >= 3.0. For gcc >= 4.3 and <= 4.5 and clang <= 3.0 we use the tr1 unordered_map to avoid the deprecation warning.
The addition of c++0x in turn causes a few problems, as the compiler is more stringent and adds a number of new warnings. Below, the most important issues are enumerated:
1) the use of namespaces is more strict, e.g. for isnan, and all headers opening the entire namespace std are now fixed.
2) another other issue caused by the more stringent compiler is the narrowing of the embedded python, which used to be a char array, and is now unsigned char since there were values larger than 128.
3) a particularly odd issue that arose with the new c++0x behaviour is found in range.hh, where the operator< causes gcc to complain about the template type parsing (the "<" is interpreted as the beginning of a template argument), and the problem seems to be related to the begin/end members introduced for the range-type iteration, which is a new feature in c++11.
As a minor update, this patch also fixes the build flags for the clang debug target that used to be shared with gcc and incorrectly use "-ggdb". |
8925:97f06a79b6f5 |
31-Mar-2012 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix address size handling so real mode works properly.
Virtual (pre-segmentation) addresses are truncated based on address size, and any non-64 bit linear address is truncated to 32 bits. This means that real mode addresses aren't truncated down to 16 bits after their segment bases are added in. |
8902:75b524b64c28 |
19-Mar-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
gcc: Clean-up of non-C++0x compliant code, first steps
This patch cleans up a number of minor issues aiming to get closer to compliance with the C++0x standard as interpreted by gcc and clang (compile with std=c++0x and -pedantic-errors). In particular, the patch cleans up enums where the last item was succeded by a comma, namespaces closed by a curcly brace followed by a semi-colon, and the use of the GNU-extension typeof (replaced by templated functions). It does not address variable-length arrays, zero-size arrays, anonymous structs, range expressions in switch statements, and the use of long long. The generated CPU code also has a large number of issues that remain to be fixed, mainly related to overflows in implicit constant conversion (due to shifts). |
8901:bba76d164f9e |
19-Mar-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
clang: Fix recently introduced clang compilation errors
This patch makes the code compile with clang 2.9 and 3.0 again by making two very minor changes. Firt, it maintains a strict typing in the forward declaration of the BaseCPUParams. Second, it adds a FullSystemInt flag of the type unsigned int next to the boolean FullSystem flag. The FullSystemInt variable can be used in decode-statements (expands to switch statements) in the instruction decoder. |
8857:120adc5a4345 |
26-Feb-2012 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Use the M5PanicFault fault in execute methods instead of calling panic.
If an instruction is executed speculatively and hits a situation where it wants to panic, it should return a fault instead. If the instruction was misspeculated, the fault can be thrown away. If the instruction wasn't misspeculated, the fault will be invoked and the panic will still happen. |
8738:66bf413b0d5b |
30-Sep-2011 |
Gabe Black <gblack@eecs.umich.edu> |
SE/FS: Use the new FullSystem constant where possible. |
8672:2c7ece076c8b |
09-Jan-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
X86: Add memory fence to I/O instructions |
8626:19eed0015983 |
01-Dec-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix a bad segmentation check for the stack segment. |
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. |
8607:5fb918115c07 |
31-Oct-2011 |
Gabe Black <gblack@eecs.umich.edu> |
GCC: Get everything working with gcc 4.6.1.
And by "everything" I mean all the quick regressions. |
8588:ef28ed90449d |
27-Sep-2011 |
Gabe Black <gblack@eecs.umich.edu> |
ISA parser: Use '_' instead of '.' to delimit type modifiers on operands.
By using an underscore, the "." is still available and can unambiguously be used to refer to members of a structure if an operand is a structure, class, etc. This change mostly just replaces the appropriate "."s with "_"s, but there were also a few places where the ISA descriptions where handling the extensions themselves and had their own regular expressions to update. The regular expressions in the isa parser were updated as well. It also now looks for one of the defined type extensions specifically after connecting "_" where before it would look for any sequence of characters after a "." following an operand name and try to use it as the extension. This helps to disambiguate cases where a "_" may legitimately be part of an operand name but not separate the name from the type suffix.
Because leaving the "_" and suffix on the variable name still leaves a valid C++ identifier and all extensions need to be consistent in a given context, I considered leaving them on as a breadcrumb that would show what the intended type was for that operand. Unfortunately the operands can be referred to in code templates, the Mem operand in particular, and since the exact type of Mem can be different for different uses of the same template, that broke things. |
8558:a2f497ff53e4 |
19-Sep-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Don't use "#if FULL_SYSTEM" in the X86 ISA description.
The decoder now checks the value of FULL_SYSTEM in a switch statement to decide whether to return a real syscall instruction or one that triggers syscall emulation (or a panic in FS mode). The switch statement should devolve into an if, and also should be optimized out since it's based on constant input. |
8556:2afd82e84d95 |
19-Sep-2011 |
Gabe Black <gblack@eecs.umich.edu> |
PseudoInst: Remove the now unnecessary #if FULL_SYSTEMs around pseudoinsts. |
8555:6fd8d0432d8d |
19-Sep-2011 |
Gabe Black <gblack@eecs.umich.edu> |
Pseudoinst: Add an initParam pseudo inst function. |
8500:5bae9eee9482 |
14-Aug-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Use IsSquashAfter if an instruction could affect fetch translation.
Control register operands are set up so that writing to them is serialize after, serialize before, and non-speculative. These are probably overboard, but they should usually be safe. Unfortunately there are times when even these aren't enough. If an instruction modifies state that affects fetch, later serialized instructions which come after it might have already gone through fetch and decode by the time it commits. These instructions may have been translated incorrectly or interpretted incorrectly and need to be destroyed. This change modifies instructions which will or may have this behavior so that they use the IsSquashAfter flag when necessary. |
8449:4be49ad47c74 |
05-Jul-2011 |
Gabe Black <gblack@eecs.umich.edu> |
ISA parser: Define operand types with a ctype directly. |
8442:b1f3dfae06f1 |
03-Jul-2011 |
Gabe Black <gblack@eecs.umich.edu> |
ISA: Use readBytes/writeBytes for all instruction level memory operations. |
8440:e513600a3551 |
03-Jul-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix store microops so they don't drop faults in timing mode.
If a fault was returned by the CPU when a store initiated it's write, the store instruction would ignore the fault. This change fixes that. |
8432:4a0c9c9409e4 |
21-Jun-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Eliminate an unused argument for building store microops. |
8332:23711432221f |
02-Jun-2011 |
Nathan Binkert <nate@binkert.org> |
copyright: clean up copyright blocks |
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. |
8250:de679a068dd8 |
23-Apr-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: When decoding a memory only inst, fault on reg encodings, don't assert.
This change makes the decoder figure out if an instruction that only supports memory is using a register encoding and decodes directly to "Unknown" which will behave appropriately. This prevents other parts of the instruction creation process from seeing the mismatch and asserting. |
8232:b28d06a175be |
15-Apr-2011 |
Nathan Binkert <nate@binkert.org> |
trace: reimplement the DTRACE function so it doesn't use a vector At the same time, rename the trace flags to debug flags since they have broader usage than simply tracing. This means that --trace-flags is now --debug-flags and --trace-help is now --debug-help |
8229:78bf55f23338 |
15-Apr-2011 |
Nathan Binkert <nate@binkert.org> |
includes: sort all includes |
8106:4a194d4f6fb0 |
02-Mar-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Decode the mysterious and elusive ffreep x87 instruction.
The internet says this instruction was created by accident when an Intel CPU failed to decode x87 instructions properly. It's been documented on a few rare occasions and has generally worked to ensure backwards compatability. One source claims that the gcc toolchain is basically the only thing that emits it, and that emulators/binary translators like qemu and bochs implement it.
We won't actually implement it here since we're hardly implementing any other x87 instructions either. If we were to implement it, it would behave the same as ffree but then also pop the register stack.
http://www.pagetable.com/?p=16 |
8103:53c2d9b1c15d |
02-Mar-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Mark IO reads and writes as non-speculative. |
8102:77ee9ad2e113 |
02-Mar-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Mark prefetches as such in their instruction and request flags. |
7975:4ddb6f13cf13 |
15-Feb-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Get rid of "inline" on the MicroPanic constructor in decoder.cc.
This was making certain versions of gcc omit the function from the object file which would break the build. |
7969:068f061e57a8 |
13-Feb-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Put the result used for flags in an intermediate variable.
Using the destination register directly causes the ISA parser to treat it as a source even if none of the original bits are used. |
7967:b243dc8cec8b |
13-Feb-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Don't read in dest regs if all bits are replaced.
In x86, 32 and 64 bit writes to registers in which registers appear to be 32 or 64 bits wide overwrite all bits of the destination register. This change removes false dependencies in these cases where the previous value of a register doesn't need to be read to write a new value. New versions of most microops are created that have a "Big" suffix which simply overwrite their destination, and the right version to use is selected during microop allocation based on the selected data size.
This does not change the performance of the O3 CPU model significantly, I assume because there are other false dependencies from the condition code bits in the flags register. |
7965:f4c89fe1246b |
13-Feb-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Define fault objects to carry debug messages.
These faults can panic/warn/warn_once, etc., instead of instructions doing that themselves directly. That way, instructions can be speculatively executed, and only if they're actually going to commit will their fault be invoked and the panic, etc., happen. |
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). |
7914:eee5bb0fb8ea |
07-Feb-2011 |
Brad Beckmann <Brad.Beckmann@amd.com> |
m5: added work completed monitoring support |
7894:48d31b577847 |
07-Feb-2011 |
Brad Beckmann <Brad.Beckmann@amd.com> |
x86: set IsCondControl flag for the appropriate microops |
7874:c7f15c60898e |
02-Feb-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Get rid of the stupd microop. |
7872:b21a94bf6a28 |
02-Feb-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Replace the stupd microop with a store/update sequence. |
7789:f455790bcd47 |
08-Dec-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Take advantage of new PCState syntax. |
7720:65d338a8dba4 |
31-Oct-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ISA,CPU,etc: Create an ISA defined PC type that abstracts out ISA behaviors.
This change is a low level and pervasive reorganization of how PCs are managed in M5. Back when Alpha was the only ISA, there were only 2 PCs to worry about, the PC and the NPC, and the lsb of the PC signaled whether or not you were in PAL mode. As other ISAs were added, we had to add an NNPC, micro PC and next micropc, x86 and ARM introduced variable length instruction sets, and ARM started to keep track of mode bits in the PC. Each CPU model handled PCs in its own custom way that needed to be updated individually to handle the new dimensions of variability, or, in the case of ARMs mode-bit-in-the-pc hack, the complexity could be hidden in the ISA at the ISA implementation's expense. Areas like the branch predictor hadn't been updated to handle branch delay slots or micropcs, and it turns out that had introduced a significant (10s of percent) performance bug in SPARC and to a lesser extend MIPS. Rather than perpetuate the problem by reworking O3 again to handle the PC features needed by x86, this change was introduced to rework PC handling in a more modular, transparent, and hopefully efficient way.
PC type:
Rather than having the superset of all possible elements of PC state declared in each of the CPU models, each ISA defines its own PCState type which has exactly the elements it needs. A cross product of canned PCState classes are defined in the new "generic" ISA directory for ISAs with/without delay slots and microcode. These are either typedef-ed or subclassed by each ISA. To read or write this structure through a *Context, you use the new pcState() accessor which reads or writes depending on whether it has an argument. If you just want the address of the current or next instruction or the current micro PC, you can get those through read-only accessors on either the PCState type or the *Contexts. These are instAddr(), nextInstAddr(), and microPC(). Note the move away from readPC. That name is ambiguous since it's not clear whether or not it should be the actual address to fetch from, or if it should have extra bits in it like the PAL mode bit. Each class is free to define its own functions to get at whatever values it needs however it needs to to be used in ISA specific code. Eventually Alpha's PAL mode bit could be moved out of the PC and into a separate field like ARM.
These types can be reset to a particular pc (where npc = pc + sizeof(MachInst), nnpc = npc + sizeof(MachInst), upc = 0, nupc = 1 as appropriate), printed, serialized, and compared. There is a branching() function which encapsulates code in the CPU models that checked if an instruction branched or not. Exactly what that means in the context of branch delay slots which can skip an instruction when not taken is ambiguous, and ideally this function and its uses can be eliminated. PCStates also generally know how to advance themselves in various ways depending on if they point at an instruction, a microop, or the last microop of a macroop. More on that later.
Ideally, accessing all the PCs at once when setting them will improve performance of M5 even though more data needs to be moved around. This is because often all the PCs need to be manipulated together, and by getting them all at once you avoid multiple function calls. Also, the PCs of a particular thread will have spatial locality in the cache. Previously they were grouped by element in arrays which spread out accesses.
Advancing the PC:
The PCs were previously managed entirely by the CPU which had to know about PC semantics, try to figure out which dimension to increment the PC in, what to set NPC/NNPC, etc. These decisions are best left to the ISA in conjunction with the PC type itself. Because most of the information about how to increment the PC (mainly what type of instruction it refers to) is contained in the instruction object, a new advancePC virtual function was added to the StaticInst class. Subclasses provide an implementation that moves around the right element of the PC with a minimal amount of decision making. In ISAs like Alpha, the instructions always simply assign NPC to PC without having to worry about micropcs, nnpcs, etc. The added cost of a virtual function call should be outweighed by not having to figure out as much about what to do with the PCs and mucking around with the extra elements.
One drawback of making the StaticInsts advance the PC is that you have to actually have one to advance the PC. This would, superficially, seem to require decoding an instruction before fetch could advance. This is, as far as I can tell, realistic. fetch would advance through memory addresses, not PCs, perhaps predicting new memory addresses using existing ones. More sophisticated decisions about control flow would be made later on, after the instruction was decoded, and handed back to fetch. If branching needs to happen, some amount of decoding needs to happen to see that it's a branch, what the target is, etc. This could get a little more complicated if that gets done by the predecoder, but I'm choosing to ignore that for now.
Variable length instructions:
To handle variable length instructions in x86 and ARM, the predecoder now takes in the current PC by reference to the getExtMachInst function. It can modify the PC however it needs to (by setting NPC to be the PC + instruction length, for instance). This could be improved since the CPU doesn't know if the PC was modified and always has to write it back.
ISA parser:
To support the new API, all PC related operand types were removed from the parser and replaced with a PCState type. There are two warts on this implementation. First, as with all the other operand types, the PCState still has to have a valid operand type even though it doesn't use it. Second, using syntax like PCS.npc(target) doesn't work for two reasons, this looks like the syntax for operand type overriding, and the parser can't figure out if you're reading or writing. Instructions that use the PCS operand (which I've consistently called it) need to first read it into a local variable, manipulate it, and then write it back out.
Return address stack:
The return address stack needed a little extra help because, in the presence of branch delay slots, it has to merge together elements of the return PC and the call PC. To handle that, a buildRetPC utility function was added. There are basically only two versions in all the ISAs, but it didn't seem short enough to put into the generic ISA directory. Also, the branch predictor code in O3 and InOrder were adjusted so that they always store the PC of the actual call instruction in the RAS, not the next PC. If the call instruction is a microop, the next PC refers to the next microop in the same macroop which is probably not desirable. The buildRetPC function advances the PC intelligently to the next macroop (in an ISA specific way) so that that case works.
Change in stats:
There were no change in stats except in MIPS and SPARC in the O3 model. MIPS runs in about 9% fewer ticks. SPARC runs with 30%-50% fewer ticks, which could likely be improved further by setting call/return instruction flags and taking advantage of the RAS.
TODO:
Add != operators to the PCState classes, defined trivially to be !(a==b). Smooth out places where PCs are split apart, passed around, and put back together later. I think this might happen in SPARC's fault code. Add ISA specific constructors that allow setting PC elements without calling a bunch of accessors. Try to eliminate the need for the branching() function. Factor out Alpha's PAL mode pc bit into a separate flag field, and eliminate places where it's blindly masked out or tested in the PC. |
7719:f299139501f7 |
29-Oct-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fault on divide by zero instead of panicing. |
7718:6333e66ce74b |
29-Oct-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make syscalls also serialize after. |
7715:5581d0cd2bdb |
22-Oct-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make nop a regular, non-microcoded instruction.
Code in the CPUs that need a nop to carry a fault can't easily deal with a microcoded nop. This instruction format provides for one that isn't. |
7713:ce987fa77797 |
22-Oct-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make syscall instructions non-speculative in SE. |
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. |
7682:37c56be05af0 |
14-Sep-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the halt microop non-speculative.
Executing this microop makes the CPU halt even if it was misspeculated. |
7681:61e31534522d |
14-Sep-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make unrecognized instructions behave better in x86. |
7629:0f0c231e3e97 |
23-Aug-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Create a directory for files that define register indexes.
This is to help tidy up arch/x86. These files should not be used external to the ISA. |
7626:bdd926760470 |
23-Aug-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Get rid of the flagless microop constructor.
This will reduce clutter in the source and hopefully speed up compilation. |
7622:b49144029ec8 |
23-Aug-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Mark serializing macroops and regular instructions as such. |
7621:3a6468fa514f |
23-Aug-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add a .serializing directive that makes a macroop serializing.
This directive really just tells the macroop to set IsSerializing and IsSerializeAfter on its final microop. |
7620:3d8a23caa1ef |
23-Aug-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Consolidate extra microop flags into one parameter.
This single parameter replaces the collection of bools that set up various flavors of microops. A flag parameter also allows other flags to be set like the serialize before/after flags, etc., without having to change the constructor. |
7571:405f840c4ae1 |
22-Aug-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Get rid of the unused getAllocator on the python base microop class.
This function is always overridden, and doesn't actually have the right signature. |
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 |
7480:6a854784be4f |
25-Jun-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix div2 flag calculation. |
7087:fb8d5786ff30 |
24-May-2010 |
Nathan Binkert <nate@binkert.org> |
copyright: Change HP copyright on x86 code to be more friendly |
7081:ff2321547ca3 |
12-May-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the cvti2f microop sign extend its integer source correctly.
The code was using the wrong bit as the sign bit. Other similar bits of code seem to be correct. |
7080:c52c581277bf |
12-May-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Actual change that fixes div. How did that happen? |
7072:d9823ce926fa |
02-May-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Sometimes CPUID depends on ecx, so pass that in. |
7070:abdcb0389716 |
02-May-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Finally fix a division corner case.
When doing an unsigned 64 bit division with a divisor that has its most significant bit set, the division code would spill a bit off of the end of a uint64_t trying to shift the dividend into position. This change adds code that handles that case specially by purposefully letting it spill and then going ahead assuming there was a 65th one bit. |
6867:a5511b8990ea |
05-Nov-2009 |
Nathan Binkert <nate@binkert.org> |
compile: compile on 32 bit hardware |
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. |
6742:a2a79fe9655d |
11-Nov-2009 |
Vince Weaver <vince@csl.cornell.edu> |
X86: add ULL to 1's being shifted in 64-bit values
Some of the micro-ops weren't casting 1 to ULL before shifting, which can cause problems. On the perl makerand input this caused some values to be negative that shouldn't have been.
The casts are done as ULL(1) instead of 1ULL to match others in the m5 code base. |
6736:530e457c88c7 |
09-Nov-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make x86 use PREFETCH instead of PF_EXCLUSIVE. |
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. |
6732:4b93003bb069 |
10-Nov-2009 |
Vince Weaver <vince@csl.cornell.edu> |
X86: Remove double-cast in Cvtf2i micro-op
This double cast led to rounding errors which caused some benchmarks to get the wrong values, most notably lucas which failed spectacularly due to CVTTSD2SI returning an off-by-one value. equake was also broken. |
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. |
6647:5a9fd91b66a3 |
16-Sep-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Sign extend the immediate of wripi like the register version. |
6646:d9c23fff4f13 |
16-Sep-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the imm8 member of immediate microops really 8 bits consistently. |
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. |
6624:b157ef23d76c |
23-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Preserve the NO_ACCESS flag when giving CDA a specialized interface. |
6622:aff9a522956a |
21-Aug-2009 |
Nathan Binkert <nate@binkert.org> |
X86: fix some simple compile issues static should not be used for constants that are not inside a class definition. |
6619:de112a8ac3d8 |
20-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the decoding for and fill out FST and FSTP. |
6618:2cd3ce4fa03f |
20-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add microassembler symbols for floating point stack register operands. |
6616:33837b097d69 |
18-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Decode the immediate byte opcode extension for 3dNow! instructions. |
6615:f0e4e63310e5 |
18-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Decode three byte opcodes. |
6611:2cd76560a1f1 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Double check the two byte portion of the decoder and fix bugs/clean up. |
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. |
6605:e16cf917dcec |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a microop for converting 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. |
6603:b3333ef98685 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a microop that compares fp values and writes 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. |
6601:457527e517cc |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a microop that compares fp values and writes 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. |
6596:e60eaef99523 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a shuffle media microop. |
6595:2aec993cdd8f |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the mask move instructions. |
6594:a5dbea7ba3f9 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a mask move microop. |
6593:f27fd3c3a153 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the instructions that move sign bits. |
6592:0143f8c4b2c2 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a microop that moves sign bits. |
6591:3d1ea9362fe5 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the insert/extract instructions. |
6590:b617e9c8352e |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix a bug in the decoder where the insert/extract instructions go. |
6589:7b0f907855d5 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Extend mov2int and mov2fp so they can support insert and extract instructions. |
6588:f449753172ee |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the media average instructions. |
6587:1cb6f8b427c0 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a media average microop. |
6586:e8af0cf94c37 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the multiply and add instructions. |
6585:0eab2a19847a |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Let the integer multiply microop use every other possible source value. |
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. |
6583:04df43def004 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the media shift microops. These don't handle full 128 bit wide shifts. |
6582:7e1af04f4ead |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the sum of absolute differences instructions. |
6581:e0f289b84a4b |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a "sum of absolute differences" microop. |
6580:a1c40860fe09 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the media integer subtract instructions. |
6579:26d371ccd503 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement an integer media subtract microop. |
6578:825b77196521 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the integer media multiply instructions. |
6577:cfe4a8f16e5f |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a media integer multiply microop. |
6576:8038b47efe64 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make larger blocks of instructions use the Inst format by default. |
6575:e5a3ae40c4d0 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the integer media max instructions. |
6574:991d265901cc |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement an integer media max microop. |
6573:6e14c5d36a1a |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the integer media min instructions. |
6572:b0cef5e2dfdb |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add a media integer min microop. |
6571:91d9599956f3 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the media integer addition instructions. |
6570:d7907eaf7419 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement an integer media addition microop with optional saturation. |
6569:e8cb266c9451 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the instructions that convert between forms of floating point. |
6568:a34aae12095c |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a media microop that converts between floating point data types. |
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. |
6566:c246dc2ec640 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a microop that compares fp values and writes a mask as its 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. |
6562:571fd8d89903 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a media microop for converting integer values to floating point. |
6561:3f716cda05c9 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the floating point media instructions. |
6560:323d48647000 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a floating point media divide microop. |
6559:e4f60f716103 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the floating point media multiply instructions. |
6558:8f37a2946cc3 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a floating point media multiply microop. |
6557:f677e05d723d |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the floating point media subtract instructions. |
6556:0e597fe2b391 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a media floating point subtract microop. |
6555:dae81a15cfcc |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the floating point media add instructions. |
6554:22cb3c1ea3fb |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a floating point media add microop. |
6553:897523ead7ce |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the media sqrt instructions. |
6552:fa0ea492a075 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a media square root microop. |
6551:52b4167056ed |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the media floating point max instructions. |
6550:9754d16c242c |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the floating point media max microop. |
6549:d6ae13f56801 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the media floating point min instructions. |
6548:130e3dd23eab |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a floating point media min microop. |
6547:3f6c31c3d59e |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the pack instructions. |
6546:c7e724c1570f |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Create a pack media microop. |
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. |
6541:f70ee159db59 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a multimedia andn microop. |
6540:17414b661543 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement PAND, ANDPS, and ANDPD. |
6539:df1ebe278239 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a multimedia and microop. |
6538:6cf5a0235ae8 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement POR, ORPD and ORPS. |
6537:bebbb828a363 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a media or microop. |
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. |
6534:0943f0e54f0f |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a media xor microop. |
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. |
6524:e207990ddd14 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the lfpimm microop. |
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. |
6521:ff5e7e6bcfbd |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement an unpack microop. |
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. |
6517:584314d07394 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add microcode assembler symbols for mmx registers. |
6516:b5b420d15a20 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Set up a media microop framework and create mov2int and mov2fp microops. |
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. |
6484:c72296d5ee85 |
09-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Decode byte sized singed divide as byte sized. |
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. |
6479:b9ab1b56391b |
07-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement shift right/left double microops. This is my best guess as far as what these should do. Other existing microops use implicit registers, mul1s and mul1u for instance, so this should be ok. The microop that loads the implicit DoubleBits register would fall into one of the microop slots for moving to/from special registers. |
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. |
6477:f3c9335ec2cd |
07-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Use the right field when using legacy prefixes to distinguish instructions. |
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. |
6464:2529aeaf1a1c |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make conditional moves zero extend their 32 bit destinations always. |
6463:fe6165923529 |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix condition code setting for signed multiplies with negative results. |
6462:209c3818a863 |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the check for negative operands for sign multiply more direct. |
6461:418145f4d7a6 |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make sure immediate values are truncated properly. Register values will be "picked" which will assure they don't have junk beyond the part we're using. Immediate values don't go through a similar process, so we should truncate them explicitly. |
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. |
6457:f964c623723c |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Let microops force folding an index into the high byte of a register. |
6456:57e6d35dde10 |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Handle rotate left with carry instructions that go all the way around or more. |
6455:709527fb7250 |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Set the flags on rotate left with carry instructions. |
6454:755cf9b6185f |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Handle rotate right with carry instructions that go all the way around or more. |
6453:1d4dbb357560 |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the overflow bit for rotate right with carry. |
6452:751b06abbaae |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the computation of the bottom part of rotate right with carry. |
6451:fc096f28bcd2 |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the computation of the upper part of rotate right with carry. |
6450:b9aa6a397b57 |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Set the flags for rotate right with carry instructions. |
6449:a7a428f403da |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Handle rotating right all the way around or more. |
6448:a32abe4e17e1 |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Set the flags on a rotate right instruction. |
6447:eebbe9f1bf10 |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make shifts/rotations that write to 32 bits of a register zero extend. |
6446:cc8568cfce8f |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Handle left rotations that go all the way around or more. |
6445:647111272094 |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Actually set the flags on a rotate left instruction. |
6444:8e72cf8196cc |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the sar carry flag. |
6443:fa4e81c993d0 |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix sign extension when doing an arithmetic shift right by 0. |
6442:580a6fbc7585 |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the carry flag for shr. |
6441:801f1fc07a58 |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the carry flag for shl. |
6430:4c5671ecceda |
02-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the high result of mul1s, and removed undefined shifts from the mult microops. |
6360:c3058964d06f |
17-Jul-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Tame the wilds of def operands. |
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. |
6336:25635830e33c |
09-Jul-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fold the MiscRegFile all the way into the ISA object. |
6329:5d8b91875859 |
09-Jul-2009 |
Gabe Black <gblack@eecs.umich.edu> |
Registers: Add a registers.hh file as an ISA switched header. This file is for register indices, Num* constants, and register types. copyRegs and copyMiscRegs were moved to utility.hh and utility.cc. |
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. |
6132:916f10213bea |
23-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Put the StoreCheck flag with the others, and don't collide with other flags. |
6100:a61ac4a3591d |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix up a copyright. |
6098:34690e3cf53e |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Recognize and handle the lock legacy prefix. |
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. |
6080:50890791c591 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the stul microop. This microop does a store and unlocks the requested address. The RISC86 microop ISA doesn't seem to have an equivalent to this, so I'm guessing that the store following an ldstl is automatically unlocking. We don't do it this way for performance reasons since the behavior is the same. |
6079:f39c5598a302 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the ldstl microop. This microop does a load, checks that a store would succeed, and locks the requested address. |
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. |
6058:b62d79c1990b |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix a bug in the chks microop where it ignored that it found a fault. |
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. |
6056:4435d13700de |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: LEA calculates an address before segmentation. |
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). |
6052:2b660729f136 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Only use %eax to select a function and look like we support sse2. |
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. |
6047:bc8caab35dd0 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the halt microop. |
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. |
5972:63611864864f |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement sysenter as a system call interface. |
5969:815827deb469 |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Take address size into account when computing an effective address. |
5968:6f9f1438360a |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make instructions that use intseg preserve all 8 bytes of their addresses. |
5967:ff9203dd7608 |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix a decoder bug and add in some missing instructions. |
5966:833e487aa8f7 |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Respect segment override prefixes even when there's no ModRM byte. |
5965:71f8d7c12619 |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix segment limit checks. |
5961:969fb3187eba |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Compute shift instruction flags correctly. |
5957:f24733876990 |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the int system call interface in the decoder. |
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. |
5936:c30088a243ad |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add segmentation checks for ldt related descriptors and selectors. |
5935:df55109af564 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the TSS type check actually return a fault if it fails. |
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. |
5926:c182698e1ab3 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add microops for reading/writing debug registers. |
5924:516eda09c743 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Check src1 for illegal values since that's the index we actually use. |
5923:9a024981aa60 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the fence instructions. These are not microcoded. |
5920:5a9c976270d6 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a basic prefetch instruction. |
5919:08f836f37f61 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Use the right portion of a register for stores. |
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. |
5912:d113f6def227 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add a flag to force memory accesses to happen at CPL 0. |
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. |
5906:fe94a5f1f229 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the microcode assembler recognize r8-r15. |
5905:e342ab8f92fa |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add a wrattr microop. |
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. |
5901:76fc2c3e10d2 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix segment limit checking. |
5900:6776001c9b92 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add a check to chks to verify a task state segment descriptor. |
5899:b702f4fdf16c |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add a check to chks which raises #GP(selector) if selector is NULL or not in the GDT. |
5892:a0ef4a6349dc |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the stupd microop not update registers in initiateAcc. |
5890:bdef71accd68 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
CPU: Get rid of translate... functions from various interface classes. |
5861:8c1aa74572e4 |
06-Feb-2009 |
Nathan Binkert <nate@binkert.org> |
Quell g++ 4.3 warning about operator ambiguity |
5858:54f64fb1bd62 |
01-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: All x86 fault classes now attempt to do something useful. |
5857:8cd8e1393990 |
01-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the fault classes handle error codes better. |
5856:f770af5600c9 |
01-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the long mode interrupt/exception microcode handle an error code. |
5855:d4e54239ed37 |
01-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Distinguish between hardware and software interrupts/exceptions |
5854:f58bee925c28 |
01-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the upper bound on some ranges that were setting up the micro code assembler. |
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. |
5839:4cc05b7f2a97 |
01-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix some incorrect register widths. |
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. |
5789:46c548dbe620 |
07-Jan-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Hook in the M5 pseudo insts. |
5788:6d4161a36ca1 |
07-Jan-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Autogenerate macroop generateDisassemble function. |
5786:07f635cab026 |
07-Jan-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Move the macroop class out of the isa description into C++. |
5727:8b9aaeac5bab |
10-Nov-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix completeAcc get call. |
5692:0d6addcde185 |
13-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Set the delayed commit flag in x86 microops appropriately. |
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. |
5682:6f1cab082ba7 |
13-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add wrval/rdval microops for reading significant miscregs. |
5680:39ae093fb4eb |
13-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement entering an interrupt in microcode. |
5679:0b7855e2b731 |
13-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make sure register microops set fault rather than returning one. |
5678:9af6981bb086 |
13-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement an wrdh microop which loads bases/offsets from 16 byte descriptors. |
5676:cca6726c0d88 |
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement local labels for the ROM that actually refer into the ROM. |
5675:7828ee363019 |
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the chks check of interrupt gate target code segments. |
5674:4a4f20dfbc60 |
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add a check type for interrupt gates. |
5673:57be483cea36 |
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix chks checking the submode for stack segments. |
5672:f332946e12b2 |
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Let segment manipulation microops be conditional. |
5671:379f926bc5ff |
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Let the microassembler know about the microcode only H segment. |
5670:1df7cdfc4aa6 |
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the rdbase microop |
5667:78b94954f66a |
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Create a handy way to access labels from the ROM in microcode. |
5666:e7925fa8f0d6 |
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make X86's microcode ROM actually do something. |
5663:be5cb9485aed |
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Create an eret microop which returns from ROM to combinational decoding. |
5662:4f3371a1c58c |
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make Br never report itself as the last microop. |
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. |
5591:b05a5c5452e0 |
09-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the debugging microops. The debug functions can't handle a string object format. |
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. |
5449:89b696c8b754 |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the disassembly for halt conform with the other microops. |
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. |
5429:52dbcf7f7328 |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Keep handy values like the operating mode in one register. |
5428:5a27fea50fee |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Change what the microop chks does. Instead of computing the segment descriptor address, this now checks if a selector value/descriptor are legal for a particular purpose. |
5427:1c389acefeb9 |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add a microop to read a segments attribute register. |
5426:0bdcc60ccc45 |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add microops and supporting code to manipulate the whole rflags register. |
5425:4226f6c2d03c |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add microops which panic, fatal, warn, and warn_once. |
5424:d4f80459ad5d |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Truncate descriptors to 16 bits. |
5423:536fb3cc5a9b |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Redo BSF. |
5422:f1f490fe77b0 |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Flesh out 3dnow instruction decoding a bit and grab the byte immediate. |
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. |
5293:5ea2a6dc8f17 |
02-Dec-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the "fault" microop predicated. |
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. |
5290:7dc3e8ee0a22 |
02-Dec-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement wrbase and wrlimit for loading pseudo descriptors. |
5289:ca5390e654b8 |
02-Dec-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Separate the effective seg base and the "hidden" seg base. |
5246:21f29e99e021 |
13-Nov-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make microcode use presegmentation RIPs and the rest of m5 use post segmentation RIPS. |
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. |
5238:95f494fd38bd |
12-Nov-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Flesh out the opcode groups for two byte opcodes. |
5232:d3801ea2792e |
12-Nov-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Various fixes to indexing segmentation related registers |
5188:974af6059943 |
30-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Compile fixes for 32 bit/debug/opt. |
5179:9ea5593e01f2 |
22-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Use the cda microop where appropriate. The ENTER instruction still needs these. |
5178:8914ea55a0c6 |
22-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the cda microop which checks if an address is legal to write to. |
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. |
5172:4f0e76579e7c |
19-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a "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. |
5168:0fee957f6842 |
19-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Replace "group10" placeholder with the corresponding instructions in the decoder. |
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. |
5163:f08b480df4c3 |
19-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the "fault" microop predicated. |
5162:5af26efb306e |
19-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make "Inst" the default format instead of WarnUnimpl for one byte opcodes. |
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. |
5159:31547ed6b8b5 |
19-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Attach the CMC instruction to the decoder. |
5158:8cf2433105ff |
19-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implemented the jrcx instruction. |
5157:9c6c153af4b1 |
19-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make wrip sign extend its second operand. |
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. |
5145:e0e56dded499 |
09-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Get rid of BasicOperate format which wasn't used and referred to SparcStaticInst |
5138:069bbeae1ef8 |
07-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Significantly filled out misc regs. |
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. |
5122:b0527f379eb5 |
03-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the movfp microop. |
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. |
5118:f1b1cb6d0fbe |
03-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the ldst microop and put it in existing microcode where appropriate. |
5117:b422964a705c |
03-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix up the microcode for the FST and FSTP instructions. |
5116:91881e9404de |
03-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Get rid of a hack for ruflag which is no longer necessary. |
5115:fa8e5c5ab419 |
03-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Allow logic instructions to set ECF as well as CF. |
5114:edcdf9b908ec |
03-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add classes for the actual x86 faults. |
5113:a377765c0d4a |
03-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Hook in another version of the XCHG instruction. |
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. |
5083:49559a8060e8 |
19-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Move the fp microops to their own file with their own base classes in C++ and python. |
5082:82dd253231c8 |
19-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Put in the foundation for x87 stack based fp registers. |
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. |
5076:956a475dddea |
13-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the shift and rotate instructions set the carry flag(s) and overflow flags like they're supposed to. |
5075:4ae876c5037d |
13-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Total overhaul of the division instructions and microops. |
5065:63321c544086 |
10-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Move a comment to be next to the code it describes. |
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. |
5061:2ac90228c205 |
06-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make signed versions of partial register values available to microops. |
5060:28b30e3e428c |
06-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Correct how the hi portion of a product is computed. |
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. |
5051:6bdf2a0ae4fb |
05-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the movfp microop use FloatRegBits instead of FloatRegs. This fixes a problem where interpreting arbitrary bits as floating point would change what the value was. These values are legitimate because the fp registers could be used to move around arbitrary data. |
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. |
5045:bf06c4d63bf4 |
05-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add floating point micro registers. |
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. |
5040:126e4510b5bb |
01-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Major rework of how regop microops are generated. The new implementation uses metaclass, and gives a lot more precise control with a lot less verbosity. The flags/no flags reg/imm variants are all handled by the same python class now which supplies a constructor to the right C++ class based on context. |
5032:17f771e6b2f2 |
29-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the sra microop to get the sign bit from the right operand. |
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. |
5028:b9d42ad1f94e |
29-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add an fp move microop. |
5027:e96b8a4f4d96 |
29-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add load and store microops that use the fp registers. |
5026:46dd8d55f6c9 |
29-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add operands to handle floating point registers. |
5025:5c264911b7a9 |
29-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Flesh out register indexing constants. |
5022:476ccbb674ee |
28-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: More two byte opcode decoding. I missed two groups in the last changeset. |
5020:d34fd894a6e5 |
28-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: More fully decode two byte opcodes. This includes the most of the SSE stuff, but not some of the "groups" of instructions. |
5011:6333ea094184 |
26-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the Ruflag microop work correctly, and make the code a little clearer. |
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. |
5007:121fa5d20f59 |
26-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the sign extension microop so it extends zeros correctly. |
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. |
5002:1b540e93ad34 |
26-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Remove x86 code that attempted to fix misaligned accesses. |
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. |
4952:2d7c40dd10bd |
07-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add a format to handle string instructions which can use the repe and repne prefixes. |
4951:1b51fb0c3983 |
07-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Overhaul of ruflags to get it to work correctly. |
4950:f5f19784acf1 |
07-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make a microcode branch microop. Also some touch up for ruflag. |
4906:d3e6e6c2f399 |
22-Jul-2007 |
Steve Reinhardt <stever@eecs.umich.edu> |
Merge more changes in from head. |
4868:99d4946469a1 |
04-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement microops and instructions that manipulate the flags register. |
4867:2de05bc73640 |
04-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make 64 bit unaligned accesses work as well as the other sizes. There is a fundemental flaw in how unaligned accesses are supported, but this is still an improvement. |
4865:4f4a7fe48b5b |
04-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make fixed register operands ignore register index extensions from the REX prefix. The only cases where this was the correct behavior are now handled with the "B" operand type, and doing things this way was breaking some instructions, notably a shift. |
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. |
4834:9480bde3ae6a |
01-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix for compilation bug with new cache code. |
4828:768d4cf6b0dc |
31-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add a flag to indicate an instruction triggers a syscall in SE mode. |
4827:d4ea1bbfdbc3 |
31-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add operand type information to the fnstcw and fldw instruction placeholders. These are the only floating point instructions that get used in my simple hello world test. These instructions are for setting up the floating point control register. Their not being implemented doesn't affect anything because floating point isn't used. |
4825:93a992aa87f6 |
30-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add decoding for x87 floating point. |
4824:32dac1e3bcd8 |
30-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Attach the "DIV" instruction implementation to the decoder. |
4823:9bd81e315a34 |
30-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Remove a naming conflict between the register index parameters and the "picked" register values. |
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. |
4817:4888643b143c |
30-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Allow RIP relative decode on -all- memory forms of operands. |
4816:13391cf96e9c |
30-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Take into account the regular registers and the microcode registers when decided whether or not to fold. |
4814:d398decc8de8 |
30-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Hook in the new instructions. |
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. |
4806:e0c57a8e197c |
30-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: missed a file which adds a "fold" bit. |
4805:cc9a5798e4d1 |
30-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Make the register indices use the appropriate "fold" bit. |
4804:4a707cb7065b |
30-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make disassembly use the final register index. Add bits to indicate whether or not register indexes should be "folded". |
4802:512e30d94584 |
30-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement LEAVE |
4801:370cc342f031 |
30-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add a bitfield to indicate whether or not an REX prefix was present. |
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. |
4792:ccab7ba2c6e5 |
29-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make limm use merge and allow overriding the data size. |
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. |
4771:d4b92447a598 |
27-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Hook in shift and rotate by one instructions, and NOT. |
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. |
4767:5e55d650692e |
27-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add functions to read and write to an exec context. These functions take care of calling the thread contexts read and write functions with the right sized data type, and handle unaligned accesses. |
4766:a708d14c44bf |
27-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix carry calculation for subtraction based microops. The carry flag should be calculated using the -complement- of the second operand, not it's negation. The carry in which is part of computing the 2's complement may induce a carry, but if you've already caused the carry before you get the carry computing logic involved, it will miss it. |
4764:3cc6c2bddf1c |
27-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Implement NOT |
4760:0116da6a4963 |
24-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Hook in a bunch of new instructions, fix a few minor bugs, and expand out one of the prefix multiplexed opcode groups. |
4756:a7083c283274 |
24-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Make the shift and rotate microops mask the shift/rotate amount correctly. |
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 |
4743:0e355a30d805 |
22-Jul-2007 |
Steve Reinhardt <stever@eecs.umich.edu> |
Merge Gabe's changes with mine. |
4734:a71b1b6b0678 |
21-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Implemented and hooked in xchg, rotate with carry, and ret instructions |
4733:b0785fa2d7b6 |
21-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Implement rotate with carry microops. |
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. |
4726:c474eca232e4 |
20-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Make the decoder take advantage of the new "B" operand format which takes a register index from the opcode itself. |
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. |
4724:ba9aff3fe5d7 |
20-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Hook in newly implemented instructions. |
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. |
4720:15cb65a86e5a |
20-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Make load and store ops use the appropriate sized data access. |
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. |
4717:040769cb51b9 |
20-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add a bitfield to decode based on what prefixes are used. |
4716:68cc9f2d4f73 |
20-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add a parameter type to read a register index from the opcode itself. |
4714:5e9f906ea0a0 |
20-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fix carry flag for subtracts, and clean up code slightly. |
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. |
4711:dec658eb8f49 |
18-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Check for the two opcode prefix correctly and add in some instructions. |
4710:8f0c44a432c8 |
18-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Hook near returns into the decoder. |
4709:884a54d8d22f |
18-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Implement near returns. |
4708:efa060dd6f3c |
18-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Make instructions that conditionally set registers set them to their old value if they don't actually execute. |
4706:4ede9a05bb42 |
18-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Make store microops actually store instead of load. |
4705:7fc758c834c0 |
18-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fix a comment to refer to the right type of instruction. |
4704:09303c75d67a |
18-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fix the panic in the "error" format for x86, |
4703:4158cad49287 |
18-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Implement some forms of add. |
4702:8d3a38ec94d9 |
18-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fix the operand types in a section of the decoder. |
4701:6086c14956da |
18-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Make the data size used by regops overridable in the microassembly. |
4699:ee46bb3b2fd3 |
18-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Hook x86 nop into the decoder. |
4697:8d9b2d777c61 |
18-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Implement the x86 nop to be a "fault" microop which returns "NoFault". |
4696:459853ed322c |
18-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add a generateDisassembly function to the MicroFault StaticInst. |
4693:ca44a1014212 |
17-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Make disassembled x86 register indices reflect their size. This doesn't handle high byte register accesses. It also highlights the fact that address size isn't actually being calculated, and that the size a microop uses needs to be overridable from the microassembly. |
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. |
4688:82d7cbf0e66d |
17-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add in support for condition code flags. Some microops can set the condition codes, and some of them can be predicated on them. Some of the codes aren't implemented because it was unclear from the AMD patent what they actually did. They are used with string instructions, but they use variables IP, DTF, and SSTF which don't appear to be documented. |
4687:db7ca06d6e6a |
17-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add in operand which holds the condition code bits of the flag register. |
4686:6ee937c0c431 |
17-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add symbols for each of the flags a microop could set and each condition it could check. |
4685:e38f50632338 |
17-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Actually include miscregs.hh |
4679:0b39fa8f5eb8 |
14-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Pull some hard coded base classes out of the isa description. |
4620:5acc50eeacf7 |
21-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Make symbols for regular registers. |
4619:b914b33406b8 |
21-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Get rid of an unnecessary include file. |
4617:42cb778fbe66 |
21-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Use the new symbols to clean up the assembler. |
4616:99c9f2cbc4a8 |
21-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Needed for last change set to work :P |
4615:4ee8c5745c5d |
21-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Define symbols for the x86 specialization of the microassembler. |
4612:a29c0616839d |
21-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add in code that lays the ground work for setting flags. |
4609:29b5f66fed1a |
20-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Implement rip relative addressing and put in some missing loads and stores. |
4606:e94aaf0b3355 |
20-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fix a typo in one of the operand type tags. |
4605:ffadb6f891a1 |
20-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Comment out some unnecessary debug output. |
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. |
4590:5c3813b700a3 |
19-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Renovate the "fault" microop implementation. |
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. |
4586:597006d41ca8 |
19-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add a stack size bitfield and expose the mode component of the ExtMachInst. |
4585:ac00cf824ee8 |
19-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add a function to print out segment names. |
4582:963ea0dcf174 |
18-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Get rid of unnecessary output. |
4581:23166f771fa4 |
18-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add in incomplete pick and merge functions which read and write pieces of registers, and fill out microcode disassembly. |
4576:31f715613103 |
14-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fix limm. |
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. |
4568:65dcd045da1d |
14-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Get rid of an unnecessary debug statement. |
4567:5c7b9832235d |
14-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Get rid of some debug output and let macroops set headers in their constructor. The intention is to allow them to modify the emulation environment struct before it's used to construct its microops. |
4563:a2dab6654eee |
13-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fix the operand type tag parser to recognize multi character register names. |
4562:ebc2d9545634 |
13-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Partially implement "POP" |
4561:ade4960f0832 |
13-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Move load/store microops into their own file. They still don't do anything, though. |
4560:d65c11cc31d7 |
13-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fix the immediate version of register operations, and get their name to show up correctly. |
4559:f3ef61d0b992 |
12-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Minor comment fix up. |
4548:1738b4f7bac8 |
12-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Make use of some of the REX prefix. |
4546:71382cde8725 |
12-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Flesh out the bitfields for prefixes. |
4545:03725ca8b7ea |
12-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add in MOV instructions. |
4544:3a64c2c0f8e9 |
12-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fix up a comment that wasn't changed over to x86. |
4543:4cbcab038791 |
12-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Get rid of unnecessary namespace prototype. |
4542:f6ca2384b304 |
12-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Use objects to pass around output code, and fix/implement a few things.
src/arch/x86/isa/formats/multi.isa: Make the formats use objects to pass around output code. |
4541:da1910a0d731 |
12-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add an address size bitfield to the isa description and the ExtMachInst |
4539:6eeeea62b7c4 |
12-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Make microOp vs microop and macroOp vs macroop capitilization consistent.
src/arch/x86/isa/macroop.isa: Make microOp vs microop and macroOp vs macroop capitilization consistent. Also fill out the emulation environment handling a little more, and use an object to pass around output code. src/arch/x86/isa/microops/base.isa: Make microOp vs microop and macroOp vs macroop capitilization consistent. Also adjust python to C++ bool translation. |
4538:7665c5ecf99b |
08-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fix another outdated comment. |
4537:01bac5417818 |
08-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Adjust a few more comments. |
4535:51bf0993137e |
08-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fix up a potentially misleading comment. |
4534:7035ff1aa521 |
08-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fix the formatting on a comment. |
4533:126c53d7644a |
08-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Clean up where files are included, and get rid of some cruft.
src/arch/x86/isa/main.isa: Clean up where files are included. |
4532:106c0fb74f7c |
08-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Clean things up a little. |
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. |
4528:f0b19ee67a7b |
08-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Big changes to use the new microcode assembler. |
4527:323c8068b597 |
08-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fixed format arguments for XOR. |
4526:4458edb6990d |
08-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add a bitfield to refer to the opSize member of the extMachInst. |
4524:f051dcff22b3 |
04-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Make limm (load immediate) microop |
4519:f8da6b45573f |
04-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Reworking x86's microcode system. This is a work in progress, and X86 doesn't compile.
src/arch/x86/isa/decoder/one_byte_opcodes.isa: src/arch/x86/isa/macroop.isa: src/arch/x86/isa/main.isa: src/arch/x86/isa/microasm.isa: src/arch/x86/isa/microops/base.isa: src/arch/x86/isa/microops/microops.isa: src/arch/x86/isa/operands.isa: src/arch/x86/isa/microops/regop.isa: src/arch/x86/isa/microops/specop.isa: Reworking x86's microcode system |
4482:7ca486cfc7a6 |
31-May-2007 |
Gabe Black <gblack@eecs.umich.edu> |
x86 work that hadn't been checked in.
src/arch/x86/isa/decoder/one_byte_opcodes.isa: Give the "MOV" instruction the format of it's arguments. This will likely need to be completely overhauled in the near future. src/arch/x86/predecoder.cc: src/arch/x86/predecoder.hh: Make the predecoder explicitly reset itself rather than counting on it happening naturally. src/arch/x86/predecoder_tables.cc: Fix the immediate size table src/arch/x86/regfile.cc: nextnpc is bogus |
4372:14d42d795242 |
10-Apr-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Include the new GenFault microop. |
4371:c5003760793e |
10-Apr-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Reworked x86 a bit |
4369:5b1ad8322f0e |
10-Apr-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Changed some instruction names to be in all caps, and "implemented" move to test the stub code for instructions. |
4366:63cf7e8826b2 |
10-Apr-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Added a class which lets you manipulate all the strings returned by the parser as a unit. |
4349:b223256d0a79 |
08-Apr-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Accidentally didn't save when moving the specialization code out of here. |
4348:5c21bdb46e6d |
06-Apr-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Move the instruction specialization stuff out of the microassembler file, and added some comments to main.isa |
4347:31b270c3e2f9 |
06-Apr-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Merge zizzer.eecs.umich.edu:/bk/newmem into ahchoo.blinky.homelinux.org:/home/gblack/m5/newmem-x86 |
4344:174e31456abe |
06-Apr-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Consolidated the microcode assembler to help separate it from more x86-centric stuff. |
4343:3f11bcf873b3 |
06-Apr-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Refactored the x86 isa description some more. There should be more seperation between x86 specific parts, and those parts which are implemented in the isa description but could eventually be moved elsewhere. |
4341:1897c85e3542 |
06-Apr-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add in a stub merging function |
4340:c0d96f28d854 |
06-Apr-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Clean up the macroop code. |
4338:24d31b35bcf9 |
04-Apr-2007 |
Gabe Black <gblack@eecs.umich.edu> |
The process of going from an instruction definition to an instruction to be returned by the decoder has been fleshed out more. The following steps describe how an instruction implementation becomes a StaticInst.
1. Microops are created. These are StaticInsts use templates to provide a basic form of polymorphism without having to make the microassembler smarter. 2. An instruction class is created which has a "templated" microcode program as it's docstring. The template parameters are refernced with ^ following by a number. 3. An instruction in the decoder references an instruction template using it's mnemonic. The parameters to it's format end up replacing the placeholders. These parameters describe a source for an operand which could be memory, a register, or an immediate. It it's a register, the register index is used. If it's memory, eventually a load/store will be pre/postpended to the instruction template and it's destination register will be used in place of the ^. If it's an immediate, the immediate is used. Some operand types, specifically those that come from the ModRM byte, need to be decoded further into memory vs. register versions. This is accomplished by making the decode_block text for these instructions another case statement based off ModRM. 4. Once all of the template parameters have been handled, the instruction goes throw the microcode assembler which resolves labels and creates a list of python op objects. If an operand is a register, it uses a % prefix, an immediate uses $, and a label uses @. If the operand is just letters, numbers, and underscores, it can appear immediately after the prefix. If it's not, it can be encolsed in non nested {}s. 5. If there is a single "op" object (which corresponds to a single microop) the decoder is set up to return it directly. If not, a macroop wrapper is created around it.
In the future, I'm considering seperating the operand type specialization from the template substitution step. A problem this introduces is that either the template arguments need to be kept around for the specialization step, or they need to be re-extracted. Re-extraction might be the way to go so that the operand formats can be coded directly into the micro assembler template without having to pass them in as parameters. I don't know if that's actually useful, though.
src/arch/x86/isa/decoder/one_byte_opcodes.isa: src/arch/x86/isa/microasm.isa: src/arch/x86/isa/microops/microops.isa: src/arch/x86/isa/operands.isa: src/arch/x86/isa/microops/base.isa: Implemented polymorphic microops and changed around the microcode assembler syntax. |
4336:bd6ab22f8e11 |
04-Apr-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Reworking how x86's isa description works. I'm adopting the following definitions to make figuring out what's what a little easier:
MicroOp: A single operation actually implemented in hardware. MacroOp: A collection of microops which are executed as a unit. Instruction: An architected instruction which can be implemented with a macroop or a microop. |
4323:13ca4002d2ac |
03-Apr-2007 |
Gabe Black <gblack@eecs.umich.edu> |
A batch of changes and fixes. Macroops are now generated automatically, multiops do alot more of what they're supposed to (excluding memory operands), and microops are slightly more implemented. |
4310:8f9d834f19bc |
29-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Made the MultiOp format do a little more. It now sets up single microop instructions to return an instance of the right class. The code to decode register numbers and generate loads and stores still needs to be added. Also, a syntax for specifying operands as sources, destinations, or both needs to be established. Multipl microop instructions are also not handled, pending real macroop generation support. |
4309:47807357f0d7 |
29-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add a microcode assembler. A microcode "program" is a series of statements. Each statement has an optional label at the beginning, a capitilized microcode class name which is roughly equivalent to a mnemonic in a regular ISA, and then an optional series of operands seperated by white space. The operands are either a decimal constant, a label, or a code fragment surrounded by non nested {}s. Labels are a letter or underscore followed by letters, underscores, or digits. The syntax for describing code segments might need to be changed if a need arrises to have {}s in the code itself. |
4299:8f0635157ac4 |
29-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fidget with the syntax of the MultiOp format in anticipation of making it actually work. |
4298:a92aab35e34e |
29-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add code to generate register and immediate based integer op microop classes. |
4279:acc38276ca1d |
21-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add a junk operand. With no operands, the parser breaks. |
4278:4233cadbe3c3 |
21-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Start implementing groups of instructions which do the same thing on different sets of inputs. |
4276:f0030662ee2a |
21-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Break out the one and two byte opcodes into different files. Also change what bits decode is done on to reflect where clumps of instructions are. |
4275:8a37341c7507 |
21-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Missed a const |
4182:5b2c0d266107 |
14-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Make the predecoder an object with it's own switched header file. Start adding predecoding functionality to x86.
src/arch/SConscript: src/arch/alpha/utility.hh: src/arch/mips/utility.hh: src/arch/sparc/utility.hh: src/cpu/base.hh: src/cpu/o3/fetch.hh: src/cpu/o3/fetch_impl.hh: src/cpu/simple/atomic.cc: src/cpu/simple/base.cc: src/cpu/simple/base.hh: src/cpu/static_inst.hh: src/arch/alpha/predecoder.hh: src/arch/mips/predecoder.hh: src/arch/sparc/predecoder.hh: Make the predecoder an object with it's own switched header file. |
4158:a3fb9e29c6ce |
05-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Stub decoder. This is probably even farther from finished than it looks... |