arch-x86: Fix immediate based IN instructions.
These were loading the immediate into a temporary microcode register which would then be used to calculate the address to actually send to the memory system. Unfortunately this was using a data size equal to the address size, which would mean that the immediate would be merged into that temporary, leaving previously set bits intact. The data size *should* have been set to 8, and was already in other similar instructions. That forces the limm microop to overwrite the temporary entirely. Change-Id: I87c82b4677db768ccb6401a3dbda61317c014152 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/55286 Maintainer: Gabe Black <gabe.black@gmail.com> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Bobby Bruce <bbruce@ucdavis.edu>
This commit is contained in:
@@ -39,7 +39,7 @@
|
||||
microcode = '''
|
||||
def macroop IN_R_I {
|
||||
.adjust_imm trimImm(8)
|
||||
limm t1, imm, dataSize=asz
|
||||
limm t1, imm, dataSize=8
|
||||
mfence
|
||||
ld reg, intseg, [1, t1, t0], "IntAddrPrefixIO << 3", addressSize=8, \
|
||||
nonSpec=True
|
||||
|
||||
Reference in New Issue
Block a user