bab2min/kiwi 的最新提交是一项修复 SIMD 搜索位掩码计算代码的变更。2026 年 10 月 24 日合并的 PR #295(由 ollipa 提交)将 `findAll` 在构造只保留结果低位(低阶位)的掩码时按 `size_t` 全宽移位的代码,替换为 `lowBitsMask` 辅助函数。
kiwi(智能韩语形态分析器)是一个将韩语句子切分为形态素单位并标注词性的库。搜索代码 `findAll` 是一个函数,它在候选路径字节数组中返回与给定字符匹配的位置,并以位掩码形式呈现,其实现按 SSE2、AVX2、AVX512、NEON 等架构分别编写。各实现都附加了 `((size_t)1 << size) - 1` 形式的掩码,以便只保留与比较字节数相对应的低位;但当 `size` 等于 `size_t` 的完整位宽(例如 64)时,移位宽度就等于类型宽度,按照 C++ 标准成为未定义行为。新的辅助函数在 `size` 大于或等于 `sizeof(size_t) * 8` 时返回所有位均为 1 的值,小于时则返回与原来相同的值。
提交统计为新增 50 行、删除 11 行,代码在单一文件 `src/search.cpp` 内统一应用于 SSE、AVX2、AVX512、NEON 全部路径。回归测试也一并加入。新文件 `test/test_search.cpp` 在 SSE2 和 NEON 路径上确认 64 字节全部匹配时 `findAll` 返回所有位均为 1 的值,`test/test_cpp.cpp` 中还新增了一个用例,使用 conglobal 模型、以路径桶填满至 64 个的输入,验证结果为 12 个形态素且 "데우" 被判定为动词(vv)。两处构建配置文件中也登记了新测试。不过,这次变更处理的只是所找到路径的位掩码计算,并没有给出以数字呈现的运行时间或准确度差异资料。仅凭这些资料难以判断是否带来性能提升,它更接近于一个阻止边界条件缺陷的小改动。