adding predicate instruction

This commit is contained in:
Blaise Tine
2021-08-31 03:23:59 -04:00
parent 6caf674163
commit c162ce526f
7 changed files with 57 additions and 32 deletions

View File

@@ -816,10 +816,21 @@ void Warp::execute(const Instr &instr, Pipeline *pipeline) {
case GPGPU:
switch (func3) {
case 0: {
// TMC
tmask_.reset();
for (int i = 0; i < num_threads; ++i) {
tmask_[i] = rsdata[0] & (1 << i);
// TMC
if (rsrc1) {
// predicate mode
ThreadMask pred;
for (int i = 0; i < num_threads; ++i) {
pred[i] = tmask_[i] ? (iRegFile_[i][rsrc0] != 0) : 0;
}
if (pred.any()) {
tmask_ &= pred;
}
} else {
tmask_.reset();
for (int i = 0; i < num_threads; ++i) {
tmask_[i] = rsdata[0] & (1 << i);
}
}
D(3, "*** TMC " << tmask_);
active_ = tmask_.any();