@@ -199,11 +199,6 @@ namespace hat::detail {
199199 return std::assume_aligned<alignment>(ptr);
200200 }
201201
202- template <scan_alignment alignment>
203- LIBHAT_FORCEINLINE const std::byte* align_up (const std::byte* ptr) {
204- return align_up<alignment_stride<alignment>>(ptr);
205- }
206-
207202 template <typename Vector, size_t alignment, bool veccmp>
208203 LIBHAT_FORCEINLINE auto segment_scan (
209204 const std::byte* begin,
@@ -292,17 +287,18 @@ namespace hat::detail {
292287
293288 template <>
294289 inline const_scan_result find_pattern_single<scan_alignment::X16 >(const std::byte* begin, const std::byte* end, const scan_context& context) {
290+ static constexpr auto stride = alignment_stride<scan_alignment::X16 >;
295291 const auto signature = context.signature ;
296292 const auto cmpByte = *signature[context.cmpIndex ];
297293
298- const auto scanBegin = align_up<scan_alignment:: X16 >(begin) + context.cmpIndex ;
299- const auto scanEnd = align_up<scan_alignment:: X16 >(end - signature.size () + 1 ) + context.cmpIndex ;
294+ const auto scanBegin = align_up<stride >(begin) + context.cmpIndex ;
295+ const auto scanEnd = align_up<stride >(end - signature.size () + 1 ) + context.cmpIndex ;
300296
301297 if (scanBegin >= scanEnd) {
302298 return nullptr ;
303299 }
304300
305- for (auto i = scanBegin; i != scanEnd; i += 16 ) {
301+ for (auto i = scanBegin; i != scanEnd; i += stride ) {
306302 if (*i == cmpByte) {
307303 const auto start = i - context.cmpIndex ;
308304 const auto match = std::equal (signature.begin (), signature.end (), start);
0 commit comments