Бумага , которую вы читаете , описывает в следующем предложении, что именно она делает:
Эта инструкция создает 16-битный
маска из старших значащих битов из 16 знаков
8-битные целые числа в регистре и обнуляют старшие биты [места назначения]
Это точно , что pmovmskb
делает с регистром XMM, так что, очевидно, это инструкция, о которой они говорят. Они намеренно или случайно исключили p
(для упакованного целого числа) из мнемоники.
Их схема того, как это работает (неверно), помечена vpmovmskb reg, ymm1
. Для источника YMM vpmovmskb
создает 32-битную маску.
(Хотя, если входной регистр YMM был записан через младшую половину XMM с помощью VEX-кодированной инструкции, такой как vpxor xmm1, xmm2, xmm3
, тогда верхние 16 байтов будут равны нулю, поэтому они получат результат, который они описали для другая причина.)
Его варианты использования включают в себя поисковые циклы, такие как strlen
или memchr
(где lzcnt
/ tzcnt
полезны, чтобы найти какой элемент, когда вы найдете элемент совпадения или несоответствия).
Или создание индекса для справочной таблицы с pshufb
масками, например. для левой упаковки или даже как часть синтаксического анализа строк четырехточечных IPv4 в целые числа. Самый быстрый способ получить IPv4-адрес из строки