37 #include "debug/GPUSRF.hh"
42 #include "params/ScalarRegisterFile.hh"
53 for (
int i = 0;
i < ii->getNumOperands(); ++
i) {
54 if (ii->isScalarRegister(
i) && ii->isSrcOperand(
i)) {
56 int sgprIdx = ii->getRegisterIndex(
i, ii);
57 int nRegs = ii->getOperandSize(
i) <= 4 ? 1 :
58 ii->getOperandSize(
i) / 4;
60 for (
int j = 0;
j < nRegs; ++
j) {
65 if (ii->isDstOperand(
i)) {
66 w->stats.numTimesBlockedDueWAXDependencies++;
67 }
else if (ii->isSrcOperand(
i)) {
68 DPRINTF(GPUSRF,
"RAW stall: WV[%d]: %s: physReg[%d]\n",
69 w->wfDynId, ii->disassemble(), pSgpr);
70 w->stats.numTimesBlockedDueRAWDependencies++;
84 for (
int i = 0;
i < ii->getNumOperands(); ++
i) {
85 if (ii->isScalarRegister(
i) && ii->isDstOperand(
i)) {
87 int sgprIdx = ii->getRegisterIndex(
i, ii);
88 int nRegs = ii->getOperandSize(
i) <= 4 ? 1 :
89 ii->getOperandSize(
i) / 4;
91 for (
int j = 0;
j < nRegs; ++
j) {
105 for (
int i = 0;
i < ii->getNumOperands();
i++) {
106 if (ii->isScalarRegister(
i) && ii->isSrcOperand(
i)) {
107 int DWORDs = ii->getOperandSize(
i) <= 4 ? 1
108 : ii->getOperandSize(
i) / 4;
113 if (!ii->isLoad() && !(ii->isAtomic() || ii->isMemSync())) {
117 for (
int i = 0;
i < ii->getNumOperands();
i++) {
118 if (ii->isScalarRegister(
i) && ii->isDstOperand(
i)) {
119 int sgprIdx = ii->getRegisterIndex(
i, ii);
120 int nRegs = ii->getOperandSize(
i) <= 4 ? 1
121 : ii->getOperandSize(
i) / 4;
122 for (
int j = 0;
j < nRegs;
j++) {
124 mapSgpr(
w, sgprIdx +
j);
138 assert(ii->isLoad() || ii->isAtomicRet());
139 for (
int i = 0;
i < ii->getNumOperands(); ++
i) {
140 if (ii->isScalarRegister(
i) && ii->isDstOperand(
i)) {
142 int sgprIdx = ii->getRegisterIndex(
i, ii);
143 int nRegs = ii->getOperandSize(
i) <= 4 ? 1 :
144 ii->getOperandSize(
i) / 4;
146 for (
int j = 0;
j < nRegs; ++
j) {
148 mapSgpr(
w, sgprIdx +
j);