@@ -76,6 +76,54 @@ const CacheControlMapTy<LoadCacheControl> supportedLoadConfigs = {
7676 { LSC_L1IAR_L3IAR, { LoadCacheControl::InvalidateAfterRead, LoadCacheControl::InvalidateAfterRead } },
7777 // clang-format on
7878};
79+ template <typename T> struct SeparateCacheControlsL1L2L3 {
80+ T L1;
81+ T L2;
82+ T L3;
83+ };
84+
85+ template <typename T>
86+ using L1L2L3StoreCacheControlMapTy =
87+ std::unordered_map<LSC_STCC_L1_L2_L3, SeparateCacheControlsL1L2L3<T>, std::hash<int >>;
88+ const L1L2L3StoreCacheControlMapTy<StoreCacheControl> supportedL1L2L3StoreConfigs = {
89+ // clang-format off
90+ { LSC_STCC_L1UC_L2UC_L3UC, { StoreCacheControl::Uncached, StoreCacheControl::Uncached, StoreCacheControl::Uncached } },
91+ { LSC_STCC_L1UC_L2UC_L3WB, { StoreCacheControl::Uncached, StoreCacheControl::Uncached, StoreCacheControl::WriteBack } },
92+ { LSC_STCC_L1UC_L2WB_L3UC, { StoreCacheControl::Uncached, StoreCacheControl::WriteBack, StoreCacheControl::Uncached } },
93+ { LSC_STCC_L1UC_L2WB_L3WB, { StoreCacheControl::Uncached, StoreCacheControl::WriteBack, StoreCacheControl::WriteBack } },
94+ { LSC_STCC_L1WT_L2UC_L3UC, { StoreCacheControl::WriteThrough, StoreCacheControl::Uncached, StoreCacheControl::Uncached } },
95+ { LSC_STCC_L1WT_L2UC_L3WB, { StoreCacheControl::WriteThrough, StoreCacheControl::Uncached, StoreCacheControl::WriteBack } },
96+ { LSC_STCC_L1WT_L2WB_L3UC, { StoreCacheControl::WriteThrough, StoreCacheControl::WriteBack, StoreCacheControl::Uncached } },
97+ { LSC_STCC_L1WT_L2WB_L3WB, { StoreCacheControl::WriteThrough, StoreCacheControl::WriteBack, StoreCacheControl::WriteBack } },
98+ { LSC_STCC_L1S_L2UC_L3UC, { StoreCacheControl::Streaming, StoreCacheControl::Uncached, StoreCacheControl::Uncached } },
99+ { LSC_STCC_L1S_L2UC_L3WB, { StoreCacheControl::Streaming, StoreCacheControl::Uncached, StoreCacheControl::WriteBack } },
100+ { LSC_STCC_L1S_L2WB_L3UC, { StoreCacheControl::Streaming, StoreCacheControl::WriteBack, StoreCacheControl::Uncached } },
101+ { LSC_STCC_L1WB_L2UC_L3UC, { StoreCacheControl::WriteBack, StoreCacheControl::Uncached, StoreCacheControl::Uncached } },
102+ { LSC_STCC_L1WB_L2WB_L3UC, { StoreCacheControl::WriteBack, StoreCacheControl::WriteBack, StoreCacheControl::Uncached } },
103+ { LSC_STCC_L1WB_L2UC_L3WB, { StoreCacheControl::WriteBack, StoreCacheControl::Uncached, StoreCacheControl::WriteBack } },
104+ // clang-format on
105+ };
106+
107+ template <typename T>
108+ using L1L2L3LoadCacheControlMapTy =
109+ std::unordered_map<LSC_LDCC_L1_L2_L3, SeparateCacheControlsL1L2L3<T>, std::hash<int >>;
110+ const L1L2L3LoadCacheControlMapTy<LoadCacheControl> supportedL1L2L3LoadConfigs = {
111+ // clang-format off
112+ { LSC_LDCC_L1UC_L2UC_L3UC, { LoadCacheControl::Uncached, LoadCacheControl::Uncached, LoadCacheControl::Uncached } },
113+ { LSC_LDCC_L1UC_L2UC_L3C, { LoadCacheControl::Uncached, LoadCacheControl::Uncached, LoadCacheControl::Cached } },
114+ { LSC_LDCC_L1UC_L2C_L3UC, { LoadCacheControl::Uncached, LoadCacheControl::Cached, LoadCacheControl::Uncached } },
115+ { LSC_LDCC_L1UC_L2C_L3C, { LoadCacheControl::Uncached, LoadCacheControl::Cached, LoadCacheControl::Cached } },
116+ { LSC_LDCC_L1C_L2UC_L3UC, { LoadCacheControl::Cached, LoadCacheControl::Uncached, LoadCacheControl::Uncached } },
117+ { LSC_LDCC_L1C_L2UC_L3C, { LoadCacheControl::Cached, LoadCacheControl::Uncached, LoadCacheControl::Cached } },
118+ { LSC_LDCC_L1C_L2C_L3UC, { LoadCacheControl::Cached, LoadCacheControl::Cached, LoadCacheControl::Uncached } },
119+ { LSC_LDCC_L1C_L2C_L3C, { LoadCacheControl::Cached, LoadCacheControl::Cached, LoadCacheControl::Cached } },
120+ { LSC_LDCC_L1S_L2UC_L3UC, { LoadCacheControl::Streaming, LoadCacheControl::Uncached, LoadCacheControl::Uncached } },
121+ { LSC_LDCC_L1S_L2UC_L3C, { LoadCacheControl::Streaming, LoadCacheControl::Uncached, LoadCacheControl::Cached } },
122+ { LSC_LDCC_L1S_L2C_L3UC, { LoadCacheControl::Streaming, LoadCacheControl::Cached, LoadCacheControl::Uncached } },
123+ { LSC_LDCC_L1S_L2C_L3C, { LoadCacheControl::Streaming, LoadCacheControl::Cached, LoadCacheControl::Cached } },
124+ { LSC_LDCC_L1IAR_L2IAR_L3IAR, { LoadCacheControl::InvalidateAfterRead, LoadCacheControl::InvalidateAfterRead, LoadCacheControl::InvalidateAfterRead } },
125+ // clang-format on
126+ };
79127
80128using CacheLevel = uint64_t ;
81129
0 commit comments