arch-vega: Implement S_SLEEP

This is merely copied from arch-gcn3.

Change-Id: Ibd2bda37fe9adc083a35efab0f59617d386019b9
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/53883
Reviewed-by: Matt Sinclair <mattdsinclair@gmail.com>
Maintainer: Matt Sinclair <mattdsinclair@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
Matthew Poremba
2021-12-09 12:27:51 -06:00
committed by Bobby Bruce
parent 23aec13f07
commit 0ae1a9d109

View File

@@ -4608,6 +4608,8 @@ namespace VegaISA
Inst_SOPP__S_SLEEP::Inst_SOPP__S_SLEEP(InFmt_SOPP *iFmt)
: Inst_SOPP(iFmt, "s_sleep")
{
setFlag(ALU);
setFlag(Sleep);
} // Inst_SOPP__S_SLEEP
Inst_SOPP__S_SLEEP::~Inst_SOPP__S_SLEEP()
@@ -4620,7 +4622,10 @@ namespace VegaISA
void
Inst_SOPP__S_SLEEP::execute(GPUDynInstPtr gpuDynInst)
{
panicUnimplemented();
ScalarRegI32 simm16 = (ScalarRegI32)instData.SIMM16;
gpuDynInst->wavefront()->setStatus(Wavefront::S_STALLED_SLEEP);
// sleep duration is specified in multiples of 64 cycles
gpuDynInst->wavefront()->setSleepTime(64 * simm16);
} // execute
// --- Inst_SOPP__S_SETPRIO class methods ---