refactor convertMask to handle GroupMasks and GroupMask
diff --git a/xbyak/xbyak_util.h b/xbyak/xbyak_util.h index 1cc0883..5eb5169 100644 --- a/xbyak/xbyak_util.h +++ b/xbyak/xbyak_util.h
@@ -1422,28 +1422,24 @@ inline bool convertMask(CpuMask& mask, const U32Vec& groupAcc, const CACHE_RELATIONSHIP& cache) { #if XBYAK_WINSDK_HAS_CACHE_RELATIONSHIP_GROUPMASKS - const GROUP_AFFINITY* masks = cache.GroupMasks; - for (WORD i = 0; i < cache.GroupCount; i++) { - const WORD group = masks[i].Group; - const KAFFINITY m = masks[i].Mask; - const uint32_t base = groupAcc[group]; + const WORD count = cache.GroupCount; +#else + const WORD count = 1; +#endif + for (WORD i = 0; i < count; i++) { +#if XBYAK_WINSDK_HAS_CACHE_RELATIONSHIP_GROUPMASKS + const GROUP_AFFINITY& cg = cache.GroupMasks[i]; +#else + const GROUP_AFFINITY& cg = cache.GroupMask; +#endif + const KAFFINITY m = cg.Mask; + const uint32_t base = groupAcc[cg.Group]; for (uint32_t b = 0; b < sizeof(KAFFINITY) * 8; b++) { if (m & (KAFFINITY(1) << b)) { if (!mask.append(base + b)) return false; } } } -#else - // Older SDKs have a single GroupMask field instead of GroupMasks[] - const WORD group = cache.GroupMask.Group; - const KAFFINITY m = cache.GroupMask.Mask; - const uint32_t base = groupAcc[group]; - for (uint32_t b = 0; b < sizeof(KAFFINITY) * 8; b++) { - if (m & (KAFFINITY(1) << b)) { - if (!mask.append(base + b)) return false; - } - } -#endif return true; }