mips: Implement readRegOtherThread and setRegOtherThread directly.
authorGabe Black <gabeblack@google.com>
Sun, 28 Apr 2019 08:22:40 +0000 (08:22 +0000)
committerGabe Black <gabeblack@google.com>
Mon, 29 Apr 2019 22:57:37 +0000 (22:57 +0000)
commita632ee72adc7056786752973ecfa44ae01fca137
tree93af9b5d4265226a38b99724b1c3cfbd2a0f50de
parenta4d7473c4c3066eb85cd411d872eddf2991cf221
mips: Implement readRegOtherThread and setRegOtherThread directly.

These accessors can be implemented as helper functions within MIPS
without having to plumb them through a bunch of common interfaces.
There are a few problems with the way they were implemented which are
carried forward to this new implementation as well. That includes
hiding the register accesses from the ISA parser and therefore the
CPU's dependency tracking, potentially panicing or accessing a non
existent thread based on a possible set of input values, and modifying
register values even if an instruction is being executed speculatively.

Fixing these problems would be fairly involved and require changing how
dependencies are tracked in all the CPUs so that they can act across
threads, and also how registers are handled in the ISA description
itself.

The original implementation just punted on making this work in CPUs
other than the minor CPU (and potentially one or more CPU models that
were not and/or are not in the code base). Where as that implementation
might have paniced if these methods were called, this will attempt to
work, but may have incorrect behavior based on the limitations
described above. I'd consider this an acceptable tradeoff, at least for
the time being.

Change-Id: I94adceafb9812a8641c76ea3518c3285c31baf51
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18435
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Maintainer: Jason Lowe-Power <jason@lowepower.com>
Tested-by: kokoro <noreply+kokoro@google.com>
src/arch/mips/isa/decoder.isa
src/arch/mips/isa/formats/mt.isa
src/arch/mips/mt.hh