summaryrefslogtreecommitdiff
path: root/src/abstract_hardware_model.h
diff options
context:
space:
mode:
authorDavit Grigoryan <[email protected]>2026-04-28 22:06:08 +0000
committerDavit Grigoryan <[email protected]>2026-04-28 22:06:08 +0000
commitfbb90ef3a76cd6c469782c84668d25c5f3bfdd22 (patch)
tree08d320b6da8f5c6c5e276c94ba19a8d5d5bc9216 /src/abstract_hardware_model.h
parent3d4d274eb3a6a23a5924b557d010590e219c5256 (diff)
critical fix - add option to have masks for SB entries
Diffstat (limited to 'src/abstract_hardware_model.h')
-rw-r--r--src/abstract_hardware_model.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/abstract_hardware_model.h b/src/abstract_hardware_model.h
index 6ce1871..6331d6b 100644
--- a/src/abstract_hardware_model.h
+++ b/src/abstract_hardware_model.h
@@ -1162,6 +1162,10 @@ struct simd_set_info {
unsigned num_active_threads; // popcount of set_active_mask
bool valid; // Whether this set has any active threads
const inst_t *source_inst; // Pointer to static decoded instruction (for MIMD)
+ // Mode 1 (mask-aware scoreboard): full issue-time active mask of the
+ // source_inst that owns this set. Used at writeback to release the
+ // matching (reg, mask) entry. Zero/empty when source_inst is NULL.
+ active_mask_t source_mask;
// Mixed-space MEM co-issue (v2): per-set shared state.
// Populated only when source_inst's space is shared/sstarr; otherwise
@@ -1176,6 +1180,7 @@ struct simd_set_info {
num_active_threads(0), valid(false), source_inst(NULL), cycles(0) {
set_active_mask.reset();
active_mask_in_warp.reset();
+ source_mask.reset();
for (unsigned i = 0; i < MAX_WARP_SIZE; i++) thread_ids[i] = 0;
}
@@ -1329,6 +1334,9 @@ class warp_inst_t : public inst_t {
void merge_simd_sets(const std::vector<simd_set_info> &other_sets);
void set_source_inst_on_sets(const inst_t *src);
void set_split_id_on_sets(unsigned split_id);
+ // Mode 1: stamp the source_inst's full active_mask onto each valid set
+ // for use at writeback (releaseRegisterMask).
+ void set_source_mask_on_sets(const active_mask_t &mask);
static bool simd_sets_overlap(const std::vector<simd_set_info> &a,
const std::vector<simd_set_info> &b);