14295:16025a55b380 |
11-Sep-2019 |
Gabe Black <gabeblack@google.com> |
x86: Templatize the IntMasterPort.
This makes the IntMasterPort usable with any class, making it possible to avoid inheriting from IntDevice.
It also makes IntMasterPort inherit directly from QueuedMasterPort, skipping over MessageMasterPort.
Change-Id: I9d218556c838ea567ced5f6fa4d57a3ec9d28d31 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/20821 Maintainer: Gabe Black <gabeblack@google.com> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> |
14294:d86488e6b60b |
10-Sep-2019 |
Gabe Black <gabeblack@google.com> |
x86: Templatize IntSlavePort.
This makes the device IntSlavePort calls back into based on a template parameter so that IntDevice doesn't have to be in the inheritance hierarchy to use it.
It also makes IntSlavePort inherit from SimpleTimingPort directly, skipping over MessageSlavePort.
Change-Id: Ic3213edc9c3ed5e506ee1e9f5e082cd47d7c7998 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/20820 Maintainer: Gabe Black <gabeblack@google.com> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> |
14293:e8bb3f77458a |
09-Sep-2019 |
Gabe Black <gabeblack@google.com> |
x86: Turn the local APIC into a PioDevice instead of a BasicPioDevice.
This will let us accept several address ranges through our pio port instead of just one, and that will in turn let us accept interrupt requests and pio requests through the same port.
Change-Id: I70b78c8cd0edca7fe58b3d4cd241e41d9e0f2c20 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/20819 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> Tested-by: kokoro <noreply+kokoro@google.com> |
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> |
14165:44b5b61846e1 |
14-Aug-2019 |
Gabe Black <gabeblack@google.com> |
x86: Stop CPUID from claiming we support xsave.
xsave is a fairly complex feature which we don't support in gem5, but we do report that we support it through CPUID. It looks like I confused it with FXSAVE which is an instruction related to SSE. This change turns that bit back off again.
Change-Id: I00fc79168c5f7095b5241e870a4c8782e4385425 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/20169 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> |
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> |
14145:066ba9040e5e |
08-Aug-2019 |
Gabe Black <gabeblack@google.com> |
x86: Move some fixed or dummy config information into X86LocalApic.py.
The X86 local APIC doesn't actually use the pio_addr set in the config and instead computes what address it will respond to based on the initial ID of the CPU it's attached to. gem5's BasicPioDevice, which the X86LocalApic class inherits from, does not provide a default value for that parameter and will complain if *something* isn't set. The value used, 0x2000000000000000, is a dummy value which is the base of the region of the physical address space set aside for messages to local APICs from the CPU and from other local APICs.
Also, the clock for the local APIC's timer is defined to be the bus clock. The assumption seems to be that this has a 16:1 ratio with the CPU clock, and I vaguely remember finding that that was more or less unofficially true, even if it isn't necessary stringently defined to be that.
Since we were already just assuming that that ratio was correct and always setting up the local APICs clock that way, we can do that in the X86LocalApic class definition and remove some special x86 specific setup that we'd otherwise need for the x86 version of the Interrupt class. If that's not correct, it can still be overridden somewhere else in the config.
Change-Id: I50e84f899f44b1191c2ad79d05803b44f07001f9 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19968 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com> Tested-by: kokoro <noreply+kokoro@google.com> |
14130:62df30844a66 |
11-Mar-2019 |
Brandon Potter <brandon.potter@amd.com> |
sim-se: add new getpgrp system call
This changeset adds new (relatively simple) system call support. The getpgrp call returns a thread context's pgid.
Change-Id: I361bdbfb9c01b761ddd5a4923d23f86971f8d614 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/17111 Maintainer: Brandon Potter <Brandon.Potter@amd.com> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Ayaz Akram <yazakram@ucdavis.edu> |
14129:7a41ca7e465c |
12-Mar-2019 |
Matthew Sinclair <matthew.sinclair@amd.com> |
sim-se: adding pipe2 syscall
pipe2 builds on top of the pipe syscall implementation by adding some extra flags for the files (to avoid have to make separate calls to fcntl).
Change-Id: I88cf6f1387b9d14e60b33a32db412da9ed93a3e6 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/12310 Reviewed-by: Brandon Potter <Brandon.Potter@amd.com> Maintainer: Brandon Potter <Brandon.Potter@amd.com> Tested-by: kokoro <noreply+kokoro@google.com> |
14096:bde52fccbf0f |
12-Jul-2019 |
Matthew Poremba <matthew.poremba@amd.com> |
arch-x86: Don't free PTW state with inflight requests
If a page table walk is squashed, the walker state is being deleted in the squash code. If there are in flight requests, the deleted walker state values may be clobbered, leading to undefined behavior. This adds a squashed boolean to the walker state which is set if a walk is squashed while requests are still in flight. When packets for the in flight request return, we check if the walk was squashed and return that the walk is complete once the number of in flight requests reaches zero. The walker state is then freed by the PTW.
Change-Id: I57a64b1548b83a8a9e8441fc9d6f33e9842df2b3 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19568 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.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> |
14024:abe47b13653d |
02-May-2019 |
Gabe Black <gabeblack@google.com> |
arch, base, cpu, gpu, sim: Merge getMemProxy and getVirtProxy.
These two functions were performing the same function but had two different names for historical reasons. This change merges them together, keeping the getVirtProxy name to be consistent with the getPhysProxy method used to get a non-translating proxy port.
Change-Id: Idd83c6b899f9343795075b030ccbc723a79e52a4 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18581 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
14020:c9bf7a011602 |
02-May-2019 |
Gabe Black <gabeblack@google.com> |
arch, base, sim: Demote (SE|FS)TranslatingPortProxy &s to PortProxy &s.
Al(most) all of the interesting differences between the two classes have been removed. There are some control methods which are still specific to each type which may require treating them as their true type, but most code that consumes them doesn't need to worry about which is which.
Change-Id: Ie592676f1e496c7940605b66e55cd7fae18e59d6 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18577 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Brandon Potter <Brandon.Potter@amd.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
14018:9d2153431f44 |
02-May-2019 |
Gabe Black <gabeblack@google.com> |
arch, base, sim: Replace Copy(String)?(In|Out) with equivalent code.
This expands those functions into code which extracts the virt proxy and then uses the appropriate method on it. This has two benefits. First, the Copy* functions where mostly redundant wrappers around the methods the proxy port already had. Second, using them forced a particular port which might not actually be what the user wanted.
Change-Id: I62084631dd080061e3c74997125164f40da2d77c Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18575 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> Tested-by: kokoro <noreply+kokoro@google.com> |
14014:ce216ee5d886 |
21-May-2019 |
Ciro Santilli <ciro.santilli@arm.com> |
sim-se: add a release parameter to Process.py
Set the default release to that single value for all ISAs.
glibc has checks for the kernel version based on uname, and refuses to start any syscall emulation programs if those checks don't pass with error:
FATAL: kernel too old
The ideal solution to this problem is to actually implement all missing system calls for the required kernel version and bumping the release accordingly.
However, it is very hard to implement all missing syscalls and verify compliance.
Previously, we have simply bumped the version manually from time to time when major glibc versions started breaking.
This commit alleviates the problem in two ways.
Firstly, having a single kernel version for all versions means that it is easier to bump all versions at once.
Secondly, it makes it is possible to set the release with a parameter, which in turn can be set from the command line with:
se.py --param 'system.cpu[:].workload[:].release = "4.18.0"'
Change-Id: I9e3c31073bfe68735f7b0775c8e299aa62b98222 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/17849 Maintainer: Brandon Potter <Brandon.Potter@amd.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Tested-by: kokoro <noreply+kokoro@google.com> |
14010:0e1e887507c0 |
01-May-2019 |
Gabe Black <gabeblack@google.com> |
arch, base, dev, sim: Remove now unnecessary casts from PortProxy methods.
Change-Id: Ia73b2d86a10d02fa09c924a4571477bb5f200eb7 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18572 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
13997:20bf802f160f |
28-Aug-2018 |
Brandon Potter <brandon.potter@amd.com> |
sim-se: remove comment for code that moved
The page table code must have moved from this class, because the comment no longer accurately reflects upon any of the surrounding code.
Change-Id: If08a4298c1237a541d9875ddeaf3d3ecfd98e9db Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/12300 Maintainer: Brandon Potter <Brandon.Potter@amd.com> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> |
13995:5d459168a680 |
28-Aug-2018 |
Brandon Potter <brandon.potter@amd.com> |
sim-se: change syscall function signature
The system calls had four parameters. One of the parameters is ThreadContext and another is Process. The ThreadContext holds the value of the current process so the Process parameter is redundant since the system call functions already have indirect access.
With the old API, it is possible to call into the functions with the wrong supplied Process which could end up being a confusing error.
This patch removes the redundancy by forcing access through the ThreadContext field within each system call.
Change-Id: Ib43d3f65824f6d425260dfd9f67de1892b6e8b7c Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/12299 Reviewed-by: Brandon Potter <Brandon.Potter@amd.com> Maintainer: Brandon Potter <Brandon.Potter@amd.com> Tested-by: kokoro <noreply+kokoro@google.com> |
13989:e1ebe4024faf |
03-May-2019 |
Gabe Black <gabeblack@google.com> |
x86: Add an object file loader for linux.
Change-Id: I283dd1f52fd020ad3c226eb00fc9216ee034c67f Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18630 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com> Tested-by: kokoro <noreply+kokoro@google.com> |
13937:a47ac7052832 |
30-Apr-2019 |
Gabor Dozsa <gabor.dozsa@arm.com> |
x86: Mark translation as delayed in case of a hw page table walk
This information is used by the LSQ in the O3 cpu (since commit "51becd2... cpu-o3: O3 LSQ Generalisation")
Change-Id: I35fe7e2f8428641d863af0e79e28b0b259fb0b00 Signed-off-by: Gabor Dozsa <gabor.dozsa@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18508 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> Tested-by: kokoro <noreply+kokoro@google.com> |
13933:b4382461066d |
18-Apr-2018 |
Brandon Potter <brandon.potter@amd.com> |
sim-se: add eventfd system call
Change-Id: I7aeb4fe808d0c8f2fb8041e3662d330d8458f09c Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/12125 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Ciro Santilli <ciro.santilli@arm.com> Maintainer: Brandon Potter <Brandon.Potter@amd.com> |
13915:24ae4ea846c9 |
29-Apr-2019 |
Gabe Black <gabeblack@google.com> |
arch: Stop using TheISA within the ISAs.
We know for sure what the ISA is, so there's no need for the indirection.
Change-Id: I73ff04c50890d40a4c7f40caeee746b68b846cb3 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18488 Reviewed-by: Brandon Potter <Brandon.Potter@amd.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Tested-by: kokoro <noreply+kokoro@google.com> |
13914:031a3886ca68 |
29-Apr-2019 |
Gabe Black <gabeblack@google.com> |
x86: Get rid of some unnecessary TheISA-es in x86.
The X86ISA namespace is already available.
Change-Id: I5774968fdfb30b01eba52cdec5e6ef2c75cb66e4 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18471 Reviewed-by: Brandon Potter <Brandon.Potter@amd.com> Maintainer: Gabe Black <gabeblack@google.com> Tested-by: kokoro <noreply+kokoro@google.com> |
13894:8603648c1679 |
24-Apr-2019 |
Gabe Black <gabeblack@google.com> |
arch, sim: Simplify the AuxVector type.
The AuxVector type has a bunch of accessors which just give access to the underlying variables through references. We might as well just make those members accessible directly.
Also, the AuxVector doesn't need to handle endianness flips itself. We can tell the byteswap mechanism how to flip an AuxVector, and let it handle that for us.
This gets rid of the entire .cc file which was complicated by trying to both hide the ISA specific endianness translations, and instantiate templated functions in a .cc.
Change-Id: I433cd61e73e0b067b6d628fba31be4a4ec1c4cf0 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18373 Maintainer: Gabe Black <gabeblack@google.com> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> |
13893:0e863b6c441a |
24-Apr-2019 |
Gabe Black <gabeblack@google.com> |
mem: Remove the ISA specialized versions of port proxy's read/write.
These selected their behavior based on ifdefs and had to be disabled when on the NULL ISA. The versions which take an explicit endianness have been renamed to just read/write instead of readGtoH and writeHtoG since the direction of the translation is obvious from context.
Change-Id: I6cfbfda6c4481962d442d3370534e50532d41814 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18372 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com> Tested-by: kokoro <noreply+kokoro@google.com> |
13892:0182a0601f66 |
22-Apr-2019 |
Gabe Black <gabeblack@google.com> |
mem: Minimize the use of MemObject.
MemObject doesn't provide anything beyond its base ClockedObject any more, so this change removes it from most inheritance hierarchies. Occasionally MemObject is replaced with SimObject when I was fairly confident that the extra functionality of ClockedObject wasn't needed.
Change-Id: Ic014ab61e56402e62548e8c831eb16e26523fdce Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18289 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com> Maintainer: Gabe Black <gabeblack@google.com> |
13886:36a52427e665 |
24-Apr-2019 |
Gabe Black <gabeblack@google.com> |
x86: Refactor the ProcessInfo constructor.
That function had a lot of repetition which is easily factored out into its own function.
Change-Id: I3b7a522de2ba808856bb59df75b80efde6780e3f Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18369 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
13884:6f9486e267a4 |
24-Apr-2019 |
Gabe Black <gabeblack@google.com> |
x86: Fix some style issues in stacktrace.cc.
De-indent the X86ISA namespace, and wrap some overly long lines.
Change-Id: I01a6b66a1cf721e16e4ed4dd1c3469ee112e9177 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18368 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> Tested-by: kokoro <noreply+kokoro@google.com> |
13867:9b10bbcf0543 |
15-Apr-2019 |
Alexandru Dutu <alexandru.dutu@amd.com> |
sim-se: Enhance clone for X86KvmCPU
This changeset enables clone to work with X86KvmCPU model, which will allow running multi-threaded applications at near hardware speeds. Even though the application is multi-threaded, the KvmCPU model uses one event queue, therefore, only one hardware thread will be used, through KVM, to simulate multiple application threads.
Change-Id: I2b2a7b1edb1c56eeb9c4fa0553cd236029cd53f8 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18268 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> Tested-by: kokoro <noreply+kokoro@google.com> |
13784:1941dc118243 |
07-Mar-2019 |
Gabe Black <gabeblack@google.com> |
arch, cpu, dev, gpu, mem, sim, python: start using getPort.
Replace the getMasterPort, getSlavePort, and getEthPort functions with getPort, and remove extraneous mechanisms that are no longer necessary.
Change-Id: Iab7e3c02d2f3a0cf33e7e824e18c28646b5bc318 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/17040 Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
13741:d994984b842a |
22-Feb-2019 |
Andrea Mondelli <Andrea.Mondelli@ucf.edu> |
mem-cache: alias to mem::getMasterPort in TLB class
TLB:getMasterPort is used to obtain the PageWalkMasterPort if present and hides the BaseTLB::getMasterPort().
The TLB::getMasterPort() is renamed according to the expected behavior.
Change-Id: If4f61189094a706d59805cd10f4f814e5830eda8 Reviewed-on: https://gem5-review.googlesource.com/c/16648 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
13695:cce2b2b4466b |
19-Feb-2019 |
Bagus Hanindhito <hanindhito@bagus.my.id> |
x86: Call the base class's regStats in X86ISA::TLB
When I try to build x86 architecture and run the se.py sample script with helloworld example, there is a panic warning stated "Not all stats have been initialized. You may need to add <ParentClass>::regStats() to a new SimObject's regStats() function."
I see that in x86 tlb.cc, there is no initialization in regStats() function that causes memory allocation error in some machine which make gem5 exit abnormally. I add the BaseTLB::regStats(); on TLB::regStats() method and can solve the problem
Change-Id: I8b62bebc15f896c3136ff4f8253dabbf998f618f Reviewed-on: https://gem5-review.googlesource.com/c/16522 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@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> |
13665:9c7fe3811b88 |
25-Jan-2019 |
Andreas Sandberg <andreas.sandberg@arm.com> |
python: Don't assume SimObjects live in the global namespace
The importer in Python 3 doesn't like the way we import SimObjects from the global namespace. Convert the existing SimObject declarations to import from m5.objects. As a side-effect, this makes these files consistent with configuration files.
Change-Id: I11153502b430822130722839e1fa767b82a027aa Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/15981 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com> |
13622:ba31c2a23eca |
21-Nov-2018 |
Gabe Black <gabeblack@google.com> |
cpu, arch: Replace the CCReg type with RegVal.
Most architectures weren't using the CCReg type, and in x86 and arm it was already a uint64_t.
Change-Id: I0b3d5e690e6b31db6f2627f449c89bde0f6750a6 Reviewed-on: https://gem5-review.googlesource.com/c/14515 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.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> |
13610:5d5404ac6288 |
16-Oct-2018 |
Giacomo Gabrielli <giacomo.gabrielli@arm.com> |
arch,cpu: Add vector predicate registers
Latest-gen. vector/SIMD extensions, including the Arm Scalable Vector Extension (SVE), introduce the notion of a predicate register file. This changeset adds this feature across architectures and CPU models.
Change-Id: Iebcadbad89c0a582ff8b1b70de353305db603946 Signed-off-by: Giacomo Gabrielli <giacomo.gabrielli@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/13715 Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> |
13592:b8972ccebd63 |
19-Nov-2018 |
Gabe Black <gabeblack@google.com> |
base: arch: Get rid of the now unused FloatRegVal type.
This type is no longer used since FP registers are accessed as integer bit patterns.
Change-Id: I1070f9443d6247165fd64c6bc041811c28287e9f Reviewed-on: https://gem5-review.googlesource.com/c/14459 Reviewed-by: Brandon Potter <Brandon.Potter@amd.com> Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com> |
13572:14ddf44aaebc |
18-Apr-2018 |
Brandon Potter <brandon.potter@amd.com> |
sim-se add readv and modifies writev
Change-Id: I6cbce4389d5697da34058dc910306394e48c6582 Reviewed-on: https://gem5-review.googlesource.com/c/12117 Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com> Maintainer: Anthony Gutierrez <anthony.gutierrez@amd.com> |
13571:a320800ceccf |
18-Apr-2018 |
Brandon Potter <brandon.potter@amd.com> |
sim-se: add ability to get/set sock metadata
Add getsockopt, getsockname, setsockname, and getpeername system calls.
Change-Id: Ifa1d9a95f15b4fb12859dbfd3c4bd248de2e3d32 Reviewed-on: https://gem5-review.googlesource.com/c/12116 Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com> Maintainer: Anthony Gutierrez <anthony.gutierrez@amd.com> |
13570:b6484720c6a9 |
18-Apr-2018 |
Brandon Potter <brandon.potter@amd.com> |
sim-se: add syscalls related to polling
Fix poll so that it will use the syscall retry capability instead of causing a blocking call.
Add the accept and wait4 system calls.
Add polling to read to remove deadlocks that occur in the event queue that are caused by blocking system calls.
Modify the write system call to return an error number in case of error.
Change-Id: I0b4091a2e41e4187ebf69d63e0088f988f37d5da Reviewed-on: https://gem5-review.googlesource.com/c/12115 Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com> Maintainer: Anthony Gutierrez <anthony.gutierrez@amd.com> |
13569:47a2291177a7 |
18-Apr-2018 |
Brandon Potter <brandon.potter@amd.com> |
sim-se: add calls for network transmissions
Add recvfrom, sendto, recvmsg, and sendmsg system calls.
Change-Id: I2eb50ea7823c8af57d99b3b8d443d2099418c06c Reviewed-on: https://gem5-review.googlesource.com/c/12114 Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com> Maintainer: Anthony Gutierrez <anthony.gutierrez@amd.com> |
13568:9c11b79e3223 |
18-Apr-2018 |
Brandon Potter <brandon.potter@amd.com> |
sim-se: add socket-based functionality
Add socket, socketpair, bind, list, connect and shutdown system calls.
Change-Id: I635af3fca410f96fe28f8fe497e3d457a9dbc470 Reviewed-on: https://gem5-review.googlesource.com/c/12113 Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com> Maintainer: Anthony Gutierrez <anthony.gutierrez@amd.com> |
13556:9f57bb56153a |
13-Oct-2018 |
Gabe Black <gabeblack@google.com> |
arch: Make the ISA register types aliases for the global types.
The ISA specific types can thus be phased out.
Change-Id: I8ea531a099fad140a4ec9c91cd972fe044111d60 Reviewed-on: https://gem5-review.googlesource.com/c/13623 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
13536:77e19417e723 |
09-Jan-2019 |
Andreas Sandberg <andreas.sandberg@arm.com> |
sim-se: Refactor clone to avoid most ifdefs
Some parts of clone are architecture dependent. In some cases, we are able to use architecture-specific helper functions or register aliases. However, there is still some architecture-specific that is protected by ifdefs in the common clone implementation.
Move these architecture-specific bits to the architecture-specific OS class instead to avoid these ifdefs and make the code a bit more readable.
Change-Id: Ia0903d738d0ba890863bddfa77e3b717db7f45de Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> Cc: Giacomo Travaglini <giacomo.travaglini@arm.com> Cc: Javier Setoain <javier.setoain@arm.com> Cc: Brandon Potter <Brandon.Potter@amd.com> Reviewed-on: https://gem5-review.googlesource.com/c/15435 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Brandon Potter <Brandon.Potter@amd.com> |
13479:5a1924882c60 |
30-Nov-2018 |
Tony Gutierrez <anthony.gutierrez@amd.com> |
arch-x86: Add sys/syscall.h to x86 process.cc/syscall_emul.cc
Change a66d12c guards the selection of getdents() in x86's process.cc file with SYS_getdents, however process.cc does not include the right header for SYS_getdents, which leads to x86 choosing the unimplemented call. This change adds sys/syscall.h to address the problem.
This change also adds sys/syscall.hh to syscall_emu.cc, which only includes syscall.hh and may not be supported on all systems.
Change-Id: If1adcf41e9e455de5f2827ba98c542fdcacdc22e Reviewed-on: https://gem5-review.googlesource.com/c/14775 Reviewed-by: Ciro Santilli <ciro.santilli@arm.com> Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> Maintainer: Brandon Potter <Brandon.Potter@amd.com> |
13448:94861018bb62 |
20-Nov-2018 |
Ciro Santilli <ciro.santilli@arm.com> |
sim-se: only implement getdentsFunc on supported hosts
The implementation of the getdents syscall relies on SYS_getdents, which is not available on all archs, because the getdents syscall has been superseded by getdents64, and does not exist on newer archs such as aarch64.
This leads the build to break on aarch64 hosts with error:
error: 'SYS_getdents' was not declared in this scope
Change-Id: I8701fb5b61c0418b14a9463ef135a391a7f7a9ba Reviewed-on: https://gem5-review.googlesource.com/c/14596 Reviewed-by: Brandon Potter <Brandon.Potter@amd.com> Maintainer: Brandon Potter <Brandon.Potter@amd.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> |
13338:c59f7e47e31d |
15-Oct-2018 |
Gabe Black <gabeblack@google.com> |
arch: Get rid of the unused type AnyReg.
This type is defined for all the ISAs but isn't used by anything.
Change-Id: I659a0c5abc7883d82fedd1cac2cd103612d315c8 Reviewed-on: https://gem5-review.googlesource.com/c/13539 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
13229:b45254f2733a |
12-Oct-2018 |
Gabe Black <gabeblack@google.com> |
x86: Use little endian packet accessors.
We know data is little endian, so we can use those accessors explicitly.
Change-Id: I09aa7f1e525ad1346e932ce4a772b64bf59dc350 Reviewed-on: https://gem5-review.googlesource.com/c/13456 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Gabe Black <gabeblack@google.com> |
13031:47510ddc366d |
18-Apr-2018 |
Brandon Potter <brandon.potter@amd.com> |
syscall_emul: implement dir-related syscalls
Add getdents, rmdir, chdir, and mknod to SE mode for x86.
Change-Id: I387ea3066869e8999bc0064f74070f4e47c1e9a1 Reviewed-on: https://gem5-review.googlesource.com/12112 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Anthony Gutierrez <anthony.gutierrez@amd.com> |
13028:9a09c342891e |
04-May-2018 |
Brandon Potter <brandon.potter@amd.com> |
syscall_emul: expand AuxVector class
The AuxVector class is responsible for holding Process data. The data that it holds is normally setup by an OS kernel in the process address space. The purpose behind doing this is to pass in information that the process will need for various reasons. (Check out the enum in the header file for an idea of what the AuxVector holds.)
The AuxVector struct was changed into a class and encapsulation methods were added to protect access to the member variables.
The host ISA may have a different endianness than the simulated ISA. Since data is passed between the process address space and the simulator for auxiliary vectors, we need to worry about maintaining endianness for the right context.
Change-Id: I32c5ac4b679559886e1efeb4b5483b92dfc94af9 Reviewed-on: https://gem5-review.googlesource.com/12109 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Anthony Gutierrez <anthony.gutierrez@amd.com> |
12895:16e3712d8189 |
02-Aug-2018 |
Jason Lowe-Power <jason@lowepower.com> |
misc: Appease GCC 8
GCC 8 adds a number of new warnings to -Wall which generate errors.
- Fix memset to 0 for structs by adding casts. - Fix cast with const when the const was ignored. - Fix catch a polymorphic type by value
We now compile with GCC 8!
Change-Id: Iab70ce11190eee67608fc25c0bedff170152b153 Signed-off-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-on: https://gem5-review.googlesource.com/11949 Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> |
12796:16dffc0e6c7f |
21-Jun-2018 |
Matt Sinclair <mattdsinclair@gmail.com> |
syscall_emul: adding symlink system call
Change-Id: Iebda05c130b4d2ee8434cad1e703933bfda486c8 Reviewed-on: https://gem5-review.googlesource.com/11490 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
12795:6e69f6a3c0c0 |
21-Jun-2018 |
Matt Sinclair <mattdsinclair@gmail.com> |
syscall_emul: adding link system call
Change-Id: If8922c2233bbe1f6fce35f64d1a44b91d2cfeed2 Reviewed-on: https://gem5-review.googlesource.com/11489 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Brandon Potter <Brandon.Potter@amd.com> |
12749:223c83ed9979 |
04-Jun-2018 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
misc: Using smart pointers for memory Requests
This patch is changing the underlying type for RequestPtr from Request* to shared_ptr<Request>. Having memory requests being managed by smart pointers will simplify the code; it will also prevent memory leakage and dangling pointers.
Change-Id: I7749af38a11ac8eb4d53d8df1252951e0890fde3 Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/10996 Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.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> |
12692:1eaaa1d75080 |
04-May-2018 |
Matt Sinclair <mattdsinclair@gmail.com> |
arch-x86, arch-power: fix calls to bits and insertBits
The bits and insertBits assume the first bit is the larger bit and the last bit is the smaller bit. This commit fixes several X86 and Power calls to these functions that incorrectly assumed that first was the smaller bit.
Change-Id: I2b5354d1b9ca66e3436c4a72042416a6ce6dec01 Reviewed-on: https://gem5-review.googlesource.com/10241 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com> |
12686:cb4323a81859 |
03-May-2018 |
Tony Gutierrez <anthony.gutierrez@amd.com> |
arch-x86: Enable fstatfs for x86_64
Change-Id: Ic871f852c4892f2228f0d9bb3cc5cb66887d9736 Reviewed-on: https://gem5-review.googlesource.com/10201 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com> |
12683:6e14a1dd346d |
20-Apr-2017 |
Steve Reinhardt <steve.reinhardt@amd.com> |
arch-x86: implement movntps/movntpd SSE insts
These are non-temporal packed SSE stores.
Change-Id: I526cd6551b38d6d35010bc6173f23d017106b466 Reviewed-on: https://gem5-review.googlesource.com/9861 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com> |
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> |
12681:7fca312f8ee6 |
01-May-2018 |
Tony Gutierrez <anthony.gutierrez@amd.com> |
arch-x86: Enable the umask system call
Change-Id: I309beb1604657e8d1807ac90458709df57f0f819 Reviewed-on: https://gem5-review.googlesource.com/10161 Reviewed-by: Gabe Black <gabeblack@google.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Brandon Potter <Brandon.Potter@amd.com> |
12680:91f4d6668b4f |
04-Apr-2018 |
Giacomo Travaglini <giacomo.travaglini@arm.com> |
sim,cpu,mem,arch: Introduced MasterInfo data structure
With this patch a gem5 System will store more info about its Masters. While it was previously keeping track of the Master name and Master ID only, it is now adding a per-Master pointer to the SimObject related to the Master. This will make it possible for a client to query a System for a Master using either the master's name or the master's pointer.
Change-Id: I8b97d328a65cd06f329e2cdd3679451c17d2b8f6 Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/9781 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com> |
12621:982f22db6230 |
27-Mar-2018 |
Gabe Black <gabeblack@google.com> |
arch: cpu: Make the ExtMachInst type a template argument in InstMap.
This doesn't completely hide the ISA specific ExtMachInst type inside the ISAs since it still gets applied in arch/generic, but it at least pulls it into the arch directory.
Change-Id: Ic2188d59696530d7ecafdff0785d71867182701d Reviewed-on: https://gem5-review.googlesource.com/9403 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Gabe Black <gabeblack@google.com> |
12594:fd59092634f8 |
09-Mar-2018 |
Jason Lowe-Power <jason@lowepower.com> |
arch-x86,sim-se: Enable prlimit syscall
Change-Id: I15f0e5ddb72578de90ed68866c8a0c1501717d61 Signed-off-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-on: https://gem5-review.googlesource.com/8921 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com> Maintainer: Brandon Potter <Brandon.Potter@amd.com> |
12592:29b4451fd0b5 |
09-Mar-2018 |
Jason Lowe-Power <jason@lowepower.com> |
arch-x86,sim-se: Bump kernel version to 3.2
Current glibc expects at least kernel 3.2. Bump this so syscall emulation with dynamically-linked binaries works.
Change-Id: I07077ed2de14c308f6ff79cae677915612557332 Signed-off-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-on: https://gem5-review.googlesource.com/8903 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Brandon Potter <Brandon.Potter@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> |
12484:be3fa5e27fb5 |
30-Jan-2018 |
Christian Menard <christian.menard@tu-dresden.de> |
arch-x86: consistent style of comments in system files
Change-Id: I9f208819b8c1a5c46a77262eb533bb47adb2b905 Reviewed-on: https://gem5-review.googlesource.com/7701 Reviewed-by: Gabe Black <gabeblack@google.com> Reviewed-by: Brandon Potter <Brandon.Potter@amd.com> Maintainer: Gabe Black <gabeblack@google.com> |
12483:fd8c7ada2fb9 |
28-Jan-2018 |
Maximilian Stein <maximilian.stein@tu-dresden.de> |
arch-x86: Granularity bit and segment limit
If set, the granularity bit indicates that the segment limit of segment descriptors shall be interpreted as number of 4K blocks rather than bytes.
The high part (bit 48 to 51) of segment descriptor limits is only 4 bits wide while the low part (bit 0 to 15) spans 16 bits.
Change-Id: Ie386224ca815275fdb31498fe68310ed9c62cc87 Reviewed-on: https://gem5-review.googlesource.com/7601 Reviewed-by: Gabe Black <gabeblack@google.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> |
12461:a4cb506cda74 |
09-Jan-2018 |
Gabe Black <gabeblack@google.com> |
tarch, mem: Abstract the data stored in the SE page tables.
Rather than store the actual TLB entry that corresponds to a mapping, we can just store some abstracted information (address, a few flags) and then let the caller turn that into the appropriate entry. There could potentially be some small amount of overhead from creating entries vs. storing them and just installing them, but it's likely pretty minimal since that only happens on a TLB miss (ideally rare), and, if it is problematic, there could be some preallocated TLB entries which are just minimally filled in as necessary.
This has the nice effect of finally making the page tables ISA agnostic.
Change-Id: I11e630f60682f0a0029b0683eb8ff0135fbd4317 Reviewed-on: https://gem5-review.googlesource.com/7350 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com> |
12460:0f221912b014 |
08-Jan-2018 |
Gabe Black <gabeblack@google.com> |
x86, mem: Rewrite the multilevel page table class.
The new version extracts all the x86 specific aspects of the class, and builds the interface around a variable collection of template arguments which are classes that represent the different levels of the page table. The multilevel page table class is now much more ISA independent.
Change-Id: Id42e168a78d0e70f80ab2438480cb6e00a3aa636 Reviewed-on: https://gem5-review.googlesource.com/7347 Reviewed-by: Brandon Potter <Brandon.Potter@amd.com> Maintainer: Gabe Black <gabeblack@google.com> |
12458:8de44b407db4 |
08-Jan-2018 |
Gabe Black <gabeblack@google.com> |
x86, mem: Don't try to force physical addresses on the system.
Use the system object to allocate physical memory instead of manually placing certain structures and then forcing the system to start other allocations after them in physical memory.
Change-Id: Ie18c81645c3b648c64a6d7a649a0e50f7028f344 Reviewed-on: https://gem5-review.googlesource.com/7346 Maintainer: Gabe Black <gabeblack@google.com> Reviewed-by: Brandon Potter <Brandon.Potter@amd.com> |
12457:b9b7bdb5a8ac |
06-Jan-2018 |
Gabe Black <gabeblack@google.com> |
x86, mem: Get rid of PageTableOps::getBasePtr.
Pass this constant into the page table constructor.
Change-Id: Icbf730f18d9dfcfebd10a196f7f799514728b0fb Reviewed-on: https://gem5-review.googlesource.com/7345 Maintainer: Gabe Black <gabeblack@google.com> Reviewed-by: Brandon Potter <Brandon.Potter@amd.com> |
12456:9d042ae9dd5b |
05-Jan-2018 |
Gabe Black <gabeblack@google.com> |
x86, mem: Pass the multi level page table layout in as a parameter.
Don't get it from a global constant declared in an ISA header file.
Change-Id: Ie19440abdd76500a5e12e6791e6f755ad9e95af3 Reviewed-on: https://gem5-review.googlesource.com/7344 Maintainer: Gabe Black <gabeblack@google.com> Reviewed-by: Brandon Potter <Brandon.Potter@amd.com> Reviewed-by: Alexandru Duțu <alexandru.dutu@amd.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> |
12455:c88f0b37f433 |
05-Jan-2018 |
Gabe Black <gabeblack@google.com> |
arch, mem: Make the page table lookup function return a pointer.
This avoids having a copy in the lookup function itself, and the declaration of a lot of temporary TLB entry pointers in callers. The gpu TLB seems to have had the most dependence on the original signature of the lookup function, partially because it was relying on a somewhat unsafe copy to a TLB entry using a base class pointer type.
Change-Id: I8b1cf494468163deee000002d243541657faf57f Reviewed-on: https://gem5-review.googlesource.com/7343 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com> |
12449:2260f4a68210 |
16-Jan-2018 |
Gabe Black <gabeblack@google.com> |
sim, arch, base: Refactor the base remote GDB class.
Fold the GDBListener class into the main BaseRemoteGDB class, move around a bunch of functions, convert a lot of internal functions to be private, move some functions into the .cc, make some functions non-virtual which didn't really need to be overridden.
Change-Id: Id0832b730b0fdfb2eababa5067e72c66de1c147d Reviewed-on: https://gem5-review.googlesource.com/7422 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com> |
12448:b299e560f1d8 |
04-Jan-2018 |
Gabe Black <gabeblack@google.com> |
arch, mem, sim: Consolidate and rename the SE mode page table classes.
Now that Nothing inherits from PageTableBase directly, it can be merged into FuncPageTable. This change also takes the opportunity to rename the combined class to EmulationPageTable which lets you know that it's specifically for SE mode.
Also remove the page table entry cache since it doesn't seem to actually improve performance. The TLBs likely absorb the majority of the locality, essentially acting like a cache like they would in real hardware.
Change-Id: If1bcb91aed08686603bf7bee37298c0eee826e13 Reviewed-on: https://gem5-review.googlesource.com/7342 Reviewed-by: Brandon Potter <Brandon.Potter@amd.com> Maintainer: Gabe Black <gabeblack@google.com> |
12432:2480d8b432f5 |
22-Dec-2017 |
Gabe Black <gabeblack@google.com> |
arch,mem: Remove the default value for page size.
This breaks one more architecture dependence outside of the ISAs.
Change-Id: I071f9ed73aef78e1cd1752247c183e30854b2d28 Reviewed-on: https://gem5-review.googlesource.com/6982 Maintainer: Gabe Black <gabeblack@google.com> Reviewed-by: Alexandru Duțu <alexandru.dutu@amd.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Brandon Potter <Brandon.Potter@amd.com> |
12431:000549e1f497 |
22-Dec-2017 |
Gabe Black <gabeblack@google.com> |
arch,mem: Move page table construction into the arch classes.
This gets rid of an awkward NoArchPageTable class, and also gives the arch a place to inject ISA specific parameters (specifically page size) without having to have TheISA:: in the generic version of these types.
Change-Id: I1412f303460d5c43dafdb9b3cd07af81c908a441 Reviewed-on: https://gem5-review.googlesource.com/6981 Reviewed-by: Alexandru Duțu <alexandru.dutu@amd.com> Maintainer: Gabe Black <gabeblack@google.com> |
12427:b0611f1ad833 |
20-Dec-2017 |
Gabe Black <gabeblack@google.com> |
alpha,arm,mips,power,riscv,sparc,x86,cpu: Get rid of ISA_HAS_DELAY_SLOT.
This constant is, first, a #define, and second only used in one place.
In that one place, it appears that the code it guards is no longer necessary in general. It was originally written to avoid refetching a block of data that you're still in, even if you've moved slightly farther in it because you're skipping the next instruction due to an annulled branch delay slot. In reality however, in SPARC, the one ISA I'm aware of which has this sort of branching behavior, the PC state object will correctly determine that no branch is happening in these cases. Code lower down in the loop will then recompute where fetching should continue based on the next PC, automatically skipping the annulled branch slot without misinterpretting the gap as a branch.
This change therefore also removes this block of code.
Change-Id: I820ebc9df10aeb4fcb69c12f6a784e9ec616743c Reviewed-on: https://gem5-review.googlesource.com/6821 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12408:51e487705276 |
20-Dec-2017 |
Gabe Black <gabeblack@google.com> |
alpha,arm,mips,power,riscv,sparc,x86: Get rid of TheISA::NoopMachInst.
It's no longer used.
Change-Id: I4a71bcb214f1bb186b92ef50841eca635e6701c5 Reviewed-on: https://gem5-review.googlesource.com/6826 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> |
12406:86bde4a026b5 |
22-Dec-2017 |
Gabe Black <gabeblack@google.com> |
arch,cpu: "virtualize" the TLB interface.
CPUs have historically instantiated the architecture specific version of the TLBs to avoid a virtual function call, making them a little bit more dependent on what the current ISA is. Some simple performance measurement, the x86 twolf regression on the atomic CPU, shows that there isn't actually any performance benefit, and if anything the simulator goes slightly faster (although still within margin of error) when the TLB functions are virtual.
This change switches everything outside of the architectures themselves to use the generic BaseTLB type, and then inside the ISA for them to cast that to their architecture specific type to call into architecture specific interfaces.
The ARM TLB needed the most adjustment since it was using non-standard translation function signatures. Specifically, they all took an extra "type" parameter which defaulted to normal, and translateTiming returned a Fault. translateTiming actually doesn't need to return a Fault because everywhere that consumed it just stored it into a structure which it then deleted(?), and the fault is stored in the Translation object when the translation is done.
A little more work is needed to fully obviate the arch/tlb.hh header, so the TheISA::TLB type is still visible outside of the ISAs. Specifically, the TlbEntry type is used in the generic PageTable which lives in src/mem.
Change-Id: I51b68ee74411f9af778317eff222f9349d2ed575 Reviewed-on: https://gem5-review.googlesource.com/6921 Maintainer: Gabe Black <gabeblack@google.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.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> |
12372:fd63af762679 |
06-Dec-2017 |
Matt Sinclair <mattdsinclair@gmail.com> |
x86,misc: add additional info on faulting X86 instruction, fetched PC
Print faulting instruction for unmapped address panic in faults.cc and print extra info about corresponding fetched PC in base.cc.
Change-Id: Id9e15d3e88df2ad6b809fb3cf9f6ae97e9e97e0f Reviewed-on: https://gem5-review.googlesource.com/6461 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> |
12229:932ed6601823 |
27-Oct-2017 |
Gabe Black <gabeblack@google.com> |
x86: Fix VEX instruction decoding.
When decoding VEX prefixed instructions, the x86 predecoder wasn't walking past the opcode byte and so was also interpreting it as the modRM byte.
Reported-by: likunxi@fas.harvard.edu
Change-Id: I6d4bdabfa03411704c48d905c50c7b23072fc615 Reviewed-on: https://gem5-review.googlesource.com/5281 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com> |
12222:6db0fc7407a5 |
15-Oct-2017 |
Gabe Black <gabeblack@google.com> |
scons: Stop generating inc.d in the isa parser.
Generating dependency/build product information in the isa parser breaks scons idea of how a build is supposed to work. Arm twisting it into working forced a lot of false dependencies which slowed down the build.
Change-Id: Iadee8c930fd7c80136d200d69870df7672a6b3ca Reviewed-on: https://gem5-review.googlesource.com/5081 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Gabe Black <gabeblack@google.com> |
12218:8c5db15dc8e7 |
13-Jun-2017 |
Nikos Nikoleris <nikos.nikoleris@arm.com> |
mem: Signal the local monitor when clearing the global monitor
ARM systems require the coordination of the global and local monitors. When the system is run without caches the global monitor is implemented in the abstract memory object. This change adds a callback from the abstract memory that notifies the local monitor when the global monitor is cleared.
Additionally, for ARM systems the local monitor signals the event register and wakes the thread context up. Subsequent wait-for-event (WFE) instructions will be immediately signaled.
Change-Id: If6c038f3a6bea7239ba4258f07f39c7f9a30500b Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/3760 Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.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> |
12181:2150eff234c1 |
25-Aug-2017 |
Gabe Black <gabeblack@google.com> |
stats: Get rid of some kernel stats related cruft.
The kernel stat mechanism should really be refactored and moved somewhere else, but in the mean time there's some old cruft that can be cleared away.
Change-Id: I21e725de590dda0d20bf3bc675bbe976c7b1bd86 Reviewed-on: https://gem5-review.googlesource.com/4600 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
12175:8cfc0dacc464 |
20-Jul-2017 |
Andreas Sandberg <andreas.sandberg@arm.com> |
arch-x86: Add missing override in the X86 TLB
Change-Id: Ie5ef1aaaef46cf8ef8fa4b0fc8f7efb8cde9b489 Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com> Reviewed-on: https://gem5-review.googlesource.com/4283 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> |
12141:0d5750e8c0b0 |
28-Jun-2017 |
Sean Wilson <spwilson2@wisc.edu> |
sim, x86: Make clone a virtual function
This fixes the function call to clone in syscall_emul.hh where the x86 version should be called before the base implementation of clone.
Change-Id: Iccd2f680ff6e3a5536037d688a80ab3f236bbd98 Signed-off-by: Sean Wilson <spwilson2@wisc.edu> Reviewed-on: https://gem5-review.googlesource.com/3902 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
12140:fab402159cdf |
13-Jun-2017 |
Swapnil Haria <swapnilster@gmail.com> |
x86: Add stats to X86 TLB
Change-Id: Iebf7d245de66eebc8d4c59e62e52adf6cf51e1e4 Signed-off-by: Sean Wilson <spwilson2@wisc.edu> Reviewed-on: https://gem5-review.googlesource.com/3980 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
12124:6edbfe40f4e8 |
16-Jun-2017 |
Sean Wilson <spwilson2@wisc.edu> |
mips, x86: Refactor some Event subclasses into lambdas
Change-Id: I09570e569efe55f5502bc201e03456738999e714 Signed-off-by: Sean Wilson <spwilson2@wisc.edu> Reviewed-on: https://gem5-review.googlesource.com/3920 Maintainer: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> |
12109:f29e9c5418aa |
05-Apr-2017 |
Rekai Gonzalez-Alberquilla <Rekai.GonzalezAlberquilla@arm.com> |
cpu: Added interface for vector reg file
This patch adds some more functionality to the cpu model and the arch to interface with the vector register file.
This change consists mainly of augmenting ThreadContexts and ExecContexts with calls to get/set full vectors, underlying microarchitectural elements or lanes. Those are meant to interface with the vector register file. All classes that implement this interface also get an appropriate implementation.
This requires implementing the vector register file for the different models using the VecRegContainer class.
This change set also updates the Result abstraction to contemplate the possibility of having a vector as result.
The changes also affect how the remote_gdb connection works.
There are some (nasty) side effects, such as the need to define dummy numPhysVecRegs parameter values for architectures that do not implement vector extensions.
Nathanael Premillieu's work with an increasing number of fixes and improvements of mine.
Change-Id: Iee65f4e8b03abfe1e94e6940a51b68d0977fd5bb Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> [ Fix RISCV build issues and CC reg free list initialisation ] Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/2705 |
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 |
12088:ffd7952e9929 |
08-Jun-2017 |
Sean Wilson <spwilson2@wisc.edu> |
sim, x86: Replace EventWrapper use with EventFunctionWrapper
Change-Id: Ie1df07b70776208fc3631a73d403024636fc05a9 Signed-off-by: Sean Wilson <spwilson2@wisc.edu> Reviewed-on: https://gem5-review.googlesource.com/3749 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Anthony Gutierrez <anthony.gutierrez@amd.com> Maintainer: Anthony Gutierrez <anthony.gutierrez@amd.com> |
12074:4cd00c12d641 |
06-Jun-2017 |
Sean Wilson <spwilson2@wisc.edu> |
x86: Add consistent overrides to process.hh
Change-Id: I912601b6f781a0bbedd06583c059589374f6d5c6 Signed-off-by: Sean Wilson <spwilson2@wisc.edu> Reviewed-on: https://gem5-review.googlesource.com/3720 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Joe Gross <joe.gross@amd.com> Reviewed-by: Gabe Black <gabeblack@google.com> Reviewed-by: Brandon Potter <Brandon.Potter@amd.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
12073:fe5885672fab |
03-May-2017 |
Matthias Hille <matthiashille8@gmail.com> |
x86: Fixed remote debugging of simulated code
GDB breaks if more bytes are sent than the transmitted registers actually need. Therefore the GdbRegCache struct needs to be packed to prevent padding at the end.
Change-Id: Ib2c14eb70becdac609eb4f475d5dddbd5bcc60da Signed-off-by: Matthias Hille <matthiashille8@gmail.com> Reviewed-on: https://gem5-review.googlesource.com/3020 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
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> |
12044:3fbbaad9c5cc |
24-May-2017 |
Gabe Black <gabeblack@google.com> |
x86: sim: Make 32 bit x86 processes work again.
When the LiveProcess class was renamed to be just Process, the CL author also changed the syscall function from a virtual function into a regular one. Unfortunately, the I386Process class overrode the syscall function to adjust the return address so that control would return to the right place. Without that adjustment, 32 bit x86 process would segfault and die immediately after their first system call.
This change reinstates the virtual specifier on the base syscall function, and adds an override keyword on the I386Process's version so that it won't be orphaned again in the future. It also fixes some small style issues the style checker script complained about.
Change-Id: I0d1178ea0eda6676050c8fc043820a2bb4d99c0d Reviewed-on: https://gem5-review.googlesource.com/3500 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Brandon Potter <Brandon.Potter@amd.com> Maintainer: Jason Lowe-Power <jason@lowepower.com> |
12031:46116545e745 |
11-May-2017 |
Gabe Black <gabeblack@google.com> |
base: Refactor the GDB code.
The new version modularizes the implementation of the various commands, gets rid of dynamic allocation of the register cache, fixes some small style problems, and uses exceptions to simplify error handling internal to the GDB stub.
Change-Id: Iff3548373ce4adfb99106a810f5713b769df89b2 Reviewed-on: https://gem5-review.googlesource.com/3280 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Boris Shingarov <shingarov@gmail.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.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> |
11975:a4ba6d5b9774 |
18-Apr-2017 |
Santi Galan <santi.galan@metempsy.com> |
x86: fixed branching() computation for branch uops
When a branch micro-op belongs to a flow and the micro-op does not change the nPC and just updates the nuPC (like a 'rep movs' flow), branching() function always returns not-taken no matter actual micro-branch outcome. Provided fix adds to the equation nuPC attribute checking since these kind of branch micro-op only updates that pointer.
This issue has been found while debugging the performance of a copy-loop implemented with memcopy function. Without the fix, 'rep movss' internal micro-branch was always predicted as not-taken causing an squash event after every branch micro-branch execution.
Using the provided test, branch mispredition went from 1922 without the fix to 7.
Change-Id: I1bcbefae26aef47e3135817ef99b53d0ea0a98fa |
11912:548f80d225e6 |
01-Mar-2017 |
Brandon Potter <Brandon.Potter@amd.com> |
syscall-emul: Ignore unimplemented system calls
This changeset sets the implementation policy for a subset of system calls to the ignoreFunc implementation (for x86 only). The ignored system calls likely will never be implemented and this allows a warning to be issued instead of the simulation exiting with a fatal.
Change-Id: I8d9741ad683151e88cc71156d3602e2d0ccb0acf Reviewed-on: https://gem5-review.googlesource.com/2270 Maintainer: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Tony Gutierrez <anthony.gutierrez@amd.com> Reviewed-by: Michael LeBeane <Michael.Lebeane@amd.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> |
11910:b33a207489a2 |
01-Mar-2017 |
Brandon Potter <Brandon.Potter@amd.com> |
syscall-emul: Add the tgkill system call
This changeset adds support to kill a thread group by calling the tgkill system call. The functionality is needed in some pthread applications.
Change-Id: I0413a3331be69b74dfab30de95384113ec4efb63 Reviewed-on: https://gem5-review.googlesource.com/2268 Maintainer: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Tony Gutierrez <anthony.gutierrez@amd.com> Reviewed-by: Michael LeBeane <Michael.Lebeane@amd.com> |
11908:2fd0307d03e9 |
01-Mar-2017 |
Brandon Potter <Brandon.Potter@amd.com> |
syscall-emul: Add or extend dup, dup2, and pipe
This changeset extends the pipe system call to work with architectures other than Alpha (and enables the syscall for x86). For the dup system call, it sets the clone-on-exec flag by default. For the dup2 system call, the changeset adds an implementation (and enables it for x86).
Change-Id: I00ddb416744ee7dd61a5cd02c4c3d97f30543878 Reviewed-on: https://gem5-review.googlesource.com/2266 Maintainer: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Tony Gutierrez <anthony.gutierrez@amd.com> Reviewed-by: Michael LeBeane <Michael.Lebeane@amd.com> |
11907:48a3d32da9d8 |
01-Mar-2017 |
Brandon Potter <Brandon.Potter@amd.com> |
syscall-emul: Add functionality to open syscalls
This changeset adds refactors the existing open system call, adds the openat variant (enabled for x86 builds), and adds additional "special file" test cases for /proc/meminfo and /etc/passwd.
Change-Id: I6f429db65bbf2a28ffa3fd12df518c2d0de49663 Reviewed-on: https://gem5-review.googlesource.com/2265 Maintainer: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Tony Gutierrez <anthony.gutierrez@amd.com> Reviewed-by: Michael LeBeane <Michael.Lebeane@amd.com> |
11906:4b99c1bb3b72 |
01-Mar-2017 |
Brandon Potter <Brandon.Potter@amd.com> |
style: Correct some style issues
This changeset fixes line alignment issues, spacing, spelling, etc. for files that are used during SE Mode.
Change-Id: Ie61b8d0eb4ebb5af554d72f1297808027833616e Reviewed-on: https://gem5-review.googlesource.com/2264 Maintainer: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Tony Gutierrez <anthony.gutierrez@amd.com> Reviewed-by: Michael LeBeane <Michael.Lebeane@amd.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-by: Pierre-Yves Péneau <pierre-yves.peneau@lirmm.fr> |
11905:4a771f8756ad |
01-Mar-2017 |
Brandon Potter <Brandon.Potter@amd.com> |
syscall-emul: Move memState into its own file
The Process class is full of implementation details and structures related to SE Mode. This changeset factors out an internal class from Process and moves it into a separate file. The purpose behind doing this is to clean up the code and make it a bit more modular.
Change-Id: Ic6941a1657751e8d51d5b6b1dcc04f1195884280 Reviewed-on: https://gem5-review.googlesource.com/2263 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com> |
11886:43b882cada33 |
27-Feb-2017 |
Brandon Potter <brandon.potter@amd.com> |
syscall_emul: [PATCH 15/22] add clone/execve for threading and multiprocess simulations
Modifies the clone system call and adds execve system call. Requires allowing processes to steal thread contexts from other processes in the same system object and the ability to detach pieces of process state (such as MemState) to allow dynamic sharing. |
11885:79af314e9f0d |
27-Feb-2017 |
Brandon Potter <brandon.potter@amd.com> |
syscall_emul: [patch 14/22] adds identifier system calls
This changeset add fields to the process object and adds the following three system calls: setpgid, gettid, getpid. |
11884:e8536709cbc0 |
27-Feb-2017 |
Brandon Potter <brandon.potter@amd.com> |
x86: remove unnecessary parameter from functions |
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. |
11875:8e928c0f98d1 |
20-Jul-2015 |
Brandon Potter <brandon.potter@amd.com> |
syscall_emul: [patch 11/22] extend functionality of fcntl
This changeset adds the ability to set a close-on-exec flag for a given file descriptor. It also reworks some of the logic surrounding setting and retrieving flags from the file description. |
11874:663bac0bb1c9 |
23-Feb-2017 |
Brandon Potter <brandon.potter@amd.com> |
x86: remove redundant condition check in tlb code |
11855:c706f4ab5dd7 |
09-Nov-2016 |
Brandon Potter <brandon.potter@amd.com> |
syscall_emul: [patch 9/22] remove unused global variable (num_processes) |
11854:0e94e16e26ea |
09-Nov-2016 |
Brandon Potter <brandon.potter@amd.com> |
syscall_emul: [patch 8/22] refactor process class
Moves aux_vector into its own .hh and .cc files just to get it out of the already crowded Process files. Arguably, it could stay there, but it's probably better just to move it and give it files.
The changeset looks ugly around the Process header file, but the goal here is to move methods and members around so that they're not defined randomly throughout the entire header file. I expect this is likely one of the reasons why I several unused variables related to this class. So, the methods are declared first followed by members. I've tried to aggregate them together so that similar entries reside near one another.
There are other changes coming to this code so this is by no means the final product. |
11851:824055fe6b30 |
09-Nov-2016 |
Brandon Potter <brandon.potter@amd.com> |
syscall_emul: [patch 5/22] remove LiveProcess class and use Process instead
The EIOProcess class was removed recently and it was the only other class which derived from Process. Since every Process invocation is also a LiveProcess invocation, it makes sense to simplify the organization by combining the fields from LiveProcess into Process. |
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> |
11800:54436a1784dc |
09-Nov-2016 |
Brandon Potter <brandon.potter@amd.com> |
style: [patch 3/22] reduce include dependencies in some headers
Used cppclean to help identify useless includes and removed them. This involved erroneously included headers, but also cases where forward declarations could have been used rather than a full include. |
11794:97eebddaae84 |
09-Nov-2016 |
Brandon Potter <brandon.potter@amd.com> |
syscall_emul: [patch 2/22] move SyscallDesc into its own .hh and .cc
The class was crammed into syscall_emul.hh which has tons of forward declarations and template definitions. To clean it up a bit, moved the class into separate files and commented the class with doxygen style comments. Also, provided some encapsulation by adding some accessors and a mutator.
The syscallreturn.hh file was renamed syscall_return.hh to make it consistent with other similarly named files in the src/sim directory.
The DPRINTF_SYSCALL macro was moved into its own header file with the include the Base and Verbose flags as well. |
11793:ef606668d247 |
09-Nov-2016 |
Brandon Potter <brandon.potter@amd.com> |
style: [patch 1/22] use /r/3648/ to reorganize includes |
11760:f9aa72424274 |
15-Dec-2016 |
Brandon Potter <brandon.potter@amd.com> |
syscall_emul: implement fallocate |
11759:deaf82fd2e7c |
15-Dec-2016 |
Brandon Potter <brandon.potter@amd.com> |
syscall_emul: add support for x86 statfs system calls |
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. |
11709:f7e79ee7fb4c |
19-Nov-2016 |
Tony Gutierrez <anthony.gutierrez@amd.com> |
x86: fix loading/storing of Float80 types |
11704:c38fcdaa5fe5 |
26-Oct-2016 |
Tony Gutierrez <anthony.gutierrez@amd.com> |
hsail,gpu-compute: fixes to appease clang++
fixes to appease clang++. tested on:
Ubuntu clang version 3.5.0-4ubuntu2~trusty2 (tags/RELEASE_350/final) (based on LLVM 3.5.0)
Ubuntu clang version 3.6.0-2ubuntu1~trusty1 (tags/RELEASE_360/final) (based on LLVM 3.6.0)
the fixes address the following five issues:
1) the exec continuations in gpu_static_inst.hh were marked as protected when they should be public. here we mark them as public
2) the Abs instruction uses std::abs() in its execute method. because Abs is templated, it can also operate on U32 and U64, types, which cause Abs::execute() to pass uint32_t and uint64_t types to std::abs() respectively. this triggers a warning because std::abs() has no effect in this case. to rememdy this we add template specialization for the execute() method of Abs when its template paramter is U32 or U64.
3) Some potocols that utilize the code in cprintf.hh were missing includes to BoolVec.hh, which defines operator<< for the BoolVec type. This would cause issues when the generated code would try to pass a BoolVec type to a method in cprintf.hh that used operator<< on an instance of a BoolVec.
4) Surprise, clang doesn't like it when you clobber all the bits in a newly allocated object. I.e., this code:
tlb = new GpuTlbEntry\[size\]; std::memset(tlb, 0, sizeof(GpuTlbEntry) \* size);
Let's use std::vector to track the TLB entries in the GpuTlb now...
5) There were a few variables used only in DPRINTFs, so we mark them with M5_VAR_USED. |
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. |
11659:b29aca3fcb75 |
04-Oct-2016 |
Alexandru Dutu <alexandru.dutu@amd.com> |
kvm: Adding details to kvm page fault in x86 Adding details, e.g. rip, rsp etc. to the kvm pagefault exit when in SE mode. |
11628:85011e8eaad9 |
13-Sep-2016 |
Michael LeBeane <michael.lebeane@amd.com> |
x86: Force strict ordering for memory mapped m5ops Normal MMAPPED_IPR requests are allowed to execute speculatively under the assumption that they have no side effects. The special case of m5ops that are treated like MMAPPED_IPR should not be allowed to execute speculatively, since they can have side-effects. Adding the STRICT_ORDER flag to these requests blocks execution until the associated instruction hits the ROB head. |
11608:6319a1125f1c |
14-Aug-2016 |
Nikos Nikoleris <nikos.nikoleris@arm.com> |
cpu, arch: fix the type used for the request flags
Change-Id: I183b9942929c873c3272ce6d1abd4ebc472c7132 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> |
11594:0d151793b2f3 |
05-Aug-2016 |
Tony Gutierrez <anthony.gutierrez@amd.com> |
sim: fix issues with pwrite(); don't enable fstatfs
this patch fixes issues with changeset 11593
use the host's pwrite() syscall for pwrite64Func(), as opposed to pwrite64(), because pwrite64() does not work well on all distros.
undo the enabling of fstatfs, as we will add this in a separate pate. |
11593:ba45735a726a |
04-Aug-2016 |
Tony Gutierrez <anthony.gutierrez@amd.com> |
x86, sim: add some syscalls to X86
this patch adds an implementation for the pwrite64 syscall and enables it for x86_64, and enables fstatfs for x86_64. |
11481:fc247b9c42b6 |
19-May-2016 |
Bjoern A. Zeeb <baz21@cam.ac.uk> |
config, x86: Properly space pad the X86IntelMPBus Entry descriptions
According to the Intel Multi Processor Specification rev 1.4 (-006) (*), section 4.3.2 Bus Entries, Bus type strings are >>6-character ASCII (blank-filled) strings<<. This patch properly pads the entries with the missing spaces at the end.
(*) http://www.intel.com/design/pentium/datashts/24201606.pdf
Committed by Jason Lowe-Power <power.jg@gmail.com> |
11479:8b23edf06cd3 |
19-May-2016 |
Bjoern A. Zeeb <baz21@cam.ac.uk> |
x86, dev: properly space the APIC registers
Registers are 0x10 and not 0x8 apart. The latter leads to invalid calculations of index in array which in turn means that we will not find the interrupt we were looking (been notified) for in the OS.
Committed by Jason Lowe-Power <power.jg@gmail.com> |
11414:cfad34a15729 |
01-Apr-2016 |
Steve Reinhardt <steve.reinhardt@amd.com> |
syscall_emul: remove mmapFlagTable
After all this it turns out we don't even use it. |
11413:3d47d83a48eb |
01-Apr-2016 |
Steve Reinhardt <steve.reinhardt@amd.com> |
syscall_emul: factor out flag tables into common file
The openFlagTable and mmapFlagTables for emulated Linux platforms are basically identical, but are specified repetitively for every platform. Use a common file that gets included for each platform so that we only have one copy, making them more consistent and simplifying changes (like adding #ifdefs).
In the process, made some minor fixes that slipped through due to previous inconsistencies, and added more #ifdefs to try to fix building on alternative hosts. |
11389:1e55f16160cb |
17-Mar-2016 |
Brandon Potter <brandon.potter@amd.com> |
base: support dynamic loading of Linux ELF objects in SE mode |
11387:8eeee90c69a8 |
17-Mar-2016 |
Brandon Potter <brandon.potter@amd.com> |
syscall_emul: update x86 mmap base address |
11386:94c09b607a84 |
17-Mar-2016 |
Steve Reinhardt <steve.reinhardt@amd.com> |
syscall_emul: move mmapGrowsDown() to LiveProcess
The mmapGrowsDown() method was a static method on the OperatingSystem class (and derived classes), which worked OK for the templated syscall emulation methods, but made it hard to access elsewhere. This patch moves the method to be a virtual function on the LiveProcess method, where it can be overridden for specific platforms (for now, Alpha).
This patch also changes the value of mmapGrowsDown() from being false by default and true only on X86Linux32 to being true by default and false only on Alpha, which seems closer to reality (though in reality most people use ASLR and this doesn't really matter anymore).
In the process, also got rid of the unused mmap_start field on LiveProcess and OperatingSystem mmapGrowsUp variable. |
11385:dbbf54058f6f |
17-Mar-2016 |
Brandon Potter <brandon.potter@amd.com> |
syscall_emul: fix bugs for mmap2 system call and x86-32 syscalls |
11383:5ac090acd180 |
17-Mar-2016 |
Brandon Potter <brandon.potter@amd.com> |
syscall_emul: extend mmap system call to support file backed mmaps
For O3, which has a stat that counts reg reads, there is an additional reg read per mmap() call since there's an arg we no longer ignore. Otherwise, stats should not be affected. |
11382:654272b82e94 |
17-Mar-2016 |
Brandon Potter <brandon.potter@amd.com> |
syscall_emul: add many Linux kernel flags |
11381:516213d2f0cf |
17-Mar-2016 |
Brandon Potter <brandon.potter@amd.com> |
syscall_emul: rename OpenFlagTransTable struct
The structure definition only had the open system call flag set in mind when it was named, so we rename it here with the intention of using it to define additional tables to translate flags for other system calls in the future. |
11337:4e3bf51208ba |
13-Feb-2016 |
Michael LeBeane <Michael.Lebeane@amd.com> |
syscall_emul: Implement clock_getres() system call
This patch implements the clock_getres() system call for arm and x86 in linux SE mode. |
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. |
11326:cc2f9e13694d |
06-Feb-2016 |
Steve Reinhardt <steve.reinhardt@amd.com> |
syscall_emul: fix bug in aux vector initialization
Writing 16 bytes from an 8-byte source value is a bad idea. This doesn't appear to have broken anything, but showed up as spurious differences when tracediffing runs. |
11324:31ca646c7685 |
06-Feb-2016 |
Steve Reinhardt <steve.reinhardt@amd.com> |
x86: create function to check miscreg validity
In the process of trying to get rid of an '== false' comparison, it became apparent that a slightly more involved solution was needed. Split this out into its own changeset since it's not a totally trivial local change like the others. |
11321:02e930db812d |
06-Feb-2016 |
Steve Reinhardt <steve.reinhardt@amd.com> |
style: fix missing spaces in control statements
Result of running 'hg m5style --skip-all --fix-control -a'. |
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. |
11301:072a171ebfb6 |
17-Jan-2016 |
Steve Reinhardt <steve.reinhardt@amd.com> |
arch: don't call *Timing functions from *Atomic versions
The readMemAtomic/writeMemAtomic helper functions were calling readMemTiming/writeMemTiming respectively. This is functionally correct, since the *Timing functions are doing the same access initiation operation as the *Atomic functions (just that the *Atomic versions also complete the access in line). It also provides for some (very minimal) code reuse. Unfortunately, it's potentially pretty confusing, since it makes it look like the atomic accesses are somehow being converted to timing accesses. It also gets in the way of specializing the timing interface (as will be done in a future patch). |
11300:b3f2de9ff2bd |
17-Jan-2016 |
Steve Reinhardt <steve.reinhardt@amd.com> |
arch: get rid of unused LargestRead typedef |
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. |
11274:d9a0136ab8cc |
18-Dec-2015 |
Boris Shingarov <shingarov@labware.com> |
arm: remote GDB: rationalize structure of register offsets
Currently, the wire format of register values in g- and G-packets is modelled using a union of uint8/16/32/64 arrays. The offset positions of each register are expressed as a "register count" scaled according to the width of the register in question. This results in counter- intuitive and error-prone "register count arithmetic", and some formats would even be altogether unrepresentable in such model, e.g. a 64-bit register following a 32-bit one would have a fractional index in the regs64 array. Another difficulty is that the array is allocated before the actual architecture of the workload is known (and therefore before the correct size for the array can be calculated).
With this patch I propose a simpler mechanism for expressing the register set structure. In the new code, GdbRegCache is an abstract class; its subclasses contain straightforward structs reflecting the register representation. The determination whether to use e.g. the AArch32 vs. AArch64 register set (or SPARCv8 vs SPARCv9, etc.) is made by polymorphically dispatching getregs() to the concrete subclass. The subclass is not instantiated until it is needed for actual g-/G-packet processing, when the mode is already known.
This patch is not meant to be merged in on its own, because it changes the contract between src/base/remote_gdb.* and src/arch/*/remote_gdb.*, so as it stands right now, it would break the other architectures. In this patch only the base and the ARM code are provided for review; once we agree on the structure, I will provide src/arch/*/remote_gdb.* for the other architectures; those patches could then be merged in together.
Review Request: http://reviews.gem5.org/r/3207/ Pushed by Joel Hestness <jthestness@gmail.com> |
11218:d135bc832ffe |
16-Nov-2015 |
Swapnil Haria <swapnilh@cs.wisc.edu> |
x86: Invalidating TLB entry on page fault
As per the x86 architecture specification, matching TLB entries need to be invalidated on a page fault. For instance, after a page fault due to inadequate protection bits on a TLB hit, the TLB entry needs to be invalidated. This behavior is clearly specified in the x86 architecture manuals from both AMD and Intel. This invalidation is missing currently in gem5, due to which linux kernel versions 3.8 and up cannot be simulated efficiently. This is exposed by a linux optimisation in commit e4a1cc56e4d728eb87072c71c07581524e5160b1, which removes a tlb flush on updating page table entries in x86.
Testing: Linux kernel versions 3.8 onwards were booting very slowly in FS mode, due to repeated page faults (~300000 before the first print statement in a bash file). Ensured that page fault rate drops drastically and observed reduction in boot time from order of hours to minutes for linux kernel v3.8 and v3.11 |
11217:b29d5816936f |
16-Nov-2015 |
Bjoern A. Zeeb <baz21@cam.ac.uk> |
x86: cpuid: add family to warn() message
doCpuid() has to identical warn messages about unimplemented functions. Add the family to the log message to make them distinguishable.
Committed by: Nilay Vaish <nilay@cs.wisc.edu> |
11216:80e82ce1978d |
16-Nov-2015 |
Bjoern A. Zeeb <baz21@cam.ac.uk> |
x86: pagetable walker: fix typo in comment |
11175:2324ed5fa9f4 |
23-Oct-2015 |
Andreas Hansson <andreas.hansson@arm.com> |
x86: Add missing explicit overrides for X86 devices
Make clang >= 3.5 happy when compiling build/X86/gem5.opt on OSX. |
11168:f98eb2da15a4 |
12-Oct-2015 |
Andreas Hansson <andreas.hansson@arm.com> |
misc: Remove redundant compiler-specific defines
This patch moves away from using M5_ATTR_OVERRIDE and the m5::hashmap (and similar) abstractions, as these are no longer needed with gcc 4.7 and clang 3.1 as minimum compiler versions. |
11165:d90aec9435bd |
09-Oct-2015 |
Rekai Gonzalez Alberquilla <Rekai.GonzalezAlberquilla@arm.com> |
isa: Add parameter to pick different decoder inside ISA
The decoder is responsible for splitting instructions in micro operations (uops). Given that different micro architectures may split operations differently, this patch allows to specify which micro architecture each isa implements, so different cores in the system can split instructions differently, also decoupling uop splitting (microArch) from ISA (Arch). This is done making the decodification calls templates that receive a type 'DecoderFlavour' that maps the name of the operation to the class that implements it. This way there is only one selection point (converting the command line enum to the appropriate DecodeFeatures object). In addition, there is no explicit code replication: template instantiation hides that, and the compiler should be able to resolve a number of things at compile-time. |
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++. |
11151:ca4ea9b5c052 |
30-Sep-2015 |
Mitch Hayenga <mitch.hayenga@arm.com> |
cpu,isa,mem: Add per-thread wakeup logic
Changes wakeup functionality so that only specific threads on SMT capable cpus are woken. |
11150:a8a64cca231b |
30-Sep-2015 |
Mitch Hayenga <mitch.hayenga@arm.com> |
isa,cpu: Add support for FS SMT Interrupts
Adds per-thread interrupt controllers and thread/context logic so that interrupts properly get routed in SMT systems. |
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. |
10955:9abf6a7c14ab |
20-Jul-2015 |
David Hashe <david.hashe@amd.com> |
syscall: Add readlink to x86 with special case /proc/self/exe
This patch implements the correct behavior. |
10935:acd48ddd725f |
28-Jul-2015 |
Nilay Vaish <nilay@cs.wisc.edu> |
revert 5af8f40d8f2c |
10934:5af8f40d8f2c |
26-Jul-2015 |
Nilay Vaish <nilay@cs.wisc.edu> |
cpu: implements vector registers
This adds a vector register type. The type is defined as a std::array of a fixed number of uint64_ts. The isa_parser.py has been modified to parse vector register operands and generate the required code. Different cpus have vector register files now. |
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. |
10905:a6ca6831e775 |
07-Jul-2015 |
Andreas Sandberg <andreas.sandberg@arm.com> |
sim: Refactor the serialization base class
Objects that are can be serialized are supposed to inherit from the Serializable class. This class is meant to provide a unified API for such objects. However, so far it has mainly been used by SimObjects due to some fundamental design limitations. This changeset redesigns to the serialization interface to make it more generic and hide the underlying checkpoint storage. Specifically:
* Add a set of APIs to serialize into a subsection of the current object. Previously, objects that needed this functionality would use ad-hoc solutions using nameOut() and section name generation. In the new world, an object that implements the interface has the methods serializeSection() and unserializeSection() that serialize into a named /subsection/ of the current object. Calling serialize() serializes an object into the current section.
* Move the name() method from Serializable to SimObject as it is no longer needed for serialization. The fully qualified section name is generated by the main serialization code on the fly as objects serialize sub-objects.
* Add a scoped ScopedCheckpointSection helper class. Some objects need to serialize data structures, that are not deriving from Serializable, into subsections. Previously, this was done using nameOut() and manual section name generation. To simplify this, this changeset introduces a ScopedCheckpointSection() helper class. When this class is instantiated, it adds a new /subsection/ and subsequent serialization calls during the lifetime of this helper class happen inside this section (or a subsection in case of nested sections).
* The serialize() call is now const which prevents accidental state manipulation during serialization. Objects that rely on modifying state can use the serializeOld() call instead. The default implementation simply calls serialize(). Note: The old-style calls need to be explicitly called using the serializeOld()/serializeSectionOld() style APIs. These are used by default when serializing SimObjects.
* Both the input and output checkpoints now use their own named types. This hides underlying checkpoint implementation from objects that need checkpointing and makes it easier to change the underlying checkpoint storage code. |
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> |
10835:d4b162a57400 |
15-May-2015 |
Andreas Hansson <andreas.hansson@arm.com> |
misc: Appease gcc 5.1
Three minor issues are resolved:
1. Apparently gcc 5.1 does not like negation of booleans followed by bitwise AND.
2. Somehow the compiler also gets confused and warns about NoopMachInst being unused (removing it causes compilation errors though). Most likely a compiler bug.
3. There seems to be a number of instances where loop unrolling causes false positives for the array-bounds check. For now, switch to std::array. Potentially we could disable the warning for newer gcc versions, but switching to std::array is probably a good move in any case. |
10831:fbdaa08aaa42 |
05-May-2015 |
Steve Reinhardt <steve.reinhardt@amd.com> |
syscall_emul: fix warn_once behavior
The current ignoreWarnOnceFunc doesn't really work as expected, since it will only generate one warning total, for whichever "warn-once" syscall is invoked first. This patch fixes that behavior by keeping a "warned" flag in the SyscallDesc object, allowing suitably flagged syscalls to warn exactly once per syscall. |
10824:308771bd2647 |
05-May-2015 |
Andreas Sandberg <Andreas.Sandberg@ARM.com> |
mem, cpu: Add a separate flag for strictly ordered memory
The Request::UNCACHEABLE flag currently has two different functions. The first, and obvious, function is to prevent the memory system from caching data in the request. The second function is to prevent reordering and speculation in CPU models.
This changeset gives the order/speculation requirement a separate flag (Request::STRICT_ORDER). This flag prevents CPU models from doing the following optimizations:
* Speculation: CPU models are not allowed to issue speculative loads.
* Write combining: CPU models and caches are not allowed to merge writes to the same cache line.
Note: The memory system may still reorder accesses unless the UNCACHEABLE flag is set. It is therefore expected that the STRICT_ORDER flag is combined with the UNCACHEABLE flag to prevent this behavior. |
10820:e2a283400c43 |
05-May-2015 |
Andreas Hansson <andreas.hansson@arm.com> |
arch, cpu: Do not forward snoops to table walker
This patch simplifies the overall CPU by changing the TLB caches such that they do not forward snoops to the table walker port(s). Note that only ARM and X86 are affected.
There is no reason for the ports to snoop as they do not actually take any action, and from a performance point of view we are better of not snooping more than we have to.
Should it at a later point be required to snoop for a particular TLB design it is easy enough to add it back. |
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. |
10804:df2aa91dba5b |
24-Apr-2015 |
Andreas Hansson <andreas.hansson@arm.com> |
misc: Appease gcc 5.1 without moving GDB_REG_BYTES
This patch rolls back the move of the GDB_REG_BYTES constant, and instead adds M5_VAR_USED. |
10799:1e8e6c141372 |
23-Apr-2015 |
Andreas Hansson <andreas.hansson@arm.com> |
misc: Appease gcc 5.1
This patch fixes a few small issues to ensure gem5 compiles when using gcc 5.1.
First, the GDB_REG_BYTES in the RemoteGDB header are, rather surprisingly, flagged as unused for both ARM and X86. Removing them, however, causes compilation errors as they are actually used in the source file. Moving the constant into the class definition fixes the issue. Possibly a gcc bug.
Second, we have an unused EthPktData constructor using auto_ptr, and the latter is deprecated. Since the code is never used it is simply removed. |
10796:5bcba8001c7e |
22-Apr-2015 |
Brandon Potter <brandon.potter@amd.com> |
syscall_emul: implement clock_gettime system call |
10795:e9e6352c680f |
22-Apr-2015 |
Monir Mozumder <monir.mozumder@amd.com> |
syscall_emul: update x86 syscall table Update table with additional definitions through Linux 3.13. |
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. |
10713:eddb533708cb |
02-Mar-2015 |
Andreas Hansson <andreas.hansson@arm.com> |
mem: Split port retry for all different packet classes
This patch fixes a long-standing isue with the port flow control. Before this patch the retry mechanism was shared between all different packet classes. As a result, a snoop response could get stuck behind a request waiting for a retry, even if the send/recv functions were split. This caused message-dependent deadlocks in stress-test scenarios.
The patch splits the retry into one per packet (message) class. Thus, sendTimingReq has a corresponding recvReqRetry, sendTimingResp has recvRespRetry etc. Most of the changes to the code involve simply clarifying what type of request a specific object was accepting.
The biggest change in functionality is in the cache downstream packet queue, facing the memory. This queue was shared by requests and snoop responses, and it is now split into two queues, each with their own flow control, but the same physical MasterPort. These changes fixes the previously seen deadlocks. |
10698:829adc48e175 |
16-Feb-2015 |
Andreas Hansson <andreas.hansson@arm.com> |
arch: Make readMiscRegNoEffect const throughout
Finally took the plunge and made this apply to all ISAs, not just ARM. |
10694:1a6785e37d81 |
11-Feb-2015 |
Marco Balboni <Marco.Balboni@ARM.com> |
mem: Clarification of packet crossbar timings
This patch clarifies the packet timings annotated when going through a crossbar.
The old 'firstWordDelay' is replaced by 'headerDelay' that represents the delay associated to the delivery of the header of the packet.
The old 'lastWordDelay' is replaced by 'payloadDelay' that represents the delay needed to processing the payload of the packet.
For now the uses and values remain identical. However, going forward the payloadDelay will be additive, and not include the headerDelay. Follow-on patches will make the headerDelay capture the pipeline latency incurred in the crossbar, whereas the payloadDelay will capture the additional serialisation delay. |
10687:276da6265ab8 |
11-Feb-2015 |
Andreas Sandberg <Andreas.Sandberg@ARM.com> |
sim: Move the BaseTLB to src/arch/generic/
The TLB-related code is generally architecture dependent and should live in the arch directory to signify that. |
10663:fae54a666162 |
25-Jan-2015 |
Ali Saidi <Ali.Saidi@ARM.com> |
cpu: Put all CPU instruction tracers in a single file |
10660:87f7b5a07584 |
22-Jan-2015 |
Andreas Hansson <andreas.hansson@arm.com> |
mem: Remove unused Packet src and dest fields
This patch takes the final step in removing the src and dest fields in the packet. These fields were rather confusing in that they only remember a single multiplexing component, and pushed the responsibility to the bridge and caches to store the fields in a senderstate, thus effectively creating a stack. With the recent changes to the crossbar response routing the crossbar is now responsible without relying on the packet fields. Thus, these variables are now unused and can be removed. |
10654:e49bf4884c59 |
22-Jan-2015 |
Andreas Hansson <andreas.hansson@arm.com> |
x86: Delay X86 table walk on receiving walker response
This patch fixes a minor issue in the X86 page table walker where it ended up sending new request packets to the crossbar before the response processing was finished (recvTimingResp is directly calling sendTimingReq). Under certain conditions this caused the crossbar to see illegal combinations of request/response overlap, in turn causing problems with a slightly modified crossbar implementation. |
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> |
10638:5d119a460f15 |
07-Jan-2015 |
Gabe Black <gabeblack@google.com> |
x86: Enable three bits in the FamilyModelStepping ECX CPUID bitfield.
These are for the monitor/mwait instructions, SSSE3, and XSAVE. |
10637:e9bc4cde5d8e |
07-Jan-2015 |
Gabe Black <gabeblack@google.com> |
cpuid, x86: Revert "Enabling more features in CPUid"
That change enables CPUID bits for features that aren't implemented in gem5. If a simulated system tries to use those features because it was told it could, bad things can happen. |
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 |
10601:6efb37480d87 |
06-Dec-2014 |
Gabe Black <gabeblack@google.com> |
misc: Generalize GDB single stepping.
The new single stepping implementation for x86 doesn't rely on any ISA specific properties or functionality. This change pulls out the per ISA implementation of those functions and promotes the X86 implementation to the base class.
One drawback of that implementation is that the CPU might stop on an instruction twice if it's affected by both breakpoints and single stepping. While that might be a little surprising, it's harmless and would only happen under somewhat unlikely circumstances. |
10600:e60c7758cf69 |
06-Dec-2014 |
Gabe Black <gabeblack@google.com> |
x86: Implement a remote GDB stub.
This stub should allow remote debugging of 32 bit and 64 bit targets. Single stepping seems to work, as do breakpoints. If both breakpoints and single stepping affect an instruction, gdb will stop at the instruction twice before continuing. That's a little surprising, but is generally harmless. |
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. |
10590:ad9146bb5598 |
03-Dec-2014 |
Gabe Black <gabeblack@google.com> |
x86: Clean up style in process.cc. |
10558:426665ec11a9 |
23-Nov-2014 |
Alexandru Dutu <alexandru.dutu@amd.com> |
mem: Page Table map api modification
This patch adds uncacheable/cacheable and read-only/read-write attributes to the map method of PageTableBase. It also modifies the constructor of TlbEntry structs for all architectures to consider the new attributes. |
10554:fe2e2f06a7c8 |
23-Nov-2014 |
Alexandru Dutu <alexandru.dutu@amd.com> |
x86: Segment initialization to support KvmCPU in SE This patch sets up low and high privilege code and data segments and places them in the following order: cs low, ds low, ds, cs, in the GDT. Additionally, a syscall and page fault handler for KvmCPU in SE mode are defined. The order of the segment selectors in GDT is required in this manner for interrupt handling to work properly. Segment initialization is done for all the thread contexts. |
10553:c1ad57c53a36 |
23-Nov-2014 |
Alexandru Dutu <alexandru.dutu@amd.com> |
kvm, x86: Adding support for SE mode execution This patch adds methods in KvmCPU model to handle KVM exits caused by syscall instructions and page faults. These types of exits will be encountered if KvmCPU is run in SE mode. |
10552:41ebfed1dc89 |
23-Nov-2014 |
Alexandru Dutu <alexandru.dutu@amd.com> |
cpuid, x86: Enabling more features in CPUid Adding more features in the CPUid with the purpose of supporting running the KvmCPU in SE mode. |
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. |
10542:7be879ff600c |
17-Nov-2014 |
Gabe Black <gabeblack@google.com> |
x86: APIC: Only set deliveryStatus if our IPI is going somewhere.
Otherwise the IPI which isn't sent will never arrive, and the deliveryStatus bit will never be cleared. |
10541:9f100bac04f1 |
17-Nov-2014 |
Gabe Black <gabeblack@google.com> |
x86: APIC: Fix the getRegArrayBit function.
The getRegArrayBit function extracts a bit from a series of registers which are treated as a single large bit array. A previous change had modified the logic which figured out which bit to extract from ">> 5" to "% 5" which seems wrong, especially when other, similar functions were changed to use "% 32". |
10539:cd107abe79dd |
17-Nov-2014 |
Gabe Black <gabeblack@google.com> |
x86: Fix the CPUID Long Mode Address Size function.
The value in EAX has an 8 bit field for the linear address size and one for the physical address size when calling that function. A recent change implemented it but returned 0xff for both of those fields. That implies that linear and physical addresses are 255 bits wide which is wrong. When using the KVM CPU model this causes an error, presumably because some of those bits are actually reserved, or the CPU or kernel realizes 255 bits is a bad value.
This change makes those values 48. |
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> |
10495:75d2f19fecce |
22-Oct-2014 |
Nilay Vaish <nilay@cs.wisc.edu> |
sim: revert 6709bbcf564d The identifier SYS_getdents is not available on Mac OS X. Therefore, its use results in compilation failure. It seems there is no straight forward way to implement the system call getdents using readdir() or similar C functions. Hence the commit 6709bbcf564d is being rolled back. |
10494:ffe6ab7141ab |
20-Oct-2014 |
Andreas Hansson <andreas.hansson@arm.com> |
x86: Fixes to avoid LTO warnings
This patch fixes a few minor issues that caused link-time warnings when using LTO, mainly for x86. The most important change is how the syscall array is created. Previously gcc and clang would complain that the declaration and definition types did not match. The organisation is now changed to match how it is done for ARM, moving the code that was previously in syscalls.cc into process.cc, and having a class variable pointing to the static array.
With these changes, there are no longer any warnings using gcc 4.6.3 with LTO. |
10484:6709bbcf564d |
20-Oct-2014 |
Michael Adler <Michael.Adler@intel.com> |
sim: implement getdents/getdents64 in user mode
Has been tested only for alpha. 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". |
10467:dcf27c8220ac |
16-Oct-2014 |
Andreas Hansson <andreas.hansson@arm.com> |
arch,x86,mem: Dynamically determine the ISA for Ruby store check
This patch makes the memory system ISA-agnostic by enabling the Ruby Sequencer to dynamically determine if it has to do a store check. To enable this check, the ISA is encoded as an enum, and the system is able to provide the ISA to the Sequencer at run time. |
10439:1bd64b294fe4 |
13-Jun-2014 |
Jiuyue Ma <majiuyue@ncic.ac.cn> |
x86: add LongModeAddressSize function to cpuid
LongModeAddressSize was used by kernel 2.6.28.4 for physical address validation, if not properly implemented, PCI resource allocation may failed because of ioremap failed:
- linux-2.6.28.4/arch/x86/mm/ioremap.c:27-30 27 static inline int phys_addr_valid(unsigned long addr) 28 { 29 return addr < (1UL << boot_cpu_data.x86_phys_bits); 30 }
- linux-2.6.28.4/arch/x86/kernel/cpu/common.c:475-482 475 #ifdef CONFIG_X86_64 476 if (c->extended_cpuid_level >= 0x80000008) { 477 u32 eax = cpuid_eax(0x80000008); 478 479 c->x86_virt_bits = (eax >> 8) & 0xff; 480 c->x86_phys_bits = eax & 0xff; 481 } 482 #endif
- linux-2.6.28.4/arch/x86/mm/ioremap.c:209-214 209 if (!phys_addr_valid(phys_addr)) { 210 printk(KERN_WARNING "ioremap: invalid physical address %llx\n", 211 (unsigned long long)phys_addr); 212 WARN_ON_ONCE(1); 213 return NULL; 214 }
This patch return 0x0000ffff for LongModeAddressSize, which guarantee phys_addr_valid never failed.
Committed by: Nilay Vaish <nilay@cs.wisc.edu> |
10417:710ee116eb68 |
27-Sep-2014 |
Andreas Hansson <andreas.hansson@arm.com> |
arch: Use const StaticInstPtr references where possible
This patch optimises the passing of StaticInstPtr by avoiding copying the reference-counting pointer. This avoids first incrementing and then decrementing the reference-counting pointer. |
10407:a9023811bf9e |
20-Sep-2014 |
Mitch Hayenga <mitch.hayenga@arm.com> |
alpha,arm,mips,power,x86,cpu,sim: Cleanup activate/deactivate
activate(), suspend(), and halt() used on thread contexts had an optional delay parameter. However this parameter was often ignored. Also, when used, the delay was seemily arbitrarily set to 0 or 1 cycle (no other delays were ever specified). This patch removes the delay parameter and 'Events' associated with them across all ISAs and cores. Unused activate logic is also removed. |
10405:7a618c07e663 |
20-Sep-2014 |
Andreas Hansson <andreas.hansson@arm.com> |
mem: Rename Bus to XBar to better reflect its behaviour
This patch changes the name of the Bus classes to XBar to better reflect the actual timing behaviour. The actual instances in the config scripts are not renamed, and remain as e.g. iobus or membus.
As part of this renaming, the code has also been clean up slightly, making use of range-based for loops and tidying up some comments. The only changes outside the bus/crossbar code is due to the delay variables in the packet. |
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. |
10318:98771a936b61 |
03-Sep-2014 |
Andreas Hansson <andreas.hansson@arm.com> |
arch: Cleanup unused ISA traits constants
This patch prunes unused values, and also unifies how the values are defined (not using an enum for ALPHA), aligning the use of int vs Addr etc.
The patch also removes the duplication of PageBytes/PageShift and VMPageSize/LogVMPageSize. For all ISAs the two pairs had identical values and the latter has been removed. |
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. |
10299:bec0c5ffc323 |
28-Aug-2014 |
Alexandru <alexandru.dutu@amd.com> |
mem: adding architectural page table support for SE mode This patch enables the use of page tables that are stored in system memory and respect x86 specification, in SE mode. It defines an architectural page table for x86 as a MultiLevelPageTable class and puts a placeholder class for other ISAs page tables, giving the possibility for future implementation. |
10292:933dfb9d8279 |
26-Aug-2014 |
Andreas Sandberg <Andreas.Sandberg@ARM.com> |
base: Replace the internal varargs stuff with C++11 constructs
We currently use our own home-baked support for type-safe variadic functions. This is confusing and somewhat limited (e.g., cprintf only supports a limited number of arguments). This changeset converts all uses of our internal varargs support to use C++11 variadic macros. |
10241:1444f2ee67d7 |
21-Jun-2014 |
Binh Pham <binhpham@cs.rutgers.edu> |
x86: fix table walker assertion
In a cycle, we could see a R and W requests corresponding to the same page walk being sent to the memory. During the cycle that assertion happens, we have 2 responses corresponding to the R and W above. We also have a 'read' variable to keep track of the inflight Read request, this gets reset to NULL right after we send out any R request; and gets set to the next R in the page walk when a response comes back.
The issue we are seeing here is when we get a response for W request, assert(!read) fires because we got a response for R request right before this, hence we set 'read' to NOT NULL value, pointing to the next R request in the pagewalk!
This work was done while Binh was an intern at AMD Research. |
10231:cb2e6950956d |
31-May-2014 |
Steve Reinhardt <steve.reinhardt@amd.com> |
style: eliminate equality tests with true and false
Using '== true' in a boolean expression is totally redundant, and using '== false' is pretty verbose (and arguably less readable in most cases) compared to '!'.
It's somewhat of a pet peeve, perhaps, but I had some time waiting for some tests to run and decided to clean these up.
Unfortunately, SLICC appears not to have the '!' operator, so I had to leave the '== false' tests in the SLICC code. |
10223:34f48d0dac97 |
12-May-2014 |
Steve Reinhardt <steve.reinhardt@amd.com> |
syscall emulation: clean up & comment SyscallReturn |
10201:30a20d2072c1 |
09-May-2014 |
Andrew Bardsley <Andrew.Bardsley@arm.com> |
cpu: Add flag name printing to StaticInst
This patch adds a the member function StaticInst::printFlags to allow all of an instruction's flags to be printed without using the individual is... member functions or resorting to exposing the 'flags' vector
It also replaces the enum definition StaticInst::Flags with a Python-generated enumeration and adds to the enum generation mechanism in src/python/m5/params.py to allow Enums to be placed in namespaces other than Enums or, alternatively, in wrapper structs allowing them to be inherited by other classes (so populating that class's name-space with the enumeration element names). |
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. |
10194:e6d2e8083d9c |
09-May-2014 |
Geoffrey Blake <Geoffrey.Blake@arm.com> |
arch, arm: Preserve TLB bootUncacheability when switching CPUs
The ARM TLBs have a bootUncacheability flag used to make some loads and stores become uncacheable when booting in FS mode. Later the flag is cleared to let those loads and stores operate as normal. When doing a takeOverFrom(), this flag's state is not preserved and is momentarily reset until the CPSR is touched. On single core runs this is a non-issue. On multi-core runs this can lead to crashes on the O3 CPU model from the following series of events: 1) takeOverFrom executed to switch from Atomic -> O3 2) All bootUncacheability flags are reset to true 3) Core2 tries to execute a load covered by bootUncacheability, it is flagged as uncacheable 4) Core2's load needs to replay due to a pipeline flush 3) Core1 core does an action on CPSR 4) The handling code for CPSR then checks all other cores to determine if bootUncacheability can be set to false 5) Asynchronously set bootUncacheability on all cores to false 6) Core2 replays load previously set as uncacheable and notices it is now flagged as cacheable, leads to a panic. This patch implements takeOverFrom() functionality for the ARM TLBs to preserve flag values when switching from atomic -> detailed. |
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. |
10112:1a2f64842044 |
16-Mar-2014 |
Andreas Sandberg <andreas@sandberg.pp.se> |
kvm: x86: Add support for x86 INIT and STARTUP handling
This changeset adds support for INIT and STARTUP IPI handling. We currently handle both of these interrupts in gem5 and transfer the state to KVM. Since we do not have a BIOS loaded, we pretend that the INIT interrupt suspends the CPU after reset. |
10100:24cfe67c0749 |
03-Mar-2014 |
Andreas Sandberg <andreas@sandberg.pp.se> |
x86: Setup correct TSL/TR segment attributes on INIT
The TSL/LDT & TR/TSS segments didn't contain valid attributes. This caused problems when transfering the state into KVM where invalid state is a no-go. Fixup the attributes with values from AMD's architecture programmer's manual. |
10058:32784c63de81 |
05-Feb-2014 |
Andreas Sandberg <andreas@sandberg.pp.se> |
x86: Fix x87 state transfer bug
Changeset 7274310be1bb (isa: clean up register constants) increased the value of NumFloatRegs, which triggered a bug in X86ISA::copyRegs(). This bug is caused by the x87 stack being copied twice since register indexes past NUM_FLOATREGS are mapped into the x87 stack relative to the top of the stack, which is undefined when the copy takes place.
This changeset updates the copyRegs() function to use access registers using the non-flattening interface, which guarantees that undesirable register folding does not happen. |
10057:09507a45c701 |
02-Feb-2014 |
Nikos Nikoleris <nikos.nikoleris@gmail.com> |
x86, kvm: Fix bug in the RFlags get and set functions
The getRFlags and setRFlags utility functions were not updated correctly when condition registers were separated into their own register class. This lead to incorrect state transfer in calls from kvm into the simulator (e.g., m5 readfile ended up in an infinite loop) and when switching CPUs. This patch makes these utility functions use getCCReg and setCCReg instead of getIntReg and setIntReg which read and write the integer registers.
Reviewed-by: Andreas Sandberg <andreas@sandberg.pp.se> |
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. |
10035:2a0fbecfeb14 |
24-Jan-2014 |
Andreas Hansson <andreas.hansson@arm.com> |
arch: Make all register index flattening const
This patch makes all the register index flattening methods const for all the ISAs. As part of this, readMiscRegNoEffect for ARM is also made const. |
10033:21c14a2b2117 |
24-Jan-2014 |
Ali Saidi <Ali.Saidi@ARM.com> |
arch, cpu: Add support for flattening misc register indexes.
With ARMv8 support the same misc register id results in accessing different registers depending on the current mode of the processor. This patch adds the same orthogonality to the misc register file as the others (int, float, cc). For all the othre ISAs this is currently a null-implementation.
Additionally, a system variable is added to all the ISA objects. |
10030:b531e328342d |
24-Jan-2014 |
Ali Saidi <Ali.Saidi@ARM.com> |
cpu: Add CPU support for generatig wake up events when LLSC adresses are snooped.
This patch add support for generating wake-up events in the CPU when an address that is currently in the exclusive state is hit by a snoop. This mechanism is required for ARMv8 multi-processor support. |
10018:c9ef81684179 |
24-Jan-2014 |
Andreas Hansson <andreas.hansson@arm.com> |
x86: Fix memory leak in table walker
This patch fixes a memory leak in the table walker, by ensuring that the sender state is deleted again if the request packet cannot be successfully sent. |
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. |
9920:028e4da64b42 |
15-Oct-2013 |
Yasuko Eckert <yasuko.eckert@amd.com> |
cpu: add a condition-code register class
Add a third register class for condition codes, in parallel with the integer and FP classes. No ISAs use the CC class at this point though. |
9918:2c7219e2d999 |
15-Oct-2013 |
Steve Reinhardt <steve.reinhardt@amd.com> |
cpu: rename *_DepTag constants to *_Reg_Base
Make these names more meaningful.
Specifically, made these substitutions:
s/FP_Base_DepTag/FP_Reg_Base/g; s/Ctrl_Base_DepTag/Misc_Reg_Base/g; s/Max_DepTag/Max_Reg_Index/g; |
9917:7274310be1bb |
15-Oct-2013 |
Steve Reinhardt <steve.reinhardt@amd.com> |
isa: clean up register constants
Clean up and add some consistency to the *_Base_DepTag constants as well as some related register constants: - Get rid of NumMiscArchRegs, TotalArchRegs, and TotalDataRegs since they're never used and not always defined - Set FP_Base_DepTag = NumIntRegs when possible (i.e., every case except x86) - Set Ctrl_Base_DepTag = FP_Base_DepTag + NumFloatRegs (this was true before, but wasn't always expressed that way) - Drastically reduce the number of arbitrary constants appearing in these calculations |
9913:7f43babfde6a |
15-Oct-2013 |
Steve Reinhardt <steve.reinhardt@amd.com> |
cpu: clean up architectural register classification
Move from a poorly documented scheme where the mapping of unified architectural register indices to register classes is hardcoded all over to one where there's an enum for the register classes and a function that encapsulates the mapping. |
9911:676d3dcf1cc2 |
15-Oct-2013 |
Andreas Sandberg <andreas@sandberg.pp.se> |
mem: Use a flag instead of address bit 63 for generic IPRs
Using address bit 63 to identify generic IPRs caused problems on SPARC, where IPRs are heavily used. This changeset redefines how generic IPRs are identified. Instead of using bit 63, we now use a separate flag (GENERIC_IPR) a memory request. |
9906:6c1d204d2d22 |
07-Oct-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
x86: enables lstat and readlink syscalls |
9898:2935441b0870 |
29-Sep-2013 |
Andreas Sandberg <andreas@sandberg.pp.se> |
x86: Add support for m5ops through a memory mapped interface
In order to support m5ops in virtualized environments, we need to use a memory mapped interface. This changeset adds support for that by reserving 0xFFFF0000-0xFFFFFFFF and mapping those to the generic IPR interface for m5ops. The mapping is done in the X86ISA::TLB::finalizePhysical() which means that it just works for all of the CPU models, including virtualized ones. |
9897:e105fbf799e7 |
29-Sep-2013 |
Andreas Sandberg <andreas@sandberg.pp.se> |
arch: Add support for m5ops using mmapped IPRs
In order to support m5ops on virtualized CPUs, we need to either intercept hypercall instructions or provide a memory mapped m5ops interface. Since KVM does not normally pass the results of hypercalls to userspace, which makes that method unfeasible. This changeset introduces support for m5ops using memory mapped mmapped IPRs. This is implemented by adding a class of "generic" IPRs which are handled by architecture-independent code. Such IPRs always have bit 63 set and are handled by handleGenericIprRead() and handleGenericIprWrite(). Platform specific impementations of handleIprRead and handleIprWrite should use GenericISA::isGenericIprAccess to determine if an IPR address should be handled by the generic code instead of the architecture-specific code. Platforms that don't need their own IPR support can reuse GenericISA::handleIprRead() and GenericISA::handleIprWrite(). |
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. |
9889:2dbc34e3b922 |
30-Sep-2013 |
Andreas Sandberg <andreas@sandberg.pp.se> |
x86: Add support routines to load and store 80-bit floats
The x87 FPU on x86 supports extended floating point. We currently handle all floating point on x86 as double and don't support 80-bit loads/stores. This changeset add a utility function to load and convert 80-bit floats to doubles (loadFloat80) and another function to store doubles as 80-bit floats (storeFloat80). Both functions use libfputils to do the conversion in software. The functions are currently not used, but are required to handle floating point in KVM and to properly support all x87 loads/stores. |
9887:8c3a49bd7423 |
30-Sep-2013 |
Andreas Sandberg <andreas@sandberg.pp.se> |
x86: Add limited support for extracting function call arguments
Add support for extracting the first 6 64-bit integer argumements to a function call in X86ISA::getArgument(). |
9880:3fda7e22041b |
19-Sep-2013 |
Andreas Sandberg <andreas@sandberg.pp.se> |
x86: Add support routines to convert between x87 tag formats
This changeset adds the convX87XTagsToTags() and convX87TagsToXTags() which convert between the tag formats in the FTW register and the format used in the xsave area. The conversion from to the x87 FTW representation is currently loses some information since it does not reconstruct the valid/zero/special flags which are not included in the xsave representation. |
9875:5cfad3486991 |
18-Sep-2013 |
Andreas Sandberg <andreas@sandberg.pp.se> |
x86: Expose the raw hash map of MSRs
This patch allows the KVM CPU module to initialize it's MSRs by enumerating the MSRs in the gem5 x86 implementation. |
9874:81c0ae6ffb9e |
18-Sep-2013 |
Andreas Sandberg <andreas@sandberg.pp.se> |
x86: Add support for checking the raw state of an interrupt
In order to support hardware virtualization, we need to be able to check if there are any interrupts pending irregardless of the rflags.intf value. This changeset adds the checkInterruptsRaw() method to the x86 interrupt control. It returns true if there are pending interrupts that can be delivered as soon as the CPU is ready for interrupt delivery. |
9873:530a50b10ebe |
18-Sep-2013 |
Andreas Sandberg <andreas@sandberg.pp.se> |
x86: Expose the interrupt vector in faults
This patch allows a hardware virtualized CPU to discover which interrupt to deliver to the guest. |
9818:ebd7d3e04b5f |
07-Aug-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
x86: add tlb checkpointing This patch adds checkpointing support to x86 tlb. It upgrades the cpt_upgrader.py script so that previously created checkpoints can be updated. It moves the checkpoint version to 6. |
9808:13ffc0066b76 |
11-Jul-2013 |
Steve Reinhardt <stever@gmail.com> |
dev: make BasicPioDevice take size in constructor
Instead of relying on derived classes explicitly assigning to the BasicPioDevice pioSize field, require them to pass a size value in to the constructor.
Committed by: Nilay Vaish <nilay@cs.wisc.edu> |
9807:63d7362bbdf2 |
11-Jul-2013 |
Steve Reinhardt <stever@gmail.com> |
dev: consistently end device classes in 'Device'
PciDev and IntDev stuck out as the only device classes that ended in 'Dev' rather than 'Device'. This patch takes care of that inconsistency.
Note that you may need to delete pre-existing files matching build/*/python/m5/internal/param_* as scons does not pick up indirect dependencies on imported python modules when generating params, and the PciDev -> PciDevice rename takes place in a file (dev/Device.py) that gets imported quite a bit.
Committed by: Nilay Vaish <nilay@cs.wisc.edu> |
9805:a4339e26b429 |
11-Jul-2013 |
Steve Reinhardt <stever@gmail.com> |
devices: make more classes derive from BasicPioDevice A couple of devices that have single fixed memory mapped regions were not derived from BasicPioDevice, when that's exactly the functionality that BasicPioDevice provides. This patch gets rid of a little bit of redundant code by making those devices actually do so.
Also fixed the weird case of X86ISA::Interrupts, where the class already did derive from BasicPioDevice but didn't actually use all the features it could have.
Committed by: Nilay Vaish <nilay@cs.wisc.edu> |
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. |
9763:f44ff0beb51b |
18-Jun-2013 |
Andreas Sandberg <andreas@sandberg.pp.se> |
x86: Initialize the MXCSR register |
9762:4574c5123153 |
18-Jun-2013 |
Andreas Sandberg <andreas@sandberg.pp.se> |
x86: Make the boot state VMX compliant
This patch allows the default x86 state to be used when by CPUs that use hardware virtualization. |
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. |
9759:8f1f1bdedf8c |
18-Jun-2013 |
Andreas Sandberg <andreas@sandberg.pp.se> |
x86: Add helper functions to access rflags
The rflags register is spread across several different registers. Most of the flags are stored in MISCREG_RFLAGS, but some are stored in microcode registers. When accessing RFLAGS, we need to reconstruct it from these registers. This changeset adds two functions, X86ISA::getRFlags() and X86ISA::setRFlags(), that take care of this magic. |
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. |
9751:e039a48eeb99 |
11-Jun-2013 |
Andreas Sandberg <andreas@sandberg.pp.se> |
x86: Fix bug when copying TSC on CPU handover
The TSC value stored in MISCREG_TSC is actually just an offset from the current CPU cycle to the actual TSC value. Writes with side-effects to the TSC subtract the current cycle count before storing the new value, while reads add the current cycle count. When switching CPUs, the current value is copied without side-effects. This works as long as the source and the destination CPUs have the same clock frequencies. The TSC will jump, sometimes backwards, if they have different clock frequencies. Most OSes assume the TSC to be monotonic and break when this happens.
This changeset makes sure that the TSC is copied with side-effects to ensure that the offset is updated to match the new CPU. |
9738:304a37519d11 |
03-Jun-2013 |
Andreas Sandberg <andreas@sandberg.pp.se> |
arch: Create a method to finalize physical addresses in the TLB
Some architectures (currently only x86) require some fixing-up of physical addresses after a normal address translation. This is usually to remap devices such as the APIC, but could be used for other memory mapped devices as well. When running the CPU in a using hardware virtualization, we still need to do these address fix-ups before inserting the request into the memory system. This patch moves this patch allows that code to be used by such CPUs without doing full address translations. |
9701:f02f3b6562d5 |
21-May-2013 |
Gedare Bloom <gedare@rtems.org> |
x86: Squash outstanding walks when instructions are squashed. This is the x86 version of the ARM changeset baa17ba80e06. In case an instruction has been squashed by the o3 cpu, this patch allows page table walker to avoid carrying out a pending translation that the instruction requested for. |
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. |
9679:df8e64db0fd8 |
23-Apr-2013 |
Michael Levenhagen <mjleven@sandia.gov> |
x86: corrects vsyscall address for gettimeofday The vsyscall address for gettimeofday is 0xffffffffff600000ul. The offset therefore should be 0x0 instead of 0x410. This can be cross checked with the file sysdeps/unix/sysv/linux/x86_64/gettimeofday.c in source of glibc.
Committed by: Nilay Vaish <nilay@cs.wisc.edu> |
9678:64dc8cc09e63 |
23-Apr-2013 |
Michael Levenhagen <mjleven@sandia.gov> |
x86: enable gettimeofday and getppid system calls
Committed by: Nilay Vaish <nilay@cs.wisc.edu> |
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> |
9623:327bf4242521 |
28-Mar-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
x86: changes to apic, keyboard It is possible that operating system wants to shutdown the lapic timer by writing timer's initial count to 0. This patch adds a check that the timer event is only scheduled if the count is 0.
The patch also converts few of the panics related to the keyboard to warnings since we are any way not interested in simulating the keyboard. |
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. |
9579:2a13ddb8bd0d |
07-Mar-2013 |
Andreas Hansson <andreas.hansson@arm.com> |
x86: Make the table walker reset the packet delay
This patch fixes an issue related to the table walker recycling packets that still have a bus delay that is not accounted for. For now, we simply ignore the values and reset them to zero. |
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. |
9554:406fbcf60223 |
19-Feb-2013 |
Andreas Hansson <andreas.hansson@arm.com> |
scons: Add warning for missing declarations
This patch enables warnings for missing declarations. To avoid issues with SWIG-generated code, the warning is only applied to non-SWIG code. |
9553:2e1e5364dae3 |
19-Feb-2013 |
Andreas Hansson <andreas.hansson@arm.com> |
scons: Add warning for overloaded virtual functions
Fix the ISA startup warnings |
9552:460cf901acba |
19-Feb-2013 |
Andreas Hansson <andreas.hansson@arm.com> |
scons: Add warning for overloaded virtual functions
A derived function with a different signature than a base class function will result in the base class function of the same name being hidden. The parameter list and return type for the member function in the derived class must match those of the member function in the base class, otherwise the function in the derived class will hide the function in the base class and no polymorphic behaviour will occur.
This patch addresses these warnings by ensuring a unique function name to avoid (unintentionally) hiding any functions. |
9544:1a075d9bc1bc |
19-Feb-2013 |
Andreas Hansson <andreas.hansson@arm.com> |
x86: Move APIC clock divider to Python
This patch moves the 16x APIC clock divider to the Python code to avoid the post-instantiation modifications to the clock. The x86 APIC was the only object setting the clock after creation time and this required some custom functionality and configuration. With this patch, the clock multiplier is moved to the Python code and the objects are instantiated with the appropriate clock. |
9542:683991c46ac8 |
19-Feb-2013 |
Andreas Hansson <andreas.hansson@arm.com> |
mem: Add predecessor to SenderState base class
This patch adds a predecessor field to the SenderState base class to make the process of linking them up more uniform, and enable a traversal of the stack without knowing the specific type of the subclasses.
There are a number of simplifications done as part of changing the SenderState, particularly in the RubyTest. |
9524:d6ffa982a68b |
15-Feb-2013 |
Andreas Sandberg <Andreas.Sandberg@ARM.com> |
sim: Add a system-global option to bypass caches
Virtualized CPUs and the fastmem mode of the atomic CPU require direct access to physical memory. We currently require caches to be disabled when using them to prevent chaos. This is not ideal when switching between hardware virutalized CPUs and other CPU models as it would require a configuration change on each switch. This changeset introduces a new version of the atomic memory mode, 'atomic_noncaching', where memory accesses are inserted into the memory system as atomic accesses, but bypass caches.
To make memory mode tests cleaner, the following methods are added to the System class:
* isAtomicMode() -- True if the memory mode is 'atomic' or 'direct'. * isTimingMode() -- True if the memory mode is 'timing'. * bypassCaches() -- True if caches should be bypassed.
The old getMemoryMode() and setMemoryMode() methods should never be used from the C++ world anymore. |
9478:ba80f7d4f452 |
22-Jan-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
x86, cpu: corrects 270c9a75e91f, take over decoder on cpu switch The changes made by the changeset 270c9a75e91f do not work well with switching of cpus. The problem is that decoder for the old thread context holds state that is not taken over by the new decoder.
This patch adds a takeOverFrom() function to Decoder class in each ISA. Except for x86, functions in other ISAs are blank. For x86, the function copies state from the old decoder to the new decoder. |
9473:da05a322fa4d |
15-Jan-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
x86 cpuid: enable clflush Note that clflush is only being enabled. It is not implemented in actual. A warning is printed if the cpu encounters a clflush instruction. We need to enable this instruction in cpuid since JRE 1.7 tests for it. |
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 |
9461:67a6ba6604c8 |
12-Jan-2013 |
Nilay Vaish <nilay@cs.wisc.edu> |
x86: Changes to decoder, corrects 9376 The changes made by the changeset 9376 were not quite correct. The patch made changes to the code which resulted in decoder not getting initialized correctly when the state was restored from a checkpoint.
This patch adds a startup function to each ISA object. For x86, this function sets the required state in the decoder. For other ISAs, the function is empty right now. |
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. |
9425:a24092160ec7 |
07-Jan-2013 |
Andreas Sandberg <Andreas.Sandberg@ARM.com> |
arch: Move the ISA object to a separate section
After making the ISA an independent SimObject, it is serialized automatically by the Python world. Previously, this just resulted in an empty ISA section. This patch moves the contents of the ISA to that section and removes the explicit ISA serialization from the thread contexts, which makes it behave like a normal SimObject during serialization.
Note: This patch breaks checkpoint backwards compatibility! Use the cpt_upgrader.py utility to upgrade old checkpoints to the new format. |
9423:43caa4ca5979 |
07-Jan-2013 |
Andreas Sandberg <Andreas.Sandberg@arm.com> |
arch: Add support for invalidating TLBs when draining
This patch adds support for the memInvalidate() drain method. TLB flushing is requested by calling the virtual flushAll() method on the TLB.
Note: This patch renames invalidateAll() to flushAll() on x86 and SPARC to make the interface consistent across all supported architectures. |
9384:877293183bdf |
07-Jan-2013 |
Andreas Sandberg <Andreas.Sandberg@arm.com> |
arch: Make the ISA class inherit from SimObject
The ISA class on stores the contents of ID registers on many architectures. In order to make reset values of such registers configurable, we make the class inherit from SimObject, which allows us to use the normal generated parameter headers.
This patch introduces a Python helper method, BaseCPU.createThreads(), which creates a set of ISAs for each of the threads in an SMT system. Although it is currently only needed when creating multi-threaded CPUs, it should always be called before instantiating the system as this is an obvious place to configure ID registers identifying a thread/CPU. |
9383:55fa95053ee8 |
07-Jan-2013 |
Ali Saidi <Ali.Saidi@ARM.com> |
o3: Fix issue with LLSC ordering and speculation
This patch unlocks the cpu-local monitor when the CPU sees a snoop to a locked address. Previously we relied on the cache to handle the locking for us, however some users on the gem5 mailing list reported a case where the cpu speculatively executes a ll operation after a pending sc operation in the pipeline and that makes the cache monitor valid. This should handle that case by invaliding the local monitor. |
9377:6f294e7a93d1 |
04-Jan-2013 |
Gabe Black <gblack@eecs.umich.edu> |
Decoder: Remove the thread context get/set from the decoder.
This interface is no longer used, and getting rid of it simplifies the decoders and code that sets up the decoders. The thread context had been used to read architectural state which was used to contextualize the instruction memory as it came in. That was changed so that the state is now sent to the decoders to keep locally if/when it changes. That's significantly more efficient.
Committed by: Nilay Vaish <nilay@cs.wisc.edu> |
9376:270c9a75e91f |
04-Jan-2013 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Move address based decode caching in front of the predecoder. The predecoder in x86 does a lot of work, most of which can be skipped if the decoder cache is put in front of it.
Committed by: Nilay Vaish <nilay@cs.wisc.edu> |
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. |
9338:97b4a2be1e5b |
02-Nov-2012 |
Andreas Sandberg <Andreas.Sandberg@arm.com> |
sim: Include object header files in SWIG interfaces
When casting objects in the generated SWIG interfaces, SWIG uses classical C-style casts ( (Foo *)bar; ). In some cases, this can degenerate into the equivalent of a reinterpret_cast (mainly if only a forward declaration of the type is available). This usually works for most compilers, but it is known to break if multiple inheritance is used anywhere in the object hierarchy.
This patch introduces the cxx_header attribute to Python SimObject definitions, which should be used to specify a header to include in the SWIG interface. The header should include the declaration of the wrapped object. We currently don't enforce header the use of the header attribute, but a warning will be generated for objects that do not use it. |
9329:3fe8438cbcfc |
02-Nov-2012 |
Dam Sunwoo <dam.sunwoo@arm.com> |
ISA: generic Linux thread info support
This patch takes the Linux thread info support scattered across different ISA implementations (currently in ARM, ALPHA, and MIPS), and unifies them into a single file.
Adds a few more helper functions to read out TGID, mm, etc.
ISA-specific information (e.g., ALPHA PCBB register) is now moved to the corresponding isa_traits.hh files. |
9294:8fb03b13de02 |
15-Oct-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
Port: Add protocol-agnostic ports in the port hierarchy
This patch adds an additional level of ports in the inheritance hierarchy, separating out the protocol-specific and protocl-agnostic parts. All the functionality related to the binding of ports is now confined to use BaseMaster/BaseSlavePorts, and all the protocol-specific parts stay in the Master/SlavePort. In the future it will be possible to add other protocol-specific implementations.
The functions used in the binding of ports, i.e. getMaster/SlavePort now use the base classes, and the index parameter is updated to use the PortID typedef with the symbolic InvalidPortID as the default. |
9292:e57c7d9736a5 |
15-Oct-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
Checkpoint: Make system serialize call children
This patch changes how the serialization of the system works. The base class had a non-virtual serialize and unserialize, that was hidden by a function with the same name for a number of subclasses (most likely not intentional as the base class should have been virtual). A few of the derived systems had no specialization at all (e.g. Power and x86 that simply called the System::serialize), but MIPS and Alpha adds additional symbol table entries to the checkpoint.
Instead of overriding the virtual function, the additional entries are now printed through a virtual function (un)serializeSymtab. The reason for not calling System::serialize from the two related systems is that a follow up patch will require the system to also serialize the PhysicalMemory, and if this is done in the base class if ends up being between the general parts and the specialized symbol table.
With this patch, the checkpoint is not modified, as the order of the segments is unchanged. |
9235:5aa4896ed55a |
19-Sep-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
AddrRange: Transition from Range<T> to AddrRange
This patch takes the final plunge and transitions from the templated Range class to the more specific AddrRange. In doing so it changes the obvious Range<Addr> to AddrRange, and also bumps the range_map to be AddrRangeMap.
In addition to the obvious changes, including the removal of redundant includes, this patch also does some house keeping in preparing for the introduction of address interleaving support in the ranges. The Range class is also stripped of all the functionality that is never used. |
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. |
9180:ee8d7a51651d |
28-Aug-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
Clock: Add a Cycles wrapper class and use where applicable
This patch addresses the comments and feedback on the preceding patch that reworks the clocks and now more clearly shows where cycles (relative cycle counts) are used to express time.
Instead of bumping the existing patch I chose to make this a separate patch, merely to try and focus the discussion around a smaller set of changes. The two patches will be pushed together though.
This changes done as part of this patch are mostly following directly from the introduction of the wrapper class, and change enough code to make things compile and run again. There are definitely more places where int/uint/Tick is still used to represent cycles, and it will take some time to chase them all down. Similarly, a lot of parameters should be changed from Param.Tick and Param.Unsigned to Param.Cycles.
In addition, the use of curTick is questionable as there should not be an absolute cycle. Potential solutions can be built on top of this patch. There is a similar situation in the o3 CPU where lastRunningCycle is currently counting in Cycles, and is still an absolute time. More discussion to be had in other words.
An additional change that would be appropriate in the future is to perform a similar wrapping of Tick and probably also introduce a Ticks class along with suitable operators for all these classes. |
9179:666bc9df1e49 |
28-Aug-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
Clock: Rework clocks to avoid tick-to-cycle transformations
This patch introduces the notion of a clock update function that aims to avoid costly divisions when turning the current tick into a cycle. Each clocked object advances a private (hidden) cycle member and a tick member and uses these to implement functions for getting the tick of the next cycle, or the tick of a cycle some time in the future.
In the different modules using the clocks, changes are made to avoid counting in ticks only to later translate to cycles. There are a few oddities in how the O3 and inorder CPU count idle cycles, as seen by a few locations where a cycle is subtracted in the calculation. This is done such that the regression does not change any stats, but should be revisited in a future patch.
Another, much needed, change that is not done as part of this patch is to introduce a new typedef uint64_t Cycle to be able to at least hint at the unit of the variables counting Ticks vs Cycles. This will be done as a follow-up patch.
As an additional follow up, the thread context still uses ticks for the book keeping of last activate and last suspend and this should probably also be changed into cycles as well. |
9165:f9e3dac185ba |
22-Aug-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
Packet: Remove NACKs from packet and its use in endpoints
This patch removes the NACK frrom the packet as there is no longer any module in the system that issues them (the bridge was the only one and the previous patch removes that).
The handling of NACKs was mostly avoided throughout the code base, by using e.g. panic or assert false, but in a few locations the NACKs were actually dealt with (although NACKs never occured in any of the regressions). Most notably, the DMA port will now never receive a NACK and the backoff time is thus never changed. As a consequence, the entire backoff mechanism (similar to a PCI bus) is now removed and the DMA port entirely relies on the bus performing the arbitration and issuing a retry when appropriate. This is more in line with e.g. PCIe.
Surprisingly, this patch has no impact on any of the regressions. As mentioned in the patch that removes the NACK from the bridge, a follow-up patch should change the request and response buffer size for at least one regression to also verify that the system behaves as expected when the bridge fills up. |
9162:019047ead23b |
21-Aug-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
Device: Remove overloaded pio_latency parameter
This patch removes the overloading of the parameter, which seems both redundant, and possibly incorrect.
The PciConfigAll now also uses a Param.Latency rather than a Param.Tick. For backwards compatibility it still sets the pio_latency to 1 tick. All the comments have also been updated to not state that it is in simticks when it is not necessarily the case. |
9157:e0bad9d7bbd6 |
21-Aug-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
Clock: Move the clock and related functions to ClockedObject
This patch moves the clock of the CPU, bus, and numerous devices to the new class ClockedObject, that sits in between the SimObject and MemObject in the class hierarchy. Although there are currently a fair amount of MemObjects that do not make use of the clock, they potentially should do so, e.g. the caches should at some point have the same clock as the CPU, potentially with a 1:n ratio. This patch does not introduce any new clock objects or object hierarchies (clusters, clock domains etc), but is still a step in the direction of having a more structured approach clock domains.
The most contentious part of this patch is the serialisation of clocks that some of the modules (but not all) did previously. This serialisation should not be needed as the clock is set through the parameters even when restoring from the checkpoint. In other words, the state is "stored" in the Python code that creates the modules.
The nextCycle methods are also simplified and the clock phase parameter of the CPU is removed (this could be part of a clock object once they are introduced). |
9149:ccf40995e142 |
15-Aug-2012 |
Ali Saidi <Ali.Saidi@ARM.com> |
sysemul: bump all linux versions of for syscal emulation to 3.0.
New tool chains seem to be looking for kernel versions newer than what this this was previously set to. Also take this opportunity to change the hostname we report in uname to sim.gem5.org. |
9146:a61fdbbc1d45 |
06-Aug-2012 |
Marc Orr <marc.orr@gmail.com> |
syscall emulation: Enabled getrlimit and getrusage for x86. Added/moved rlimit constants to base linux header file.
This patch is a revised version of Vince Weaver's earlier patch. |
9141:593fe25c86a6 |
06-Aug-2012 |
Marc Orr <marc.orr@gmail.com> |
syscall emulation: Clean up ioctl handling, and implement for x86.
Enable different whitelists for different OS/arch combinations, since some use the generic Linux definitions only, and others use definitions inherited from earlier Unix flavors on those architectures.
Also update x86 function pointers so ioctl is no longer unimplemented on that platform.
This patch is a revised version of Vince Weaver's earlier patch. |
9124:3476c436d248 |
22-Jul-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
X86 CPUID: Return false if unknown processor family |
9115:6a0ab7d94d4e |
11-Jul-2012 |
Brad Beckmann <Brad.Beckmann@amd.com> |
x86: added page size in bytes tlb entry function |
9112:6e854ea87bab |
11-Jul-2012 |
Marc Orr <marc.orr@gmail.com> |
syscall emulation: Add the futex system call. |
9111:f133ba654050 |
11-Jul-2012 |
Brad Beckmann <Brad.Beckmann@amd.com> |
x86: logSize and lruSeq are now optional ckpt params |
9090:e4e22240398f |
09-Jul-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
Port: Make getAddrRanges const
This patch makes getAddrRanges const throughout the code base. There is no reason why it should not be, and making it const prevents adding any unintentional side-effects. |
9064:d43eb1203aec |
07-Jun-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
X86 TLB: Add a missing = sign |
9062:21f92aa46e8f |
07-Jun-2012 |
Jayneel Gandhi <jayneel@cs.wisc.edu> |
X86 TLB: Fix for gcc 4.4.3 Due to recent changes to X86 TLB, gem5 stopped compiling on gcc version 4.4.3. This patch provides the fix for that problem. The patch is tested on gcc 4.4.3. The change is not required for more recent versions of gcc (like on 4.6.3). |
9057:f5ee56466b91 |
05-Jun-2012 |
Ali Saidi <Ali.Saidi@ARM.com> |
ISA: Back-out NoopMachInst as a StaticInstPtr change. |
9046:a1104cc13db2 |
05-Jun-2012 |
Ali Saidi <Ali.Saidi@ARM.com> |
O3: Clean up the O3 structures and try to pack them a bit better.
DynInst is extremely large the hope is that this re-organization will put the most used members close to each other. |
9044:904ddeecc653 |
05-Jun-2012 |
Ali Saidi <Ali.Saidi@ARM.com> |
sim: Remove FastAlloc
While FastAlloc provides a small performance increase (~1.5%) over regular malloc it isn't thread safe. After removing FastAlloc and using tcmalloc I've seen a performance increase of 12% over libc malloc when running twolf for ARM. |
9040:cdfe09f9bdee |
04-Jun-2012 |
Gabe Black <gblack@eecs.umich.edu> |
ISA: Turn the ExtMachInst NoopMachinst into the StaticInstPtr NoopStaticInst.
This eliminates a use of the ExtMachInst type outside of the ISAs. |
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. |
9037:2f84b98634ff |
04-Jun-2012 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Ensure that the decoder's internal ExtMachInst is completely initialized.
There are some bits of some fields of the ExtMachInst which are not actually used for anything but are included in the hash of an ExtMachInst for simplicity and efficiency. This change makes sure the decoder's internal working ExtMachInst is completely initialized, even these unused bits, so that there isn't any nondeterministic behavior, no valgrind messages about uninitialized variables, and no potential false misses/redundant entries in the decode cache. |
9028:f92783bcfd25 |
29-May-2012 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Use the HandyM5Reg to avoid a register read and some logic in the TLB. |
9026:971f35a65a00 |
27-May-2012 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Move the GDT down to where it can be accessed in 32 bit mode.
The GDT can be accessed by user level software running in compatibility mode by moving segment selectors into segment registers. The GDT needs to be set up at an address accessible in this mode. |
9025:545591665fc7 |
27-May-2012 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Truncate addresses to 32 bits except in 64 bit mode, not long mode.
A small change was added a while ago to keep addresses from overflowing 32 bits when larger addresses shouldn't be accessible to software. That change truncated when not in long mode, but really it should have truncated when not in 64 bit mode. The difference is whether compatibility mode is included, a mode that's supposed to act like a legacy 32 bit mode. |
9024:5851586f399c |
26-May-2012 |
Gabe Black <gblack@eecs.umich.edu> |
ISA,CPU: Generalize and split out the components of the decode cache.
This will allow it to be specialized by the ISAs. The existing caching scheme is provided by the BasicDecodeCache in the GenericISA namespace and is built from the generalized components. |
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. |
9020:14321ce30881 |
25-May-2012 |
Gabe Black <gblack@eecs.umich.edu> |
Decode: Make the Decoder class defined per ISA. |
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. |
8975:7f36d4436074 |
01-May-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
MEM: Separate requests and responses for timing accesses
This patch moves send/recvTiming and send/recvTimingSnoop from the Port base class to the MasterPort and SlavePort, and also splits them into separate member functions for requests and responses: send/recvTimingReq, send/recvTimingResp, and send/recvTimingSnoopReq, send/recvTimingSnoopResp. A master port sends requests and receives responses, and also receives snoop requests and sends snoop responses. A slave port has the reciprocal behaviour as it receives requests and sends responses, and sends snoop requests and receives snoop responses.
For all MemObjects that have only master ports or slave ports (but not both), e.g. a CPU, or a PIO device, this patch merely adds more clarity to what kind of access is taking place. For example, a CPU port used to call sendTiming, and will now call sendTimingReq. Similarly, a response previously came back through recvTiming, which is now recvTimingResp. For the modules that have both master and slave ports, e.g. the bus, the behaviour was previously relying on branches based on pkt->isRequest(), and this is now replaced with a direct call to the apprioriate member function depending on the type of access. Please note that send/recvRetry is still shared by all the timing accessors and remains in the Port base class for now (to maintain the current bus functionality and avoid changing the statistics of all regressions).
The packet queue is split into a MasterPort and SlavePort version to facilitate the use of the new timing accessors. All uses of the PacketQueue are updated accordingly.
With this patch, the type of packet (request or response) is now well defined for each type of access, and asserts on pkt->isRequest() and pkt->isResponse() are now moved to the appropriate send member functions. It is also worth noting that sendTimingSnoopReq no longer returns a boolean, as the semantics do not alow snoop requests to be rejected or stalled. All these assumptions are now excplicitly part of the port interface itself. |
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. |
8972:9403273a3b46 |
29-Apr-2012 |
Vince Weaver <vince@csl.cornell.edu> |
X86: Fix up the open system call's flags. |
8971:ac4a6b6cdc93 |
29-Apr-2012 |
Vince Weaver <vince@csl.cornell.edu> |
X86: Make gem5 ignore a bunch of syscalls. |
8962:397cbf4b11a6 |
24-Apr-2012 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Clear out duplicate TLB entries when adding a new one.
It's possible for two page table walks to overlap which will go in the same place in the TLB's trie. They would land on top of each other, so this change adds some code which detects if an address already matches an entry and if so throws away the new one. |
8961:ff4762285f99 |
23-Apr-2012 |
Gabe Black <gblack@eecs.umich.edu> |
ISA: Put parser generated files in a "generated" directory.
This is to avoid collision with non-generated files. |
8958:af0f1c66ff53 |
21-Apr-2012 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Report an error if there's no kernel object, don't blindly use it.
This way the user gets a nice message instead of a less nice segfault. |
8954:3c7232fec7fd |
15-Apr-2012 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix a tiny typo in the load/store microop constructor.
The parameter is _machInst, which is very similar to the member machInst. If machInst is used to pass the parameter to a lower level constructor, what really happens is that machInst is set to whatever it already happened to be, effectively leaving it uninitialized. |
8953:488d45aeb672 |
15-Apr-2012 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Use the AddrTrie class to implement the TLB.
This change also adjusts the TlbEntry class so that it stores the number of address bits wide a page is rather than its size in bytes. In other words, instead of storing 4K for a 4K page, it stores 12. 12 is easy to turn into 4K, but it's a little harder going the other way. |
8949:3fa1ee293096 |
14-Apr-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
MEM: Remove the Broadcast destination from the packet
This patch simplifies the packet by removing the broadcast flag and instead more firmly relying on (and enforcing) the semantics of transactions in the classic memory system, i.e. request packets are routed from a master to a slave based on the address, and when they are created they have neither a valid source, nor destination. On their way to the slave, the request packet is updated with a source field for all modules that multiplex packets from multiple master (e.g. a bus). When a request packet is turned into a response packet (at the final slave), it moves the potentially populated source field to the destination field, and the response packet is routed through any multiplexing components back to the master based on the destination field.
Modules that connect multiplexing components, such as caches and bridges store any existing source and destination field in the sender state as a stack (just as before).
The packet constructor is simplified in that there is no longer a need to pass the Packet::Broadcast as the destination (this was always the case for the classic memory system). In the case of Ruby, rather than using the parameter to the constructor we now rely on setDest, as there is already another three-argument constructor in the packet class.
In many places where the packet information was printed as part of DPRINTFs, request packets would be printed with a numeric "dest" that would always be -1 (Broadcast) and that field is now removed from the printing. |
8948:e95ee70f876c |
14-Apr-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
MEM: Separate snoops and normal memory requests/responses
This patch introduces port access methods that separates snoop request/responses from normal memory request/responses. The differentiation is made for functional, atomic and timing accesses and builds on the introduction of master and slave ports.
Before the introduction of this patch, the packets belonging to the different phases of the protocol (request -> [forwarded snoop request -> snoop response]* -> response) all use the same port access functions, even though the snoop packets flow in the opposite direction to the normal packet. That is, a coherent master sends normal request and receives responses, but receives snoop requests and sends snoop responses (vice versa for the slave). These two distinct phases now use different access functions, as described below.
Starting with the functional access, a master sends a request to a slave through sendFunctional, and the request packet is turned into a response before the call returns. In a system without cache coherence, this is all that is needed from the functional interface. For the cache-coherent scenario, a slave also sends snoop requests to coherent masters through sendFunctionalSnoop, with responses returned within the same packet pointer. This is currently used by the bus and caches, and the LSQ of the O3 CPU. The send/recvFunctional and send/recvFunctionalSnoop are moved from the Port super class to the appropriate subclass.
Atomic accesses follow the same flow as functional accesses, with request being sent from master to slave through sendAtomic. In the case of cache-coherent ports, a slave can send snoop requests to a master through sendAtomicSnoop. Just as for the functional access methods, the atomic send and receive member functions are moved to the appropriate subclasses.
The timing access methods are different from the functional and atomic in that requests and responses are separated in time and send/recvTiming are used for both directions. Hence, a master uses sendTiming to send a request to a slave, and a slave uses sendTiming to send a response back to a master, at a later point in time. Snoop requests and responses travel in the opposite direction, similar to what happens in functional and atomic accesses. With the introduction of this patch, it is possible to determine the direction of packets in the bus, and no longer necessary to look for both a master and a slave port with the requested port id.
In contrast to the normal recvFunctional, recvAtomic and recvTiming that are pure virtual functions, the recvFunctionalSnoop, recvAtomicSnoop and recvTimingSnoop have a default implementation that calls panic. This is to allow non-coherent master and slave ports to not implement these functions. |
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. |
8922:17f037ad8918 |
30-Mar-2012 |
William Wang <william.wang@arm.com> |
MEM: Introduce the master/slave port sub-classes in C++
This patch introduces the notion of a master and slave port in the C++ code, thus bringing the previous classification from the Python classes into the corresponding simulation objects and memory objects.
The patch enables us to classify behaviours into the two bins and add assumptions and enfore compliance, also simplifying the two interfaces. As a starting point, isSnooping is confined to a master port, and getAddrRanges to slave ports. More of these specilisations are to come in later patches.
The getPort function is not getMasterPort and getSlavePort, and returns a port reference rather than a pointer as NULL would never be a valid return value. The default implementation of these two functions is placed in MemObject, and calls fatal.
The one drawback with this specific patch is that it requires some code duplication, e.g. QueuedPort becomes QueuedMasterPort and QueuedSlavePort, and BusPort becomes BusMasterPort and BusSlavePort (avoiding multiple inheritance). With the later introduction of the port interfaces, moving the functionality outside the port itself, a lot of the duplicated code will disappear again. |
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. |
8888:befcf4d79fc1 |
09-Mar-2012 |
Geoffrey Blake <geoffrey.blake@arm.com> |
CheckerCPU: Add function stubs to non-ARM ISA source to compile with CheckerCPU
Making the CheckerCPU a runtime time option requires the code to be compatible with ISAs other than ARM. This patch adds the appropriate function stubs to allow compilation. |
8864:fe907afe14a3 |
01-Mar-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
x86: Fix x86 TLB and Walker This patch adds a function to X86 tlb that returns the walker port. This port is required for correctly connecting the walker ports for the cpu just switched in |
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. |
8852:c744483edfcf |
24-Feb-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
MEM: Make port proxies use references rather than pointers
This patch is adding a clearer design intent to all objects that would not be complete without a port proxy by making the proxies members rathen than dynamically allocated. In essence, if NULL would not be a valid value for the proxy, then we avoid using a pointer to make this clear.
The same approach is used for the methods using these proxies, such as loadSections, that now use references rather than pointers to better reflect the fact that NULL would not be an acceptable value (in fact the code would break and that is how this patch started out).
Overall the concept of "using a reference to express unconditional composition where a NULL pointer is never valid" could be done on a much broader scale throughout the code base, but for now it is only done in the locations affected by the proxies. |
8851:7e966326ef5b |
24-Feb-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
MEM: Move port creation to the memory object(s) construction
This patch moves all port creation from the getPort method to be consistently done in the MemObject's constructor. This is possible thanks to the Swig interface passing the length of the vector ports. Previously there was a mix of: 1) creating the ports as members (at object construction time) and using getPort for the name resolution, or 2) dynamically creating the ports in the getPort call. This is now uniform. Furthermore, objects that would not be complete without a port have these ports as members rather than having pointers to dynamically allocated ports.
This patch also enables an elaboration-time enumeration of all the ports in the system which can be used to determine the masterId. |
8839:eeb293859255 |
13-Feb-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
MEM: Introduce the master/slave port roles in the Python classes
This patch classifies all ports in Python as either Master or Slave and enforces a binding of master to slave. Conceptually, a master (such as a CPU or DMA port) issues requests, and receives responses, and conversely, a slave (such as a memory or a PIO device) receives requests and sends back responses. Currently there is no differentiation between coherent and non-coherent masters and slaves.
The classification as master/slave also involves splitting the dual role port of the bus into a master and slave port and updating all the system assembly scripts to use the appropriate port. Similarly, the interrupt devices have to have their int_port split into a master and slave port. The intdev and its children have minimal changes to facilitate the extra port.
Note that this patch does not enforce any port typing in the C++ world, it merely ensures that the Python objects have a notion of the port roles and are connected in an appropriate manner. This check is carried when two ports are connected, e.g. bus.master = memory.port. The following patches will make use of the classifications and specialise the C++ ports into masters and slaves. |
8837:d492e0bb7e95 |
12-Feb-2012 |
Gabe Black <gblack@eecs.umich.edu> |
X86: open flags: Another patch from Vince Weaver |
8832:247fee427324 |
12-Feb-2012 |
Ali Saidi <Ali.Saidi@ARM.com> |
mem: Add a master ID to each request object.
This change adds a master id to each request object which can be used identify every device in the system that is capable of issuing a request. This is part of the way to removing the numCpus+1 stats in the cache and replacing them with the master ids. This is one of a series of changes that make way for the stats output to be changed to python. |
8806:669e93d79ed9 |
29-Jan-2012 |
Gabe Black <gblack@eecs.umich.edu> |
Implement Ali's review feedback.
Try to decrease indentation, and remove some redundant FullSystem checks. |
8799:dac1e33e07b0 |
28-Jan-2012 |
Gabe Black <gblack@eecs.umich.edu> |
Merge with the main repo. |
8797:3202eb01e01e |
07-Jan-2012 |
Gabe Black <gblack@eecs.umich.edu> |
Another merge with the main repository. |
8781:dc1bc37bfb00 |
01-Nov-2011 |
Gabe Black <gblack@eecs.umich.edu> |
SE/FS: Get rid of the last use of FULL_SYSTEM in x86. |
8771:a2a4416cadc8 |
30-Oct-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Build the same files in SE and FS. |
8768:314eb1e2fa94 |
30-Oct-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Get rid of more uses of FULL_SYSTEM. |
8767:e575781f71b8 |
30-Oct-2011 |
Gabe Black <gblack@eecs.umich.edu> |
SE/FS: Make getProcessPtr available in both modes, and get rid of FULL_SYSTEMs. |
8753:8369dcf5b3a8 |
13-Oct-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Build vtophys in SE mode. |
8752:28e899b7dee3 |
13-Oct-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Turn on the page table walker in SE mode. |
8746:42d3554b1c35 |
09-Oct-2011 |
Gabe Black <gblack@eecs.umich.edu> |
Interrupts: Make the IO APIC go get the local APICs.
This is so they don't have to declare themselves to the IO APIC and don't have to have a pointer to the platform object. |
8745:575cab0db076 |
09-Oct-2011 |
Gabe Black <gblack@eecs.umich.edu> |
SE/FS: Build the Interrupt objects in SE mode. |
8742:9df38d259935 |
04-Oct-2011 |
Gabe Black <gblack@eecs.umich.edu> |
SE/FS: Put platform pointers in fewer objects.
Not all objects need a platform pointer, and having one creates a dependence on their being a platform object. This change removes the platform pointer to from the base device object and moves it into subclasses that actually need it. |
8740:253aeee61e66 |
30-Sep-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Remove FULL_SYSTEM from the x86 faults. |
8738:66bf413b0d5b |
30-Sep-2011 |
Gabe Black <gblack@eecs.umich.edu> |
SE/FS: Use the new FullSystem constant where possible. |
8737:770ccf3af571 |
31-Jan-2012 |
Koan-Sin Tan <koansin.tan@gmail.com> |
clang: Enable compiling gem5 using clang 2.9 and 3.0
This patch adds the necessary flags to the SConstruct and SConscript files for compiling using clang 2.9 and later (on Ubuntu et al and OSX XCode 4.2), and also cleans up a bunch of compiler warnings found by clang. Most of the warnings are related to hidden virtual functions, comparisons with unsigneds >= 0, and if-statements with empty bodies. A number of mismatches between struct and class are also fixed. clang 2.8 is not working as it has problems with class names that occur in multiple namespaces (e.g. Statistics in kernel_stats.hh).
clang has a bug (http://llvm.org/bugs/show_bug.cgi?id=7247) which causes confusion between the container std::set and the function Packet::set, and this is currently addressed by not including the entire namespace std, but rather selecting e.g. "using std::vector" in the appropriate places. |
8711:c7e14f52c682 |
17-Jan-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
MEM: Separate queries for snooping and address ranges
This patch simplifies the address-range determination mechanism and also unifies the naming across ports and devices. It further splits the queries for determining if a port is snooping and what address ranges it responds to (aiming towards a separation of cache-maintenance ports and pure memory-mapped ports). Default behaviours are such that most ports do not have to define isSnooping, and master ports need not implement getAddrRanges. |
8706:b1838faf3bcc |
17-Jan-2012 |
Andreas Hansson <andreas.hansson@arm.com> |
MEM: Add port proxies instead of non-structural ports
Port proxies are used to replace non-structural ports, and thus enable all ports in the system to correspond to a structural entity. This has the advantage of accessing memory through the normal memory subsystem and thus allowing any constellation of distributed memories, address maps, etc. Most accesses are done through the "system port" that is used for loading binaries, debugging etc. For the entities that belong to the CPU, e.g. threads and thread contexts, they wrap the CPU data port in a port proxy.
The following replacements are made: FunctionalPort > PortProxy TranslatingPort > SETranslatingPortProxy VirtualPort > FSTranslatingPortProxy |
8672:2c7ece076c8b |
09-Jan-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
X86: Add memory fence to I/O instructions |
8646:ef6cbf0f14dc |
05-Jan-2012 |
Nilay Vaish <nilay@cs.wisc.edu> |
X86 TLB: Move a DPRINTF to its correct place The DPRINTF for doing protection checks appears after the checks have been carried out. It is possible that the function returns while the checks are being carried, in which case the printf is missed out. This patch moves the DPRINTF before the checks. |
8626:19eed0015983 |
01-Dec-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix a bad segmentation check for the stack segment. |
8617:23eeda2c94f9 |
20-Nov-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the constant detecting three byte opcodes in the predecoder. |
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. |
8601:af28085882dc |
23-Oct-2011 |
Steve Reinhardt <steve.reinhardt@amd.com> |
SE: move page allocation from PageTable to Process
PageTable supported an allocate() call that called back through the Process to allocate memory, but did not have a method to map addresses without allocating new pages. It makes more sense for Process to do the allocation, so this method was renamed allocateMem() and moved to Process, and uses a new map() call on PageTable.
The remaining uses of the process pointer in PageTable were only to get the name and the PID, so by passing these in directly in the constructor, we can make PageTable completely independent of Process. |
8600:b0d7c64ada19 |
23-Oct-2011 |
Steve Reinhardt <steve.reinhardt@amd.com> |
syscall_emul: implement MAP_FIXED option to mmap() |
8591:8f23aeaf6a91 |
27-Sep-2011 |
Gabe Black <gblack@eecs.umich.edu> |
Faults: Replace calls to genMachineCheckFault with M5PanicFault. |
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. |
8582:dd79a696b91c |
23-Sep-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Move the MSR lookup table out of the TLB and into its own file.
Translating MSR addresses into MSR register indices took a lot of space in the TLB source and made looking around in that file awkward. This change moves the lookup into its own file to get it out of the way. It also changes it from a switch statement to a hash map which should hopefully be a little more efficient. |
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. |
8542:7230ff0738e3 |
09-Sep-2011 |
Gabe Black <gblack@eecs.umich.edu> |
StaticInst: Merge StaticInst and StaticInstBase.
Having two StaticInst classes, one nominally ISA dependent and the other ISA dependent, has not been historically useful and makes the StaticInst class more complicated that it needs to be. This change merges StaticInstBase into StaticInst. |
8539:7d3ea3c65c66 |
09-Sep-2011 |
Gabe Black <gblack@eecs.umich.edu> |
Stack: Tidy up some comments, a warning, and make stack extension consistent.
Do some minor cleanup of some recently added comments, a warning, and change other instances of stack extension to be like what's now being done for x86. |
8536:b3585da1f970 |
05-Sep-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make sure instruction flags are set properly even on 32 bit machines.
The way flag bits were being set for microops in x86 ended up implicitly calling the bitset constructor which was truncating flags beyond the width of an unsigned long. This change sets the bits in chunks which are always small enough to avoid being truncated. On 64 bit machines this should reduce to be the same as before, and on 32 bit machines it should work properly and not be unreasonably inefficient. |
8535:d04ae08781e2 |
05-Sep-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86,TLB: Make sure the "delayedResponse" variable is always set.
When an instruction is translated in the x86 TLB, a variable called delayedResponse is passed back and forth which tracks whether a translation could be completed immediately, or if there's going to be callback that will finish things up. If a read was to the internal memory space, memory mapped registers used to implement things like MSRs, the function hadn't yet gotten to where delayedResponse was set to false, it's default. That meant that the value was never set, and the TLB could start waiting for a callback that would never come. This change simply moves the assignment to above where control can divert to translateInt(). |
8534:09745e0c3dd9 |
02-Sep-2011 |
Lisa Hsu <Lisa.Hsu@amd.com> |
TLB: comments and a helpful warning.
Nothing big here, but when you have an address that is not in the page table request to be allocated, if it falls outside of the maximum stack range all you get is a page fault and you don't know why. Add a little warn() to explain it a bit. Also add some comments and alter logic a little so that you don't totally ignore the return value of checkAndAllocNextPage(). |
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. |
8466:9c754e3022b7 |
11-Jul-2011 |
Nilay Vaish<nilay@cs.wisc.edu> |
X86: implements copyRegs() function This patch implements the copyRegs() function for the x86 architecture. The patch assumes that no side effects other than TLB invalidation need to be considered while copying the registers. This may not hold true in future. |
8449:4be49ad47c74 |
05-Jul-2011 |
Gabe Black <gblack@eecs.umich.edu> |
ISA parser: Define operand types with a ctype directly. |
8444:56de1f9320df |
03-Jul-2011 |
Gabe Black <gblack@eecs.umich.edu> |
ExecContext: Rename the readBytes/writeBytes functions to readMem and writeMem.
readBytes and writeBytes had the word "bytes" in their names because they accessed blobs of bytes. This distinguished them from the read and write functions which handled higher level data types. Because those functions don't exist any more, this change renames readBytes and writeBytes to more general names, readMem and writeMem, which reflect the fact that they are how you read and write memory. This also makes their names more consistent with the register reading/writing functions, although those are still read and set for some reason. |
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. |
8335:9228e00459d4 |
02-Jun-2011 |
Nathan Binkert <nate@binkert.org> |
scons: rename TraceFlags to DebugFlags |
8332:23711432221f |
02-Jun-2011 |
Nathan Binkert <nate@binkert.org> |
copyright: clean up copyright blocks |
8323:fd20dcf1a9aa |
23-May-2011 |
Steve Reinhardt <steve.reinhardt@amd.com> |
config: revamp x86 config to avoid appending to SimObjectVectors A significant contributor to the need for adoptOrphanParams() is the practice of appending to SimObjectVectors which have already been assigned as children. This practice sidesteps the assignment operation for those appended SimObjects, which is where parent/child relationships are typically established.
This patch reworks the config scripts that use append() on SimObjectVectors, which all happen to be in the x86 system configuration. At some point in the future, I hope to make SimObjectVectors immutable (by deriving from tuple rather than list), at which time this patch will be necessary for correct operation. For now, it just avoids some of the warning messages that get printed in adoptOrphanParams(). |
8300:eb279d6e08a2 |
13-May-2011 |
Chander Sudanthi <chander.sudanthi@arm.com> |
Trace: Allow printing ASIDs and selectively tracing based on user/kernel code.
Debug flags are ExecUser, ExecKernel, and ExecAsid. ExecUser and ExecKernel are set by default when Exec is specified. Use minus sign with ExecUser or ExecKernel to remove user or kernel tracing respectively. |
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 |
8205:7ecbffb674aa |
04-Apr-2011 |
Ali Saidi <Ali.Saidi@ARM.com> |
ARM: Cleanup implementation of ITSTATE and put important code in PCState.
Consolidate all code to handle ITSTATE in the PCState object rather than touching a variety of structures/objects. |
8181:f789b9aac5f4 |
26-Mar-2011 |
Korey Sewell <ksewell@umich.edu> |
mips: cleanup ISA-specific code *** (1): get rid of expandForMT function MIPS is the only ISA that cares about having a piece of ISA state integrate multiple threads so add constants for MIPS and relieve the other ISAs from having to define this. Also, InOrder was the only core that was actively calling this function * * * (2): get rid of corespecific type The CoreSpecific type was used as a proxy to pass in HW specific params to a MIPS CPU, but since MIPS FS hasnt been touched for awhile, it makes sense to not force every other ISA to use CoreSpecific as well use a special reset function to set it. That probably should go in a PowerOn reset fault anyway. |
8138:f08692f2932e |
17-Mar-2011 |
Ali Saidi <Ali.Saidi@ARM.com> |
O3: Send instruction back to fetch on squash to seed predecoder correctly. |
8107:2e269d6fb3e6 |
02-Mar-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Use the npc as the pc when doing a nativetrace, not what M5 considers the pc. |
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 |
8105:906864dd0937 |
02-Mar-2011 |
Gabe Black <gblack@eecs.umich.edu> |
Spelling: Fix the a spelling error by changing mmaped to mmapped.
There may not be a formally correct spelling for the past tense of mmap, but mmapped is the spelling Google doesn't try to autocorrect. This makes sense because it mirrors the past tense of map->mapped and not the past tense of cape->caped. |
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. |
8098:59a19310ca65 |
27-Feb-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: If PCI config space is disabled, pass through to regular IO addresses. |
8096:021a0724c5c0 |
27-Feb-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Use regular read requests in the walker instead of read exclusive. |
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. |
7971:1e9c54ee5fd0 |
13-Feb-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Detect branches taking into account instruction size.
The size of the current instruction determines what the npc should be if there's no branching. |
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. |
7966:0dff1ff293d0 |
13-Feb-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: On a bad microopc, return a microop that returns a fault that panics.
This way a bad micropc will have to get all the way to commit before killing the simulation. This accounts for misspeculated branches. |
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. |
7964:be8762db2561 |
13-Feb-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Only reset npc to reflect instruction length once.
When redirecting fetch to handle branches, the npc of the current pc state needs to be left alone. This change makes the pc state record whether or not the npc already reflects a real value by making it keep track of the current instruction size, or if no size has been set. |
7933:e00ef55a2c49 |
07-Feb-2011 |
Tim Harris <tharris@microsoft.com> |
X86: Obey the wp bit of CR0.
If cr0.wp ("write protect" bit) is clear then do not generate page faults when writing to write-protected pages in kernel mode. |
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). |
7924:20dc73b1d980 |
07-Feb-2011 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix compiling vtophys.cc |
7914:eee5bb0fb8ea |
07-Feb-2011 |
Brad Beckmann <Brad.Beckmann@amd.com> |
m5: added work completed monitoring support |
7913:70b56a9ac1b2 |
07-Feb-2011 |
Brad Beckmann <Brad.Beckmann@amd.com> |
dev: fixed bugs to extend interrupt capability beyond 15 cores |
7912:a9f05ab40763 |
07-Feb-2011 |
Joel Hestness <hestness@cs.utexas.edu> |
x86: Timing support for pagetable walker
Move page table walker state to its own object type, and make the walker instantiate state for each outstanding walk. By storing the states in a queue, the walker is able to handle multiple outstanding timing requests. Note that functional walks use separate state elements. |
7902:aafb4a7384d4 |
07-Feb-2011 |
Joel Hestness <hestness@cs.utexas.edu> |
x86: Add checkpointing capability to arch components
Add checkpointing capability to the x86 interrupt device and the TLBs |
7901:f9b675da608a |
07-Feb-2011 |
Joel Hestness <hestness@cs.utexas.edu> |
x86: implements vtophys
Calls walker to look up virt. to phys. page mapping |
7900:8b05ff5ef958 |
07-Feb-2011 |
Joel Hestness <hestness@cs.utexas.edu> |
IntDev: packet latency fix
The x86 local apic now includes a separate latency parameter for interrupts. |
7899:38eca2df1124 |
07-Feb-2011 |
Joel Hestness <hestness@cs.utexas.edu> |
MessagePort: implement the virtual recvTiming function to avoid double pkt delete
Double packet delete problem is due to an interrupt device deleting a packet that the SimpleTimingPort also deletes. Since MessagePort descends from SimpleTimingPort, simply reimplement the failing code from SimpleTimingPort: recvTiming. |
7894:48d31b577847 |
07-Feb-2011 |
Brad Beckmann <Brad.Beckmann@amd.com> |
x86: set IsCondControl flag for the appropriate microops |
7878:d3e6ebcccabf |
04-Feb-2011 |
Gabe Black <gblack@eecs.umich.edu> |
Fault: Rename sim/fault.hh to fault_fwd.hh to distinguish it from faults.hh. |
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. |
7823:dac01f14f20f |
08-Jan-2011 |
Steve Reinhardt <steve.reinhardt@amd.com> |
Replace curTick global variable with accessor functions. This step makes it easy to replace the accessor functions (which still access a global variable) with ones that access per-thread curTick values. |
7811:a8fc35183c10 |
03-Jan-2011 |
Steve Reinhardt <steve.reinhardt@amd.com> |
Make commenting on close namespace brackets consistent.
Ran all the source files through 'perl -pi' with this script:
s|\s*(};?\s*)?/\*\s*(end\s*)?namespace\s*(\S+)\s*\*/(\s*})?|} // namespace $3|; s|\s*};?\s*//\s*(end\s*)?namespace\s*(\S+)\s*|} // namespace $2\n|; s|\s*};?\s*//\s*(\S+)\s*namespace\s*|} // namespace $1\n|;
Also did a little manual editing on some of the arch/*/isa_traits.hh files and src/SConscript. |
7799:5d0f62927d75 |
20-Dec-2010 |
Gabe Black <gblack@eecs.umich.edu> |
Style: Replace some tabs with spaces. |
7789:f455790bcd47 |
08-Dec-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Take advantage of new PCState syntax. |
7775:8e8fa2f28f2e |
23-Nov-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Obey the PCD (cache disable) bit in the page tables. |
7774:6246338ac1e9 |
22-Nov-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Mark IO space accesses as uncachable. |
7737:f4362ffd810f |
08-Nov-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix X86_FS compilation. |
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. |
7714:32496de51017 |
22-Oct-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement genMachineCheckFault.
Even though this shouldn't ever be used, it might get called speculatively and shouldn't panic. |
7713:ce987fa77797 |
22-Oct-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make syscall instructions non-speculative in SE. |
7707:e5b6f1157be3 |
16-Oct-2010 |
Gabe Black <gblack@eecs.umich.edu> |
GetArgument: Rework getArgument so that X86_FS compiles again.
When no size is specified for an argument, push the decision about what size to use into the ISA by passing a size of -1. |
7704:b5e6461ea242 |
10-Oct-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Detect attempts to load a 32 bit kernel and panic. |
7693:f1db1000d957 |
01-Oct-2010 |
Ali Saidi <Ali.Saidi@ARM.com> |
Debug: Implement getArgument() and function skipping for ARM.
In the process make add skipFuction() to handle isa specific function skipping instead of ifdefs and other ugliness. For almost all ABIs, 64 bit arguments can only start in even registers. Size is now passed to getArgument() so that 32 bit systems can make decisions about register selection for 64 bit arguments. The number argument is now passed by reference because getArgument() will need to change it based on the size of the argument and the current argument number.
For ARM, if the argument number is odd and a 64-bit register is requested the number must first be incremented to because all 64 bit arguments are passed in an even argument register. Then the number will be incremented again to access both halves of the argument. |
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. |
7680:f4eda002333b |
14-Sep-2010 |
Gabe Black <gblack@eecs.umich.edu> |
CPU: Trim unnecessary includes from some common files.
This reduces the scope of those includes and makes it less likely for there to be a dependency loop. This also moves the hashing functions associated with ExtMachInst objects to be with the ExtMachInst definitions and out of utility.hh. |
7678:f19b6a3a8cec |
13-Sep-2010 |
Gabe Black <gblack@eecs.umich.edu> |
Faults: Pass the StaticInst involved, if any, to a Fault's invoke method.
Also move the "Fault" reference counted pointer type into a separate file, sim/fault.hh. It would be better to name this less similarly to sim/faults.hh to reduce confusion, but fault.hh matches the name of the type. We could change Fault to FaultPtr to match other pointer types, and then changing the name of the file would make more sense. |
7676:92274350b953 |
10-Sep-2010 |
Nathan Binkert <nate@binkert.org> |
style: fix sorting of includes and whitespace in some files |
7660:adae3e7d325a |
27-Aug-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Change the copyright holder to AMD.
I accidentally left myself as a placeholder copyright holder on this file when I checked it in. Copyright should be assigned to AMD. |
7649:a6a6177a5ffa |
25-Aug-2010 |
Min Kyu Jeong <minkyu.jeong@arm.com> |
ARM: Fixed register flattening logic (FP_Base_DepTag was set too low)
When decoding a srs instruction, invalid mode encoding returns invalid instruction. This can happen when garbage instructions are fetched from mispredicted path |
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. |
7627:3b0c4b819651 |
23-Aug-2010 |
Gabe Black <gblack@eecs.umich.edu> |
ISA: Get rid of old, unused utility functions cluttering up the ISAs. |
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. |
7625:b1e69203bae9 |
23-Aug-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the TLB fault instead of panic when something is unmapped in SE mode.
The fault object, if invoked, would then panic. This is a bit less direct, but it means speculative execution won't panic the simulator. |
7624:3f32191bcf66 |
23-Aug-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the x86 ExtMachInst serializable with (UN)SERIALIZE_SCALAR. |
7623:072f8b921599 |
23-Aug-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Define a noop ExtMachInst. |
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. |
7580:6f77f379a594 |
23-Aug-2010 |
Ali Saidi <Ali.Saidi@arm.com> |
Loader: Make the load address mask be a parameter of the system rather than a constant.
This allows one two different OS requirements for the same ISA to be handled. Some OSes are compiled for a virtual address and need to be loaded into physical memory that starts at address 0, while other bare metal tools generate images that start at address 0. |
7573:ef798deb9a02 |
22-Aug-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Get rid of unused file arguments.hh. |
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. |
7533:b4aa25440bdd |
17-Aug-2010 |
Steve Reinhardt <steve.reinhardt@amd.com> |
x86: minor checkpointing bug fixes |
7532:3f6413fc37a2 |
17-Aug-2010 |
Steve Reinhardt <steve.reinhardt@amd.com> |
sim: revamp unserialization procedure
Replace direct call to unserialize() on each SimObject with a pair of calls for better control over initialization in both ckpt and non-ckpt cases.
If restoring from a checkpoint, loadState(ckpt) is called on each SimObject. The default implementation simply calls unserialize() if there is a corresponding checkpoint section, so we get backward compatibility for existing objects. However, objects can override loadState() to get other behaviors, e.g., doing other programmed initializations after unserialize(), or complaining if no checkpoint section is found. (Note that the default warning for a missing checkpoint section is now gone.)
If not restoring from a checkpoint, we call the new initState() method on each SimObject instead. This provides a hook for state initializations that are only required when *not* restoring from a checkpoint.
Given this new framework, do some cleanup of LiveProcess subclasses and X86System, which were (in some cases) emulating initState() behavior in startup via a local flag or (in other cases) erroneously doing initializations in startup() that clobbered state loaded earlier by unserialize(). |
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. |
7447:3fc243687abb |
03-Jun-2010 |
Steve Reinhardt <steve.reinhardt@amd.com> |
More minor gdb-related cleanup. Found several more stale includes and forward decls. |
7088:84bd4089958b |
25-May-2010 |
Nathan Binkert <nate@binkert.org> |
x86: put back code that I accidentally deleted |
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? |
7073:b8f2983a1c88 |
03-May-2010 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Update the base aux vector X86 processes install. |
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. |
6974:4d4903a3e7c5 |
12-Feb-2010 |
Timothy M. Jones <tjones1@inf.ed.ac.uk> |
O3PCU: Split loads and stores that cross cache line boundaries.
When each load or store is sent to the LSQ, we check whether it will cross a cache line boundary and, if so, split it in two. This creates two TLB translations and two memory requests. Care has to be taken if the first packet of a split load is sent but the second blocks the cache. Similarly, for a store, if the first packet cannot be sent, we must store the second one somewhere to retry later.
This modifies the LSQSenderState class to record both packets in a split load or store.
Finally, a new const variable, HasUnalignedMemAcc, is added to each ISA to indicate whether unaligned memory accesses are allowed. This is used throughout the changed code so that compiler can optimise away code dealing with split requests for ISAs that don't need them. |
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. |
6738:44010fc924d4 |
09-Nov-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Don't panic on faults on prefetches in SE mode. |
6737:b3ab661715ac |
09-Nov-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Explain what really didn't work with unmapped addresses in SE mode. |
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. |
6728:5037062422c8 |
08-Nov-2009 |
Nathan Binkert <nate@binkert.org> |
compile: wrap 64bit numbers with ULL() so 32bit compiles work In the isa_parser, we need to check case statements. |
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. |
6712:b95abe00dd9d |
04-Nov-2009 |
Nathan Binkert <nate@binkert.org> |
build: fix compile problems pointed out by gcc 4.4 |
6709:cf6a2dce697b |
04-Nov-2009 |
Vince Weaver <vince@csl.cornell.edu> |
X86: Enable x86_64 vsyscall support
64-bit vsyscall is different than 32-bit. There are only two syscalls, time and gettimeofday. On a real system, there is complicated code that implements these without entering the kernel. That would be complicated to implement in m5. Instead we just place code that calls the regular syscalls (this is how tools such as valgrind handle this case).
This is needed for the perlbmk spec2k benchmark. |
6708:036037ff8c3d |
04-Nov-2009 |
Vince Weaver <vince@csl.cornell.edu> |
X86: Hook up time syscall on X86
This has been tested and verified that it works. |
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. |
6704:bd221a106f08 |
30-Oct-2009 |
Vince Weaver <vince@csl.cornell.edu> |
X86: Hookup truncate/ftruncate syscalls on X86
This patch hooks up the truncate, ftruncate, truncate64 and ftruncate64 system calls on 32-bit and 64-bit X86.
These have been tested on both architectures.
ftruncate/ftruncate64 is needed for the f90 spec2k benchmarks. |
6701:4842482e1bd1 |
30-Oct-2009 |
Gabe Black <gblack@eecs.umich.edu> |
Syscalls: Make system calls access arguments like a stack, not an array.
When accessing arguments for a syscall, the position of an argument depends on the policies of the ISA, how much space preceding arguments took up, and the "alignment" of the index for this particular argument into the number of possible storate locations. This change adjusts getSyscallArg to take its index parameter by reference instead of value and to adjust it to point to the possible location of the next argument on the stack, basically just after the current one. This way, the rules for the new argument can be applied locally without knowing about other arguments since those have already been taken into account implicitly.
All system calls have also been changed to reflect the new interface. In a number of cases this made the implementation clearer since it encourages arguments to be collected in one place in order and then used as necessary later, as opposed to scattering them throughout the function or using them in place in long expressions. It also discourages using getSyscallArg over and over to retrieve the same value when a temporary would do the job. |
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. |
6695:1ac721a9edd0 |
20-Oct-2009 |
Vince Weaver <vince@csl.cornell.edu> |
hook up stat syscall on 64-bit x86_SE |
6694:1779b899c117 |
20-Oct-2009 |
Vince Weaver <vince@csl.cornell.edu> |
hook up stat64 syscall on 32-bit X86_SE |
6693:ce63047d1bd9 |
20-Oct-2009 |
Vince Weaver <vince@csl.cornell.edu> |
Fix stat64 structure on 32-bit X86_SE
The st_size entry was in the wrong place (see linux-2.6.29/arch/x86/include/asm/stat.h )
Also, the packed attribute is needed when compiling on a 64-bit machine, otherwise gcc adds extra padding that break the layout of the structure. |
6682:9c33426d404a |
19-Oct-2009 |
Vince Weaver <vince@csl.cornell.edu> |
Enable getuid and getgid related syscalls on X86_SE
I've tested these on x86 and they work as expected.
In theory for 32-bit x86 we should have some sort of special handling for the legacy 16-bit uid/gid syscalls, but in practice modern toolchains don't use the 16-bit versions, and m5 sets the uid and gid values to be less than 16-bits anyway.
This fix is needed for the perl spec2k benchmarks to run. |
6681:5a2b0322ea19 |
16-Oct-2009 |
vince@venchi.csl.cornell.edu |
Ignore rt_sigaction() syscalls on x86 and x86_64
This is currently how alpha handles this syscall.
This is needed for the gcc spec2k benchmarks to run. |
6676:e93e6d7b48a0 |
11-Oct-2009 |
vince@venchi.csl.cornell.edu |
Hook up the munmap() syscall for 32-bit x86.
This is straightforward, as munmapFunc() doesn't do anything. I've tested it with code running munmap() just in case. |
6673:f8453ff56966 |
02-Oct-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make successive anonymous mmaps move down in 32 bit SE mode Linux. |
6654:4c84e771cca7 |
22-Sep-2009 |
Nathan Binkert <nate@binkert.org> |
python: Move more code into m5.util allow SCons to use that code. Get rid of misc.py and just stick misc things in __init__.py Move utility functions out of SCons files and into m5.util Move utility type stuff from m5/__init__.py to m5/util/__init__.py Remove buildEnv from m5 and allow access only from m5.defines Rename AddToPath to addToPath while we're moving it to m5.util Rename read_command to readCommand while we're moving it Rename compare_versions to compareVersions while we're moving it. |
6648:9fb0ec9b5304 |
17-Sep-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the expected size of the immediate offset in MOV_MI. |
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. |
6640:30d92d2b66a1 |
16-Sep-2009 |
Vince Weaver <vince@csl.cornell.edu> |
Syscalls: Implement sysinfo() syscall. |
6638:26b4476e88cd |
15-Sep-2009 |
Vince Weaver <vince@csl.cornell.edu> |
[mq]: x86syscalls.patch |
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. |
6609:cc03c3761eb2 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Initialize the MXCSR in SE mode. |
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. |
6515:a785733109e7 |
17-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Create base classes for use with media/SIMD 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. |
6440:78d25904f66a |
05-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix how the parity flag is computed. It's only for the lowest order byte, and I had the polarity wrong. |
6437:ecebd7cccb06 |
03-Aug-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix segment override prefixes on instructions that use rbp/rsp and a displacement. |
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. |
6428:9e35cdc95e81 |
02-Aug-2009 |
Steve Reinhardt <steve.reinhardt@amd.com> |
Clean up some inconsistencies with Request flags. |
6365:a3037fa327a0 |
20-Jul-2009 |
Gabe Black <gblack@eecs.umich.edu> |
CPU: Separate out native trace into ISA (in)dependent code and SimObjects. |
6363:a17979b4e1ea |
20-Jul-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Move a displaced comment back to where it goes. |
6362:a8c27fe8b28a |
20-Jul-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add some misc registers for FP control state. |
6361:62de7e765286 |
17-Jul-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Set up a named constant for the "fold bit" for int register indices. |
6360:c3058964d06f |
17-Jul-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Tame the wilds of def operands. |
6359:1e4908b3e28e |
17-Jul-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Shift some register flattening work into the decoder. |
6346:2db698fc0354 |
16-Jul-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add range checks for miscreg indexing utility functions. |
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. |
6343:ad135618ef32 |
16-Jul-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix x87 stack register indexing. |
6340:99ca47c2130b |
13-Jul-2009 |
Derek Hower <drh5@cs.wisc.edu> |
merge |
6336:25635830e33c |
09-Jul-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fold the MiscRegFile all the way into the ISA object. |
6331:d947798df4a1 |
09-Jul-2009 |
Gabe Black <gblack@eecs.umich.edu> |
Get rid of the unused get(Data|Inst)Asid and (inst|data)Asid functions. |
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. |
6326:008930a4ace5 |
09-Jul-2009 |
Gabe Black <gblack@eecs.umich.edu> |
Registers: Eliminate the ISA defined RegFile class. |
6324:a535b2232c08 |
09-Jul-2009 |
Gabe Black <gblack@eecs.umich.edu> |
Registers: Move the PCs out of the ISAs and into the CPUs. |
6319:906b993e799e |
09-Jul-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Phase out x86's intregfile.hh. |
6316:51f3026d4cbb |
09-Jul-2009 |
Gabe Black <gblack@eecs.umich.edu> |
Registers: Eliminate the ISA defined integer register file. |
6315:c7295a4826d5 |
09-Jul-2009 |
Gabe Black <gblack@eecs.umich.edu> |
Registers: Eliminate the ISA defined floating point register file. |
6314:781969fbeca9 |
09-Jul-2009 |
Gabe Black <gblack@eecs.umich.edu> |
Registers: Get rid of the float register width parameter. |
6313:95f69a436c82 |
09-Jul-2009 |
Gabe Black <gblack@eecs.umich.edu> |
Registers: Add an ISA object which replaces the MiscRegFile. This object encapsulates (or will eventually) the identity and characteristics of the ISA in the CPU. |
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. |
6220:d774fa547141 |
26-May-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Really set up the GDT and various hidden/visible segment registers. |
6216:2f4020838149 |
17-May-2009 |
Nathan Binkert <nate@binkert.org> |
includes: sort includes again |
6215:9aed64c9f10f |
17-May-2009 |
Nathan Binkert <nate@binkert.org> |
includes: use base/types.hh not inttypes.h or stdint.h |
6214:1ec0ec8933ae |
17-May-2009 |
Nathan Binkert <nate@binkert.org> |
types: Move stuff for global types into src/base/types.hh |
6142:af13ed3bea48 |
26-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Precompute the default and alternate address and operand size and the stack size. |
6141:5babc3f3d8c8 |
26-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Split out the internal memory space from the regular translate() and precompute mode. |
6140:7a2dc7d41ee1 |
26-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Centralize updates to the handy M5 reg. |
6138:6cbdd76b93db |
26-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Tell the function that sends int messages who to send to instead of figuring it out itself. |
6137:d3ee4e0d690c |
26-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the local APICs register themselves with the IO APIC. This is a hack so that the IO APIC can figure out information about the local APICs. The local APICs still have no way to find out about each other. Ideally, when the local APICs update state that's relevant to somebody else, they'd send an update to everyone. Without being able to do a broadcast, that would still require knowing who else there is to notify. Other broadcasts are implemented using assumptions that may not always be true. |
6136:4f8af2f3185f |
26-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Record the initial APIC ID which identifies an APIC in M5. The ID as exposed to software can be changed. Tracking those changes in M5 would be cumbersome, especially since there's no guarantee the IDs will remain unique. |
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. |
6110:5051aafec8d5 |
21-Apr-2009 |
Steve Reinhardt <steve.reinhardt@amd.com> |
syscall: Resolve conflicts between m5threads and Gabe's recent SE changes. |
6109:083d8a76b7a6 |
21-Apr-2009 |
Daniel Sanchez <sanchezd@stanford.edu> |
Commit m5threads package.
This patch adds limited multithreading support in syscall-emulation mode, by using the clone system call. The clone system call works for Alpha, SPARC and x86, and multithreaded applications run correctly in Alpha and SPARC. |
6101:860df2c586a3 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the functions that manipulate large bit arrays in the local APIC. |
6100:a61ac4a3591d |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix up a copyright. |
6099:74e5e063a03d |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix how the TLB handles the storecheck flag. |
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. |
6075:1e1a874f9b17 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
SE mode: Make keeping track of the number of syscalls less hacky. |
6071:551b62d68f43 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Actually handle 16 bit mode modrm. |
6070:3b0f44b3e0e1 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the TEST instruction set all the flags it's supposed to. |
6069:cb5b778785a6 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement broadcast IPIs. |
6068:f70c90e29577 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the ordering of the vendor string reported by CPUID. |
6066:a9fe0813039f |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Only recognize the first startup IPI after INIT or reset. |
6065:0ad264b74ac2 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Use recvResponse to implement the idle bit in the Local APIC ICR. |
6064:46d327d42036 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add a function which gets called when an interrupt message has been delivered. |
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. |
6061:385c8482bf14 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Keep track of the pioAddr for the local APIC. |
6060:3d524dc980a8 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement far jmp. |
6059:d78df8ebc225 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Some segment selectors can be used when "NULL". |
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. |
6050:852ba59fa8d9 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: The startup IPI delivery mode is not reserved. |
6049:595b5016f6d5 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the STARTUP IPI. |
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. |
6046:8ac37d77fa74 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Start implementing the interrupt command register in the local APIC. |
6042:827bd9f03fdc |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Condense the startupCPU code. |
6041:949a8304e7f9 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Set the local APIC ID to something meaningful. |
6040:818914aeebc1 |
19-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Don't pretend to be an AMD CPU any more. We're not good enough at it. |
6027:3d7c2fe13f6a |
13-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix minor bug in the page table walker from TLB shuffling. |
6023:47b4fcb10c11 |
09-Apr-2009 |
Nathan Binkert <nate@binkert.org> |
tlb: More fixing of unified TLB |
6022:410194bb3049 |
09-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
tlb: Don't separate the TLB classes into an instruction TLB and a data TLB |
6020:0647c8b31a99 |
06-Apr-2009 |
Gabe Black <gblack@eecs.umich.edu> |
Merge ARM into the head. ARM will compile but may not actually work. |
6009:74bc713c71ce |
08-Mar-2009 |
Nathan Binkert <nate@binkert.org> |
build: fix compiler warnings in g++ 3.4 |
5980:0ea37baabfb0 |
27-Feb-2009 |
Nathan Binkert <nate@binkert.org> |
quell gcc 4.3 warning |
5979:d4cb6394049b |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Install the exit system call. |
5978:18d0b7e09d87 |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Install the 32 bit write system call. |
5977:4fff54ab52ae |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement shrd. |
5976:536125d85fa3 |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add a structure to allow mapping between the host and guest fstat formats. |
5975:24c0a4639d17 |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Don't treat the REX prefixes as prefixes in 32 bit modes. These are inc/dec instructions. |
5974:9ed073dd5214 |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Set address size to 64 bits when generating addresses internally. |
5973:07444c3d0a07 |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add a vsyscall page for 32 bit processes to use. |
5972:63611864864f |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement sysenter as a system call interface. |
5971:9c6391381323 |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add a 32 bit mmap2 system call. |
5970:5a891c0193c6 |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Install a 32 bit fstat64 system call. |
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. |
5964:dc4162b805f7 |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the 32 bit set_thread_area system call. |
5963:f541a09c5916 |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Set an initial value for the LDT selector. |
5962:e831b4360cfe |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Set up a space for a GDT in SE so we can set up TLS or LDT segments. |
5961:969fb3187eba |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Compute shift instruction flags correctly. |
5960:c9c465241d3b |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Install some 32 bit system calls. |
5959:1f14f6f5e613 |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Handle 32 bit system call arguments. |
5958:2d9737bf3c2f |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
Processes: Make getting and setting system call arguments part of a process object. |
5957:f24733876990 |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the int system call interface in the decoder. |
5956:a49d9413a9e8 |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Distinguish the width of values on the stack between 32 and 64 bit processes. |
5955:d35d2b28df38 |
27-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add a class to support 32 bit x86 linux process. |
5948:871fccb3fb7a |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement IST stack switching. |
5946:60bc62968888 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
ISA: Get rid of the get*RegName functions. |
5944:60d926a40afd |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
ISA: Set up common trace flags for tracing registers. |
5943:6a377b3689a6 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
ISA: Get rid of FlattenIntIndex function. |
5941:e8a1f956d76c |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
ISA: Use the "Stack" traceflag for DPRINTFs about the initial stack frame. |
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. |
5929:ecc99b9609c1 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add code to interpret debug register values. |
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. |
5925:1c9bea4afc53 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add classes that break out the bits of the DR6 and DR7 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. |
5917:7d7df4ad7486 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Actually check page protections. |
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. |
5910:62c521c36f61 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement inUserMode for x86. |
5909:ecbd27e5d1f8 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add a trace flag for tracing faults. |
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. |
5904:5c61233cbd53 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add a trace flag for the page table walker. |
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. |
5898:541097c69e22 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add makeAtomicResponse to the read/write functions of x86 devices. |
5897:29cecf4fe602 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the timing mode of the page table walker. |
5895:569e3b31a868 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the X86 TLB take advantage of delayed translations, and get rid of the fake TLB miss faults. |
5894:8091ac99341a |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
CPU: Implement translateTiming which defers to translateAtomic, and convert the timing simple CPU to use it. |
5892:a0ef4a6349dc |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the stupd microop not update registers in initiateAcc. |
5891:73084c6bb183 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
ISA: Replace the translate functions in the TLBs with translateAtomic. |
5890:bdef71accd68 |
25-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
CPU: Get rid of translate... functions from various interface classes. |
5881:73c0aaaaf186 |
23-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Pass whether an access was a read/write/fetch so faults can behave accordingly. |
5877:9fe574944f31 |
16-Feb-2009 |
Lisa Hsu <hsul@eecs.umich.edu> |
sycalls: implement mremap() and add DATA flag for getrlimit(). mremap has been tested on Alpha, compiles for the rest but not tested. I don't see why it wouldn't work though. |
5864:780dd1bead5c |
09-Feb-2009 |
Nathan Binkert <nate@binkert.org> |
copyright: This file need not have had the more restrictive copyright. |
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. |
5851:7bd73614dc1d |
01-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Keep track of the vector for all exceptions/faults. |
5848:441f446c76f6 |
01-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the time keeping of the Local APIC timer. |
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. |
5838:47ada83a8958 |
01-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add extended Intel MP entries correctly. |
5837:831413564d0c |
01-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Compute PCI config addresses correctly. |
5836:96b77f1f419a |
01-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Calculate flags based on the actual result. |
5825:da5f7e97958c |
01-Feb-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Set/correct some default values for x86 parameters. |
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. |
5811:219a39f70082 |
25-Jan-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the interrupt object wake up the CPU when something becomes pending. |
5810:606de5b3d116 |
25-Jan-2009 |
Gabe Black <gblack@eecs.umich.edu> |
CPU: Add a setCPU function to the interrupt objects. |
5800:19c06c037040 |
19-Jan-2009 |
Nathan Binkert <nate@binkert.org> |
tracing: Add help strings for some of the trace flags |
5793:321f79ddb500 |
13-Jan-2009 |
Nathan Binkert <nate@binkert.org> |
SCons: centralize the Dir() workaround for newer versions of scons. Scons bug id: 2006 M5 Bug id: 308 |
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. |
5787:e3a6f53818fe |
07-Jan-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Move the function that prints memory args into the inst base class. |
5786:07f635cab026 |
07-Jan-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Move the macroop class out of the isa description into C++. |
5785:5030d9fb0d70 |
07-Jan-2009 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Change indentation on microop disassembly. |
5771:f58d82cb8b7f |
07-Dec-2008 |
Lisa Hsu <hsul@eecs.umich.edu> |
imported patch aux-fix.patch |
5770:03c07a62074f |
06-Dec-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add add_entry back in. |
5758:9c3edb28db1a |
04-Dec-2008 |
Lisa Hsu <hsul@eecs.umich.edu> |
This patch pulls out the auxiliary vector struct from individual ISA LiveProcesses to the base LiveProcess definition so anyone can use them. |
5748:f28f020f3006 |
15-Nov-2008 |
Steve Reinhardt <Steve.Reinhardt@amd.com> |
syscalls: fix latent brk/obreak bug. Bogus calls to ChunkGenerator with negative size were triggering a new assertion that was added there. Also did a little renaming and cleanup in the process. |
5736:426510e758ad |
10-Nov-2008 |
Nathan Binkert <nate@binkert.org> |
mem: update stuff for changes to Packet and Request |
5727:8b9aaeac5bab |
10-Nov-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix completeAcc get call. |
5714:76abee886def |
02-Nov-2008 |
Lisa Hsu <hsul@eecs.umich.edu> |
Add in Context IDs to the simulator. From now on, cpuId is almost never used, the primary identifier for a hardware context should be contextId(). The concept of threads within a CPU remains, in the form of threadId() because sometimes you need to know which context within a cpu to manipulate. |
5713:993c7952b930 |
02-Nov-2008 |
Lisa Hsu <hsul@eecs.umich.edu> |
Make it so that all thread contexts are registered with the System, even in SE. Process still keeps track of the tc's it owns, but registration occurs with the System, this eases the way for system-wide context Ids based on registration. |
5712:199d31b47f7b |
02-Nov-2008 |
Lisa Hsu <hsul@eecs.umich.edu> |
make BaseCPU the provider of _cpuId, and cpuId() instead of being scattered across the subclasses. generally make it so that member data is _cpuId and accessor functions are cpuId(). The ID val comes from the python (default -1 if none provided), and if it is -1, the index of cpuList will be given. this has passed util/regress quick and se.py -n4 and fs.py -n4 as well as standard switch. |
5704:98224505352a |
21-Oct-2008 |
Nathan Binkert <nate@binkert.org> |
style: Use the correct m5 style for things relating to interrupts. |
5702:bf84e2fa05f7 |
20-Oct-2008 |
Ali Saidi <saidi@eecs.umich.edu> |
O3CPU: Undo Gabe's changes to remove hwrei and simpalcheck from O3 CPU. Removing hwrei causes the instruction after the hwrei to be fetched before the ITB/DTB_CM register is updated in a call pal call sys and thus the translation fails because the user is attempting to access a super page address.
Minimally, it seems as though some sort of fetch stall or refetch after a hwrei is required. I think this works currently because the hwrei uses the exec context interface, and the o3 stalls when that occurs.
Additionally, these changes don't update the LOCK register and probably break ll/sc. Both o3 changes were removed since a great deal of manual patching would be required to only remove the hwrei change. |
5697:83eee68e41bf |
17-Oct-2008 |
Nathan Binkert <nate@binkert.org> |
get rid of local variable that's only used in an assert so fast compiles |
5692:0d6addcde185 |
13-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Set the delayed commit flag in x86 microops appropriately. |
5691:28d6ff8b94e2 |
13-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the local APIC timer event generate an interrupt. |
5690:0fee2dde61d7 |
13-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the EOI register in the local APIC. |
5689:bd70811ff2ef |
13-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add some DPRINTFs to the local APIC. |
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. |
5684:3995b7c2ae86 |
13-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Panic when an unimplemented fault is invoked, rather than spinning forever |
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. |
5681:54c2d92f601e |
13-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the x86 interrupt fault kick off the interrupt microcode. |
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 |
5668:5b5a9f4203d1 |
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
Get rid of old RegContext code. |
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. |
5664:3b3756efad89 |
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
CPU: Create a microcode ROM object in the CPU which is defined by the ISA. |
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. |
5658:55f9947891fb |
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the ordering of special physical address ranges. |
5655:74f76480407f |
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the local APIC process interrupts and send them to the CPU. |
5654:340254de2031 |
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the local APIC handle interrupt messages from the IO APIC. |
5652:7e710528969a |
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the bases for x86 fault class public. |
5651:7f0c8006c3d7 |
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make APICs communicate through the memory system. |
5649:0e9c904551c1 |
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add a LocalApic trace flag. |
5648:e8abda6e0980 |
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the local APIC accessible through the memory system directly, and make the timer work. |
5647:b06b49498c79 |
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
Turn Interrupts objects into SimObjects. Also, move local APIC state into x86's Interrupts object. |
5646:0a488a147fb8 |
12-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
CPU: Eliminate the get_vec function. |
5641:51b7b8cf8083 |
11-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add an Intel MP table to the simulation. |
5628:f79155751e1d |
11-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
TLB: Make all tlbs derive from a common base class in both python and C++. |
5627:31eac202dbd1 |
11-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Create SimObjects in python and C++ to represent the ACPI system description tables. |
5625:ea7d3676ac8d |
11-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Create SimObjects in python and C++ to represent the Intel MP tables. |
5621:94ef04e6b396 |
10-Oct-2008 |
Nathan Binkert <nate@binkert.org> |
automerge |
5616:05fd71ca96db |
10-Oct-2008 |
Nathan Binkert <nate@binkert.org> |
misc: remove #include <cassert> from misc.hh since not everyone needs it. |
5615:1c4b9b1aa500 |
10-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Turn SMBios structures into simobjects. |
5614:2e7dbd0c4a2b |
10-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add a couple comments to the bios SConscript |
5612:1bd333953e49 |
10-Oct-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Move the smbios objects into a folder for BIOS objects. |
5610:0e1e9c186769 |
10-Oct-2008 |
Nathan Binkert <nate@binkert.org> |
SimObjects: Clean up handling of C++ namespaces. Make them easier to express by only having the cxx_type parameter which has the full namespace name, and drop the cxx_namespace thing. Add support for multiple levels of namespace. |
5606:6da7a58b0bc8 |
09-Oct-2008 |
Nathan Binkert <nate@binkert.org> |
eventq: convert all usage of events to use the new API. For now, there is still a single global event queue, but this is necessary for making the steps towards a parallelized m5. |
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. |
5570:13592d41f290 |
28-Sep-2008 |
Nathan Binkert <nate@binkert.org> |
gcc: Add extra parens to quell warnings. Even though we're not incorrect about operator precedence, let's add some parens in some particularly confusing places to placate GCC 4.3 so that we don't have to turn the warning off. Agreed that this is a bit of a pain for those users who get the order of operations correct, but it is likely to prevent bugs in certain cases. |
5567:8fc3b004b0df |
28-Sep-2008 |
Nathan Binkert <nate@binkert.org> |
arch: TheISA shouldn't really ever be used in the arch directory. We should always refer to the specific ISA in that arch directory. This is especially necessary if we're ever going to make it to the point where we actually have heterogeneous systems. |
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. |
5519:1afc8243e438 |
03-Aug-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make hint nops consume their modrm byte. |
5499:8bfc7650c344 |
01-Jul-2008 |
Ali Saidi <saidi@eecs.umich.edu> |
Remove delVirtPort() and make getVirtPort() only return cached version. |
5464:7eb7f0f5e79f |
14-Jun-2008 |
Nathan Binkert <nate@binkert.org> |
Fix various SWIG warnings |
5453:5048e2840f39 |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the cpuid processor identifier return a real string. |
5450:25e395a87745 |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the e820 table manually or automatically configurable from python. |
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. |
5441:3bd58ada2a9c |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add an event for the apic timer timeout. It doesn't get used yet. |
5440:51d24253bcd9 |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Rename the divide count register to divide configuration. |
5439:42ebf50376a2 |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the apic isr and irr work. |
5438:590fa2f9cfc7 |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the apic task priority register work. |
5437:6485497992ab |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the logical destination and destination format work. |
5436:88c458caa17f |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the apic ID register work. |
5435:a1a436131304 |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the apic version register work. |
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. |
5431:914851b44a74 |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: In non 64bit mode, throw a fault when a NULL segment is accessed. |
5430:b359555fea1d |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Take advantage of the new meta register. |
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. |
5419:a06807c228c1 |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Have all 8 machine check registers since the kernel assumes they're there. |
5418:501cb81c89df |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Bypass unaligned access support for register addressed MSRs. |
5417:84755f1f32d3 |
12-Jun-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Remove enforcement of APIC register access alignment. Panic if more than one register is accessed at a time. |
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. |
5407:c121bb9e86eb |
11-Jun-2008 |
Ali Saidi <saidi@eecs.umich.edu> |
X86: Fix building on *BSD hosts |
5406:fc680749b40e |
11-Jun-2008 |
Ali Saidi <saidi@eecs.umich.edu> |
SCons: Fix more SCons version issues |
5390:5bacb5dc3ef6 |
25-Mar-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Start implementing the south bridge stuff. |
5376:d4ff2cd8b1ac |
06-Mar-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Refine the local APIC. |
5374:4773d53f88a0 |
01-Mar-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Don't map the local APIC into the physical address space in SE mode. |
5360:02a3af203516 |
26-Feb-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Put in initial implementation of the local APIC. |
5359:8c6ff200e4c1 |
26-Feb-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the INVLPG instruction and the TIA microop. |
5358:e9acb84bbafb |
26-Feb-2008 |
Gabe Black <gblack@eecs.umich.edu> |
TLB: Make a TLB base class and put a virtual demapPage function in it. |
5357:eecb5fd0be62 |
26-Feb-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Get PCI config space to work, and adjust address space prefix numbering scheme. |
5334:5136aad50b97 |
23-Jan-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Put an SMBios/DMI table in memory. This is basically just the header right now, but there's an untested mechanism in place to fill out the table and make sure everything is updated correctly. |
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. |
5330:a1db38b0d8e8 |
21-Jan-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Use the existing boot_osflags instead of duplicating it. |
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. |
5324:88a0fa3fd6bf |
12-Jan-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the effective segment base shadow the regular one, not the selector. |
5323:75f7e6366a41 |
12-Jan-2008 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the IO ports work using extra physical address lines. Add a serial port. |
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. |
5304:a685ea6cc8b8 |
02-Dec-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the page not present panic more descriptive. |
5303:ee44ea10f32f |
02-Dec-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Start setting up the real mode data structure. |
5302:a1c79b171e23 |
02-Dec-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the 0xA0-0xA3 versions of mov use the right sized immediates. |
5301:fb2bd3bad47d |
02-Dec-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add in a missing "break". |
5300:bb8d707c4acb |
02-Dec-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Actually do something for the MiscRegFile clear function. |
5299:e61b9f2a9732 |
02-Dec-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Move startup code to the system object to initialize a Linux system. |
5298:a836e89a8ee0 |
02-Dec-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add a missing microcode file to the sconscript. |
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. |
5264:f290df2f2261 |
16-Nov-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix 32 bit compilation. |
5251:8de83cada19d |
15-Nov-2007 |
Korey Sewell <ksewell@umich.edu> |
Add CoreSpecific type to all archs |
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. |
5245:d94bb8af9f76 |
12-Nov-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Separate out the page table walker into it's own cc and hh. |
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. |
5242:280a99136427 |
12-Nov-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement tlb invalidation and make it happen some of the times it should. |
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. |
5237:6c819dbe8045 |
12-Nov-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Work on the page table walker, TLB, and related faults. |
5236:0050ad4fb3ef |
12-Nov-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement a page table walker. |
5234:55e0b1585b04 |
12-Nov-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Implement the startupCPU function. |
5233:0169cbcfb890 |
12-Nov-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make some of the bits of CR0 do what they're supposed to. |
5232:d3801ea2792e |
12-Nov-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Various fixes to indexing segmentation related registers |
5228:b08c9c42907a |
08-Nov-2007 |
Gabe Black <gblack@eecs.umich.edu> |
ISA parser: Make the isa parser generate MaxInstSrcRegs and MaxInstDestRegs. |
5202:ff56fa8c2091 |
31-Oct-2007 |
Steve Reinhardt <stever@gmail.com> |
String constant const-ness changes to placate g++ 4.2. Also some bug fixes in MIPS ISA uncovered by g++ warnings (Python string compares don't work in C++!). |
5192:582e583f8e7e |
31-Oct-2007 |
Ali Saidi <saidi@eecs.umich.edu> |
Traceflags: Add SCons function to created a traceflag instead of having one file with them all. |
5188:974af6059943 |
30-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Compile fixes for 32 bit/debug/opt. |
5184:8782de2949e5 |
25-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
TLB: Fix serialization issues with the tlb entries and make the page table store the process, not the system. |
5183:b4decf133fe4 |
25-Oct-2007 |
Ali Saidi <saidi@eecs.umich.edu> |
SE: Fix page table and system serialization, don't reinit process if this is a checkpoint restore. |
5182:9032bb4332eb |
23-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix X86_FS compilation. |
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. |
5154:7e6431213487 |
16-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Make the process objects use the Params structs in their constructors, and use a limit to check if access are on the stack. |
5152:20fc3ce35147 |
12-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Loader: Identify sections based on virtual addresses, and set the LoadAddrMask correctly for x86. |
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 |
5144:61cadaae546a |
09-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Get rid of stray Sparc DPRINTF |
5141:a3b0e3a8b83c |
07-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make x86 initialize more state. |
5140:2fd7f8477b4c |
07-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Work on the x86 tlb. |
5139:2422708d4fcb |
07-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make faults maintain an error code which gets pushed on the stack. |
5138:069bbeae1ef8 |
07-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Significantly filled out misc regs. |
5137:d79bc29c67c9 |
07-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make sure there are fewer spurious differences between instructions for caching purposes. |
5135:6ae576eada5c |
07-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make initCPU and startupCPU do something basic. |
5134:1cdc6876bc9e |
07-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the Interrupts class complain less. |
5133:a88763dd4a84 |
07-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Adjust the config scripts for x86 fs. |
5132:ad5e94876bfc |
07-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make an x86 system object. |
5130:2b64ee899f60 |
07-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: X86 FS compile fix. |
5127:478b14ffee54 |
04-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix the PageShift constant in isa_traits.hh (I thought I alread did this?) |
5126:d3cdea5e0fb3 |
03-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Merge with head. |
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. |
5124:3d8c50376609 |
03-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Start implementing the x86 tlb which will handle segmentation permission and limit checks and paging. |
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. |
5120:b999773ab81f |
03-Oct-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Predecoder: Clear out predecoder state on an ITLB fault. |
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. |
5100:7a0180040755 |
28-Sep-2007 |
Ali Saidi <saidi@eecs.umich.edu> |
Rename cycles() function to ticks() |
5087:b332ea3bc5e6 |
25-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix for uninitialized variables in stacktrace code. |
5086:e7913ffb379d |
24-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Get X86_FS to compile. |
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. |
5080:21158deacd95 |
19-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Enable the rename system call. |
5079:7f089bebb3e4 |
19-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Enable the unlink system call. |
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. |
5069:9cc257fa60cd |
10-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the isa parser run if any of the microcode files change. |
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. |
5050:119f943a8766 |
05-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add tracing to the floating point register file. |
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. |
5041:bc238252091f |
05-Sep-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Add in a file with floating point indexing which -should- have been in an earlier changeset. |
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. |
5038:c996bb7f1a6d |
31-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Get x86 to compile again after the simobject constructor change. |
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. |
5024:5122f2d189cb |
29-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the fp accessors not panic. |
5023:a2de21711253 |
29-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make x86 syscall return just stuff the return value in eax. |
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. |
5021:a93f2605b87c |
28-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Hook in an implementation for lseek. |
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. |
5019:2762e580f5db |
28-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Address translation: De-templatize the GenericTLB class. |
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. |
5004:7d94cedab264 |
26-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Address translation: Make the page table more flexible. The page table now stores actual page table entries. It is still a templated class here, but this will be corrected in the near future. |
5002:1b540e93ad34 |
26-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Remove x86 code that attempted to fix misaligned accesses. |
4997:e7380529bd2d |
26-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Address Translation: Make SE mode use an actual TLB/MMU for translation like FS. |
4954:17d8fe61258e |
07-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Added some missing parenthesis in the condition code calculation function. |
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. |
4866:9adc60769aed |
04-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make the open flags correct. |
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. |
4862:343e42c94e67 |
04-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Create a base enum value for indexing into a region of the miscregs. This lets you index into a group of registers without having to know explicitly which one is the lowest in that group. |
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. |
4856:2bd640bcb025 |
02-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Get rid of some debug warnings. Get rid of some warnings that were accidentally committed. |
4849:587b8d639313 |
02-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Finally get the x86 initial stack frame right. After very carefully reading through the Linux source, I'm pretty confident I now know -exactly- how the initial stack frame is constructed, filled, and aligned. |
4848:25a45e79f9ea |
02-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix special case with SIB index register and REX prefix. |
4847:41126ac89de7 |
01-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fix how the "cmd" parameter is set in se.py and remove hack in x86 process initialization code. |
4842:e792fcf17ff9 |
01-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Hide the irrelevant portions of the address components for load and store microops. |
4834:9480bde3ae6a |
01-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix for compilation bug with new cache code. |
4829:181a056d7dc4 |
01-Aug-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Get rid of initialization of R11 R11 is just junk after the start of exectuion because we're "returning" from an execve call and linux destroys the contents of rcx and r11 on system calls. |
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. |
4822:14be2bcab3b3 |
30-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: __pad0 should be a 4 byte pad, not a 4 long array of 4 byte pads. |
4821:7f7273018668 |
30-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Turn on the exit_group, exit, munmap, and write syscalls. |
4820:b39cc8dfb9b7 |
30-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Use an mmap base address that matches what an actual machine uses. |
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. |
4815:137ad0e13d3a |
30-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix up the stat structure. This probably still isn't right. |
4814:d398decc8de8 |
30-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Hook in the new instructions. |
4813:26dc797b819f |
30-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Turn on some system calls, and make the kernel version match my development machine. |
4812:c77e159a5633 |
30-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make sure FP_Base_DepTag is big enough to avoid trouble. |
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. |
4808:a6eb56576b27 |
30-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make merge and pick work with high bytes. Fix a sizing issue in pick. |
4807:ffa0076e235f |
30-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make register names in disassembly reflect high bytes. |
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". |
4803:e322a815fd25 |
30-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Missed a file for adding a bit to indicate that an REX prefix was present. |
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. |
4793:315e1db6bd39 |
29-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Initial stack frame fixes and constant shuffling. The initial stack frame for x86 is now substantially more correct. The fixes made here can be back ported to SPARC and possible the other ISAs as well. The auxiliary vector types were moved to the LiveProcess base class because they are independent of ISA. Some of the types may only apply to Linux, though, so they may have to be moved. |
4792:ccab7ba2c6e5 |
29-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Make limm use merge and allow overriding the data size. |
4789:0a12fbacfa31 |
29-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: return -return_value.value() on failure. |
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. |
4787:2939261c9870 |
29-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix a bug with merge Merge was returning the value to merge in, not the actual result of the merge. |
4786:47d848a9ccd9 |
29-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix a comment and adjust the stack base address. The stack base on my development machine starts one page below where it needs to. I don't know why it does, but I've duplicated it in m5. |
4777:2b8a37ac3882 |
28-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix up auxiliary vectors. The type constants should go into an architecture independent spot since they are universal to all Linux elf binaries. The right value for some of the vectors needs to be determined. Also, x86 does not store argc or argv_array_base in registers like some other architectures. |
4772:f08370a81812 |
27-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86: Fix argument register indexing. Code was assuming that all argument registers followed in order from ArgumentReg0. There is now an ArgumentReg array which is indexed to find the right index. There is a constant, NumArgumentRegs, which can be used to protect against using an invalid ArgumentReg. |
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. |
4765:226a0dd6d621 |
27-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add functions for mmap and brk. |
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. |
4759:60e820a327db |
24-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add a tgt_iovec structure to support writev, change the name of X86Linux to X86Linux64, add some syscalls. |
4758:2c3b4ec3396b |
24-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add a special case for "test" which needs an immediate even though everything else with it's opcode doesn't. Also made some spacing consistent. |
4757:fe9a94b007fc |
24-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
The groups of instructions hanging off opcode 71h, 72h, and 73h all need a byte immediate |
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. |
4738:257b04edb999 |
21-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add the "open" syscall. |
4737:772184138581 |
21-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fixed immediate byte accounting bug. |
4736:e8a7ea0eb279 |
21-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fixed displacement size bug. |
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. |
4729:99800622a6e8 |
20-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Make the "name" function const. |
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. |
4718:f01c326cd0f8 |
20-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fix code that computes displacement size. |
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. |
4713:c208cec7b5b3 |
20-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fixed width parameter and provided a parameter to flip the carry bit on subtract. |
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. |
4707:cc95d295c5ed |
18-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fix the overload which prints ExtMachInst in X86. |
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. |
4700:d76389633ddd |
18-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fill out the miscreg file and add types to miscregs.hh |
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. |
4694:22a8b9725e1b |
17-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Calculate the correct address size. |
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 |
4684:415ffc03c064 |
17-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Create a file to describe misc registers. Define bitfields, indices, etc. |
4682:3af5ab237724 |
17-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add a spot for the condition code portion of the flag register. This is stored in the integer register file so that it can be renamed, but it should be a misc reg. |
4680:09867d787df8 |
14-Jul-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Move bitunion code into it's own file. |
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. |
4614:17039a8237fa |
21-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fix a comment. |
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. |
4608:d61a3f34fc66 |
20-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fix a newly introduced bug where the predecoder wasn't picking up all the displacement. |
4607:262812b24142 |
20-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
X86 probably doesn't need a window save area. |
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. |
4604:3ffdd00e6c02 |
20-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Forgot to check these in... |
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. |
4593:16b19397172c |
19-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Make branches work by repopulating the predecoder every time through. This is probably fine as far as the predecoder goes, but the simple cpu might want to not refetch something it already has. That reintroduces the self modifying code problem though. |
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. |
4578:1d4607d6acf4 |
14-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add in some microregs. |
4577:83c056de021f |
14-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Sign extend byte immediates as well. There might need to be a fancier system in place to handle this in the future. |
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. |
4574:8cb8d5f0f74f |
14-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Move the high byte register indices to the right place. |
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. |
4569:8720f7848610 |
14-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Put the mode in the ExtMachInst. |
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. |
4564:d1fb13424616 |
13-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Seperate the pc-pc and the pc of the incoming bytes, and get rid of the "moreBytes" which just takes a MachInst.
src/arch/x86/predecoder.cc: Seperate the pc-pc and the pc of the incoming bytes, and get rid of the "moreBytes" which just takes a MachInst. Also make the "opSize" field describe the number of bytes and not the log of the number of bytes. |
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. |
4547:d246a7e3b814 |
12-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Reset the rex and legacy prefix components of the ExtMachInst as well. |
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 |
4540:c70c4253740c |
12-Jun-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add some dprintfs |
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 |
4434:2ea7b6e0b78f |
09-May-2007 |
Ali Saidi <saidi@eecs.umich.edu> |
fix the translating ports so it can add a page on a fault |
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. |
4365:f780e9fad124 |
10-Apr-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fix up the base x86 fault object and create a fault to be generated by unimplemented instructions in their microcode. This is useful if certain variations of an instruction are implemented, but, for instance, it's memory based versions aren't. |
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. |
4342:a9ff632aa660 |
06-Apr-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Clean up the code a little, fix (I think) a perceived problem with immediate sizes, and sign extend the 32-bit-acting-like-64-bit-immediates. |
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. |
4334:15815fd6b30c |
04-Apr-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Made x86 ExtMachInsts distinguishable from each other by defining a real == and a real hash function. |
4333:2517d5efc0e2 |
04-Apr-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Added all the different variations of the register names. |
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. |
4322:fc8fff65ef3a |
03-Apr-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Zero out ModRM if the byte isn't there, and fix some displacement size stuff. |
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. |
4277:d45c423889fa |
21-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
put the int register count in intregs.hh |
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 |
4251:7a6c6667937d |
15-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Refactor things a little. |
4250:e8c74e6ff758 |
15-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
File with the predecoder in it.
src/arch/x86/predecoder.cc: File for the x86 predecoder process function. |
4249:3a3be2b708b0 |
15-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Split the x86 "process" predecoder method into it's own file. |
4243:ba259d97bd84 |
15-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Changed warns to DPRINTFs and multiply by 8 where needed. |
4242:fb46542fbf36 |
15-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Added immediate value support, and fixed alot of bugs. This won't support 3 byte opcodes. |
4241:0a4218540c6d |
14-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Compile fix |
4240:cde9d7751cce |
14-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Merge zizzer.eecs.umich.edu:/bk/newmem into ahchoo.blinky.homelinux.org:/home/gblack/m5/newmem-x86
src/arch/mips/utility.hh: src/arch/x86/SConscript: Hand merge |
4202:f7a05daec670 |
11-Mar-2007 |
Nathan Binkert <binkertn@umich.edu> |
Rework the way SCons recurses into subdirectories, making it automatic. The point is that now a subdirectory can be added to the build process just by creating a SConscript file in it. The process has two passes. On the first pass, all subdirs of the root of the tree are searched for SConsopts files. These files contain any command line options that ought to be added for a particular subdirectory. On the second pass, all subdirs of the src directory are searched for SConscript files. These files describe how to build any given subdirectory. I have added a Source() function. Any file (relative to the directory in which the SConscript resides) passed to that function is added to the build. Clean up everything to take advantage of Source(). function is added to the list of files to be built. |
4194:af4f6022394b |
09-Mar-2007 |
Ali Saidi <saidi@eecs.umich.edu> |
implement ipi stufff for SPARC
src/arch/alpha/utility.hh: src/arch/mips/utility.hh: src/arch/sparc/utility.hh: src/arch/x86/utility.hh: add hook for system to startup the cpu or not... in the case of FS sparc, only the first cpu would get spunup.. the rest sit in an idle state until they get an ipi src/arch/sparc/isa/decoder.isa: handle writable bits of strandstatus register in miscregfile src/arch/sparc/miscregfile.hh: some constants for the strand status register src/arch/sparc/ua2005.cc: properly implement the strand status register src/dev/sparc/iob.cc: implement ipi generation properly src/sim/system.cc: call into the ISA to start the CPU (or not) |
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. |
4181:6edaeff44647 |
13-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Replaced makeExtMI with predecode. Removed the getOpcode function from StaticInst which only made sense for Alpha. Started implementing the x86 predecoder. |
4179:28e7887deba4 |
07-Mar-2007 |
Ali Saidi <saidi@eecs.umich.edu> |
Merge zizzer:/bk/newmem into zeep.pool:/tmp/newmem |
4172:141705d83494 |
07-Mar-2007 |
Ali Saidi <saidi@eecs.umich.edu> |
*MiscReg->*MiscRegNoEffect, *MiscRegWithEffect->*MiscReg |
4166:ecebe3ac19b4 |
06-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Get X86 to load an elf and start a process for it.
src/arch/x86/SConscript: Add in process source files. src/arch/x86/isa_traits.hh: Replace magic constant numbers with the x86 register names. src/arch/x86/miscregfile.cc: Make clear the miscreg file succeed. There aren't any misc regs, so clearing them is very easy. src/arch/x86/process.hh: An X86 process class. src/base/loader/elf_object.cc: Add in code to recognize x86 as an architecture. src/base/traceflags.py: Add an x86 traceflag src/sim/process.cc: Add in code to create an x86 process. src/arch/x86/intregs.hh: A file which declares names for the integer register indices. src/arch/x86/linux/linux.cc: src/arch/x86/linux/linux.hh: A very simple translation of SPARC's linux.cc and linux.hh. It's probably not correct for x86, but it might not be correct for SPARC either. src/arch/x86/linux/process.cc: src/arch/x86/linux/process.hh: An x86 linux process. The syscall table is split out into it's own file. src/arch/x86/linux/syscalls.cc: The x86 Linux syscall table and the uname function. src/arch/x86/process.cc: The x86 process base class. tests/test-progs/hello/bin/x86/linux/hello: An x86 hello world test binary. |
4162:baef0678866b |
05-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Fill out a stub version of the vtophys header file. |
4161:3147493a5c6b |
05-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add in NumGDBRegs so the constructor to the base class can get all it's arguments. |
4160:9d8268fca514 |
05-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Reorganize the floating point register file a little. |
4159:a3cc632b33d8 |
05-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add some new source files. |
4158:a3fb9e29c6ce |
05-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Stub decoder. This is probably even farther from finished than it looks... |
4154:3c6a2c86e8aa |
05-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Added missing include. |
4153:b35b679b9d92 |
05-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Added LargestRead type for x86. I might have picked the wrong type. |
4152:1876f150a173 |
05-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Stub implementation for x86. |
4151:1060a0f82bdd |
05-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Stub implementation for x86 |
4150:642840fd4652 |
05-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Added fault generation functions. I would still like to see these go away. The page table fault should be moved into sim/faults.hh because it's a "fake" m5 fault for se mode and shouldn't vary between architectures. |
4148:990c4663ce96 |
05-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Added stub implementations or prototypes for all the functions in this file. |
4147:df3e79e21b34 |
05-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Added in a missing include. |
4146:be24db98965d |
05-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Filled in a stub header file for setting the result of a syscall. |
4145:90fe789c9458 |
05-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Filled in a stub header file for a stacktrace object. I'm still not sure what this is for, and it probably doesn't work on anything but Alpha. |
4144:f54c2e74010c |
05-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Filled in a stub header file for remote gdb |
4143:ef26ef631d0c |
05-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Correct a typo |
4142:ff07c9c85f99 |
05-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Make the constructor (and all the other functions) public |
4141:80c20b40a01f |
05-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Various touch ups |
4140:69828098c39c |
05-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Added a missing include. |
4139:385be08269d7 |
05-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Added a missing include. |
4137:ef30fbcd55de |
04-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
x86 register file includes. |
4136:dedc5faa6050 |
04-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Include the x86 specific traits file. |
4135:58a8bd096de9 |
04-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Stub x86 Fault class which just panics. |
4134:4a44fbb23297 |
04-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
A new file for x86 specific parameters. This could be implemented as a sim object? |
4122:46bb8866b5b1 |
03-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Filled in with basic x86 stuff. Some things are missing, wrong, or nonsensical for x86. |
4121:0ec036be76a7 |
03-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Filled in with basic x86 information. Some things are missing, wrong, or non-sensical in x86. |
4120:3e09b5d32c45 |
03-Mar-2007 |
Gabe Black <gblack@eecs.umich.edu> |
Add build hooks for x86. |