arch,cpu,sim: Store registers in InstRecord with InstResult.

The InstResult knows how to print registers without having to know about
their actual types.

Change-Id: Ib858e32a7b2fabbde4857165b9e88e87294942c8
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/50254
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Maintainer: Gabe Black <gabe.black@gmail.com>
This commit is contained in:
Gabe Black
2021-09-11 04:19:55 -07:00
parent 81e07670b9
commit e425bcabd2
8 changed files with 55 additions and 65 deletions

View File

@@ -126,7 +126,7 @@ Tstart64::completeAcc(PacketPtr pkt, ExecContext *xc,
uint64_t final_val = Dest64;
if (traceData) { traceData->setData(final_val); }
if (traceData) { traceData->setData(intRegClass, final_val); }
}
return fault;
@@ -156,7 +156,7 @@ Ttest64::execute(ExecContext *xc, Trace::InstRecord *traceData) const
if (fault == NoFault) {
uint64_t final_val = Dest64;
xc->setRegOperand(this, 0, Dest64 & mask(intWidth));
if (traceData) { traceData->setData(final_val); }
if (traceData) { traceData->setData(intRegClass, final_val); }
}
return fault;

View File

@@ -123,7 +123,7 @@ let {{
else
xc->setRegOperand(this, {self.dest_reg_idx}, {self.base_name});
if (traceData)
traceData->setData({self.base_name});
traceData->setData({self.reg_class}, {self.base_name});
'''
class PIntReg(IntReg):
@@ -148,7 +148,7 @@ let {{
else
xc->setRegOperand(this, {self.dest_reg_idx}, {self.base_name});
if (traceData)
traceData->setData({self.base_name});
traceData->setData({self.reg_class}, {self.base_name});
'''
class IntRegAIWPC(IntReg):
@@ -165,7 +165,7 @@ let {{
xc->setRegOperand(this, {self.dest_reg_idx}, {self.base_name});
{"}"}
if (traceData)
traceData->setData({self.base_name});
traceData->setData({self.reg_class}, {self.base_name});
'''
class IntReg64(IntRegOp):
@@ -186,7 +186,7 @@ let {{
xc->setRegOperand(this, {self.dest_reg_idx}, {self.base_name} &
mask(intWidth));
if (traceData)
traceData->setData({self.base_name});
traceData->setData({self.reg_class}, {self.base_name});
'''
def __init__(self, idx, id=srtNormal):
super().__init__('ud', idx, 'IsInteger', id)
@@ -205,7 +205,7 @@ let {{
xc->setRegOperand(this, {self.dest_reg_idx}, {self.base_name} &
mask(aarch64 ? 64 : 32));
if (traceData)
traceData->setData({self.base_name});
traceData->setData({self.reg_class}, {self.base_name});
'''
class IntRegW64(IntReg64):
@@ -222,7 +222,7 @@ let {{
xc->setRegOperand(this, {self.dest_reg_idx}, {self.base_name} &
mask(32));
if (traceData)
traceData->setData({self.base_name});
traceData->setData({self.reg_class}, {self.base_name});
'''
class CCReg(CCRegOp):
@@ -248,7 +248,7 @@ let {{
xc->setMiscReg(snsBankedIndex(dest, xc->tcBase()),
{self.base_name});
if (traceData)
traceData->setData({self.base_name});
traceData->setData({self.reg_class}, {self.base_name});
'''
def __init__(self, idx, id=srtNormal, ctype='uw'):
super().__init__(idx, id, ctype, (None, None, 'IsControl'))

View File

@@ -229,7 +229,7 @@ class RegValOperand(RegOperand):
RegVal final_val = {reg_val};
xc->setRegOperand(this, {self.dest_reg_idx}, final_val);
if (traceData) {{
traceData->setData(final_val);
traceData->setData({self.reg_class}, final_val);
}}
}}'''
@@ -354,7 +354,7 @@ class VecRegOperand(RegOperand):
def makeWrite(self):
return f'''
if (traceData) {{
traceData->setData(tmp_d{self.dest_reg_idx});
traceData->setData({self.reg_class}, &tmp_d{self.dest_reg_idx});
}}
'''
@@ -398,7 +398,7 @@ class VecPredRegOperand(RegOperand):
def makeWrite(self):
return f'''
if (traceData) {{
traceData->setData(tmp_d{self.dest_reg_idx});
traceData->setData({self.reg_class}, &tmp_d{self.dest_reg_idx});
}}
'''
@@ -447,7 +447,7 @@ class ControlRegOperand(Operand):
f'{self.dest_reg_idx}, {self.base_name});\n'
wb += f'''
if (traceData) {{
traceData->setData({self.base_name});
traceData->setData({self.reg_class}, {self.base_name});
}}
'''

View File

@@ -109,7 +109,7 @@ output exec {{
if (isNan(&src_bits, 32) ) {
mips_nan = MIPS32_QNAN;
xc->setRegOperand(inst, 0, mips_nan);
if (traceData) { traceData->setData(mips_nan); }
if (traceData) { traceData->setData(floatRegClass, mips_nan); }
return true;
}
}
@@ -139,7 +139,7 @@ output exec {{
//Write FCSR from FloatRegFile
cpu->tcBase()->setReg(float_reg::Fcsr, new_fcsr);
if (traceData) { traceData->setData(mips_nan); }
if (traceData) { traceData->setData(floatRegClass, mips_nan); }
return true;
}

View File

@@ -74,6 +74,7 @@ output exec {{
#include "arch/generic/memhelpers.hh"
#include "arch/power/faults.hh"
#include "arch/power/regs/float.hh"
#include "arch/power/regs/int.hh"
#include "arch/power/regs/misc.hh"
#include "base/condcodes.hh"

View File

@@ -80,6 +80,7 @@ output exec {{
#include "arch/generic/memhelpers.hh"
#include "arch/sparc/asi.hh"
#include "arch/sparc/pseudo_inst_abi.hh"
#include "arch/sparc/regs/float.hh"
#include "base/fenv.hh"
#include "cpu/base.hh"
#include "cpu/exetrace.hh"