arch-x86: Use regIdx() instead of creating an InstRegIndex directly.
The microcode assembler provides a regIdx() wrapper which will wrap constants with an appropriate InstRegIndex constructor without having to do so manually. Change-Id: I782289bdfcbe4e3552ff44123dfce2ccc86f9266 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/42353 Reviewed-by: Gabe Black <gabe.black@gmail.com> Maintainer: Gabe Black <gabe.black@gmail.com> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
@@ -35,24 +35,24 @@
|
||||
|
||||
microcode = '''
|
||||
def macroop STMXCSR_M {
|
||||
rdval t1, "InstRegIndex(MISCREG_MXCSR)"
|
||||
rdval t1, regIdx("MISCREG_MXCSR")
|
||||
st t1, seg, sib, disp
|
||||
};
|
||||
|
||||
def macroop STMXCSR_P {
|
||||
rdval t1, "InstRegIndex(MISCREG_MXCSR)"
|
||||
rdval t1, regIdx("MISCREG_MXCSR")
|
||||
rdip t7
|
||||
st t1, seg, riprel, disp
|
||||
};
|
||||
|
||||
def macroop LDMXCSR_M {
|
||||
ld t1, seg, sib, disp
|
||||
wrval "InstRegIndex(MISCREG_MXCSR)", t1
|
||||
wrval regIdx("MISCREG_MXCSR"), t1
|
||||
};
|
||||
|
||||
def macroop LDMXCSR_P {
|
||||
rdip t7
|
||||
ld t1, seg, riprel, disp
|
||||
wrval "InstRegIndex(MISCREG_MXCSR)", t1
|
||||
wrval regIdx("MISCREG_MXCSR"), t1
|
||||
};
|
||||
'''
|
||||
|
||||
@@ -43,16 +43,16 @@ storeX87RegTemplate = '''
|
||||
'''
|
||||
|
||||
loadXMMRegTemplate = '''
|
||||
ldfp "InstRegIndex(FLOATREG_XMM_LOW(%(idx)i))", seg, %(mode)s, \
|
||||
ldfp regIdx("FLOATREG_XMM_LOW(%(idx)i)"), seg, %(mode)s, \
|
||||
"DISPLACEMENT + 160 + 16 * %(idx)i", dataSize=8
|
||||
ldfp "InstRegIndex(FLOATREG_XMM_HIGH(%(idx)i))", seg, %(mode)s, \
|
||||
ldfp regIdx("FLOATREG_XMM_HIGH(%(idx)i)"), seg, %(mode)s, \
|
||||
"DISPLACEMENT + 160 + 16 * %(idx)i + 8", dataSize=8
|
||||
'''
|
||||
|
||||
storeXMMRegTemplate = '''
|
||||
stfp "InstRegIndex(FLOATREG_XMM_LOW(%(idx)i))", seg, %(mode)s, \
|
||||
stfp regIdx("FLOATREG_XMM_LOW(%(idx)i)"), seg, %(mode)s, \
|
||||
"DISPLACEMENT + 160 + 16 * %(idx)i", dataSize=8
|
||||
stfp "InstRegIndex(FLOATREG_XMM_HIGH(%(idx)i))", seg, %(mode)s, \
|
||||
stfp regIdx("FLOATREG_XMM_HIGH(%(idx)i)"), seg, %(mode)s, \
|
||||
"DISPLACEMENT + 160 + 16 * %(idx)i + 8", dataSize=8
|
||||
'''
|
||||
|
||||
@@ -80,10 +80,10 @@ fxsaveCommonTemplate = """
|
||||
rdxftw t1
|
||||
st t1, seg, %(mode)s, "DISPLACEMENT + 4", dataSize=1
|
||||
|
||||
rdval t1, "InstRegIndex(MISCREG_FOP)"
|
||||
rdval t1, regIdx("MISCREG_FOP")
|
||||
st t1, seg, %(mode)s, "DISPLACEMENT + 6", dataSize=2
|
||||
|
||||
rdval t1, "InstRegIndex(MISCREG_MXCSR)"
|
||||
rdval t1, regIdx("MISCREG_MXCSR")
|
||||
st t1, seg, %(mode)s, "DISPLACEMENT + 16 + 8", dataSize=4
|
||||
|
||||
# MXCSR_MASK, software assumes the default (0xFFBF) if 0.
|
||||
@@ -92,24 +92,24 @@ fxsaveCommonTemplate = """
|
||||
""" + storeAllDataRegs
|
||||
|
||||
fxsave32Template = """
|
||||
rdval t1, "InstRegIndex(MISCREG_FIOFF)"
|
||||
rdval t1, regIdx("MISCREG_FIOFF")
|
||||
st t1, seg, %(mode)s, "DISPLACEMENT + 8", dataSize=4
|
||||
|
||||
rdval t1, "InstRegIndex(MISCREG_FISEG)"
|
||||
rdval t1, regIdx("MISCREG_FISEG")
|
||||
st t1, seg, %(mode)s, "DISPLACEMENT + 12", dataSize=2
|
||||
|
||||
rdval t1, "InstRegIndex(MISCREG_FOOFF)"
|
||||
rdval t1, regIdx("MISCREG_FOOFF")
|
||||
st t1, seg, %(mode)s, "DISPLACEMENT + 16 + 0", dataSize=4
|
||||
|
||||
rdval t1, "InstRegIndex(MISCREG_FOSEG)"
|
||||
rdval t1, regIdx("MISCREG_FOSEG")
|
||||
st t1, seg, %(mode)s, "DISPLACEMENT + 16 + 4", dataSize=2
|
||||
""" + fxsaveCommonTemplate
|
||||
|
||||
fxsave64Template = """
|
||||
rdval t1, "InstRegIndex(MISCREG_FIOFF)"
|
||||
rdval t1, regIdx("MISCREG_FIOFF")
|
||||
st t1, seg, %(mode)s, "DISPLACEMENT + 8", dataSize=8
|
||||
|
||||
rdval t1, "InstRegIndex(MISCREG_FOOFF)"
|
||||
rdval t1, regIdx("MISCREG_FOOFF")
|
||||
st t1, seg, %(mode)s, "DISPLACEMENT + 16 + 0", dataSize=8
|
||||
""" + fxsaveCommonTemplate
|
||||
|
||||
@@ -126,36 +126,36 @@ fxrstorCommonTemplate = """
|
||||
wrxftw t1
|
||||
|
||||
ld t1, seg, %(mode)s, "DISPLACEMENT + 6", dataSize=2
|
||||
wrval "InstRegIndex(MISCREG_FOP)", t1
|
||||
wrval regIdx("MISCREG_FOP"), t1
|
||||
|
||||
ld t1, seg, %(mode)s, "DISPLACEMENT + 16 + 8", dataSize=4
|
||||
wrval "InstRegIndex(MISCREG_MXCSR)", t1
|
||||
wrval regIdx("MISCREG_MXCSR"), t1
|
||||
""" + loadAllDataRegs
|
||||
|
||||
fxrstor32Template = """
|
||||
ld t1, seg, %(mode)s, "DISPLACEMENT + 8", dataSize=4
|
||||
wrval "InstRegIndex(MISCREG_FIOFF)", t1
|
||||
wrval regIdx("MISCREG_FIOFF"), t1
|
||||
|
||||
ld t1, seg, %(mode)s, "DISPLACEMENT + 12", dataSize=2
|
||||
wrval "InstRegIndex(MISCREG_FISEG)", t1
|
||||
wrval regIdx("MISCREG_FISEG"), t1
|
||||
|
||||
ld t1, seg, %(mode)s, "DISPLACEMENT + 16 + 0", dataSize=4
|
||||
wrval "InstRegIndex(MISCREG_FOOFF)", t1
|
||||
wrval regIdx("MISCREG_FOOFF"), t1
|
||||
|
||||
ld t1, seg, %(mode)s, "DISPLACEMENT + 16 + 4", dataSize=2
|
||||
wrval "InstRegIndex(MISCREG_FOSEG)", t1
|
||||
wrval regIdx("MISCREG_FOSEG"), t1
|
||||
""" + fxrstorCommonTemplate
|
||||
|
||||
fxrstor64Template = """
|
||||
limm t2, 0, dataSize=8
|
||||
|
||||
ld t1, seg, %(mode)s, "DISPLACEMENT + 8", dataSize=8
|
||||
wrval "InstRegIndex(MISCREG_FIOFF)", t1
|
||||
wrval "InstRegIndex(MISCREG_FISEG)", t2
|
||||
wrval regIdx("MISCREG_FIOFF"), t1
|
||||
wrval regIdx("MISCREG_FISEG"), t2
|
||||
|
||||
ld t1, seg, %(mode)s, "DISPLACEMENT + 16 + 0", dataSize=8
|
||||
wrval "InstRegIndex(MISCREG_FOOFF)", t1
|
||||
wrval "InstRegIndex(MISCREG_FOSEG)", t2
|
||||
wrval regIdx("MISCREG_FOOFF"), t1
|
||||
wrval regIdx("MISCREG_FOSEG"), t2
|
||||
""" + fxrstorCommonTemplate
|
||||
|
||||
microcode = '''
|
||||
|
||||
@@ -71,6 +71,6 @@ def macroop RDTSCP
|
||||
rdtsc t1
|
||||
mov rax, rax, t1, dataSize=4
|
||||
srli rdx, t1, 32, dataSize=8
|
||||
rdval rcx, "InstRegIndex(MISCREG_TSC_AUX)", dataSize=4
|
||||
rdval rcx, regIdx("MISCREG_TSC_AUX"), dataSize=4
|
||||
};
|
||||
'''
|
||||
|
||||
@@ -39,19 +39,19 @@ fldenvTemplate = """
|
||||
wrval ftw, t1
|
||||
|
||||
ld t1, seg, %(mode)s, "DISPLACEMENT + 12", dataSize=4
|
||||
wrval "InstRegIndex(MISCREG_FIOFF)", t1
|
||||
wrval regIdx("MISCREG_FIOFF"), t1
|
||||
|
||||
ld t1, seg, %(mode)s, "DISPLACEMENT + 16 + 0", dataSize=2
|
||||
wrval "InstRegIndex(MISCREG_FISEG)", t1
|
||||
wrval regIdx("MISCREG_FISEG"), t1
|
||||
|
||||
ld t1, seg, %(mode)s, "DISPLACEMENT + 16 + 2", dataSize=2
|
||||
wrval "InstRegIndex(MISCREG_FOP)", t1
|
||||
wrval regIdx("MISCREG_FOP"), t1
|
||||
|
||||
ld t1, seg, %(mode)s, "DISPLACEMENT + 20", dataSize=4
|
||||
wrval "InstRegIndex(MISCREG_FOOFF)", t1
|
||||
wrval regIdx("MISCREG_FOOFF"), t1
|
||||
|
||||
ld t1, seg, %(mode)s, "DISPLACEMENT + 24", dataSize=2
|
||||
wrval "InstRegIndex(MISCREG_FOSEG)", t1
|
||||
wrval regIdx("MISCREG_FOSEG"), t1
|
||||
"""
|
||||
|
||||
fnstenvTemplate = """
|
||||
@@ -63,24 +63,24 @@ fnstenvTemplate = """
|
||||
st t1, seg, %(mode)s, "DISPLACEMENT + 4", dataSize=2
|
||||
srli t1, t1, 11, dataSize=2
|
||||
andi t1, t1, 0x7, dataSize=2
|
||||
wrval "InstRegIndex(MISCREG_X87_TOP)", t1
|
||||
wrval regIdx("MISCREG_X87_TOP"), t1
|
||||
|
||||
rdval t1, ftw
|
||||
st t1, seg, %(mode)s, "DISPLACEMENT + 8", dataSize=2
|
||||
|
||||
rdval t1, "InstRegIndex(MISCREG_FIOFF)"
|
||||
rdval t1, regIdx("MISCREG_FIOFF")
|
||||
st t1, seg, %(mode)s, "DISPLACEMENT + 12", dataSize=4
|
||||
|
||||
rdval t1, "InstRegIndex(MISCREG_FISEG)"
|
||||
rdval t1, regIdx("MISCREG_FISEG")
|
||||
st t1, seg, %(mode)s, "DISPLACEMENT + 16 + 0", dataSize=2
|
||||
|
||||
rdval t1, "InstRegIndex(MISCREG_FOP)"
|
||||
rdval t1, regIdx("MISCREG_FOP")
|
||||
st t1, seg, %(mode)s, "DISPLACEMENT + 16 + 2", dataSize=2
|
||||
|
||||
rdval t1, "InstRegIndex(MISCREG_FOOFF)"
|
||||
rdval t1, regIdx("MISCREG_FOOFF")
|
||||
st t1, seg, %(mode)s, "DISPLACEMENT + 20", dataSize=4
|
||||
|
||||
rdval t1, "InstRegIndex(MISCREG_FOSEG)"
|
||||
rdval t1, regIdx("MISCREG_FOSEG")
|
||||
st t1, seg, %(mode)s, "DISPLACEMENT + 24", dataSize=2
|
||||
|
||||
# Mask exceptions
|
||||
|
||||
Reference in New Issue
Block a user