1. [Вікі](https://feex.it/wiki/)
2. [Апаратнае забеспячэнне](https://feex.it/wiki/hardware/)
3. [Сістэмы і архітэктура](https://feex.it/wiki/hardware/system/)
4. LZCNT

# LZCNT

Архітэктурны даведнік: Feex

LZCNT падлічвае колькасць пачатковых нулявых бітаў у цэлалікавым аперандзе. Яна адрозніваецца ад BSR, у тым ліку вынікам для нуля, і патрабуе відавочнай праверкі магчымасцей.

## Што вам трэба ведаць

LZCNT падлічвае колькасць пачатковых нулявых бітаў у цэлалікавым аперандзе. Яна адрозніваецца ад BSR, у тым ліку вынікам для нуля, і патрабуе відавочнай праверкі магчымасцей.

## Як гэта працуе

Вынікам з'яўляецца колькасць нулявых бітаў, якія папярэднічаюць найстарэйшаму ўсталяванаму біту ў абранай шырыні аперанда. Для аперанда з усімі нулямі LZCNT вяртае шырыню аперанда. Яе сцягі і паводзіны пры нулі вызначаны інакш, чым у старэйшай аперацыі зваротнага сканавання бітаў (bit-scan-reverse) з падобным кадаваннем.

## Дзе гэта карысна

Працэдура сціскання або апрацоўкі лікавых фарматаў можа выкарыстоўваць гэты падлік, каб вызначыць, колькі значных бітаў патрабуецца значэнню. Правільная апрацоўка нуля неабходна для разлікаў памеру і зрухаў, паколькі памылковая замена на bit-scan можа даць несапраўдны вынік.

## Як праверыць падтрымку і актыўнасць

CPUID.80000001H:ECX біт 5 пералічвае LZCNT у адпаведнасці з вызначэннем адпаведнага вытворцы. Спачатку пераканайцеся, што пашыраны ліст існуе. Выкарыстоўвайце падтрымоўваны запыт магчымасцей кампілятара/асяроддзя выканання і запасны варыянт, семантыка нуля якога супадае.

Правярайце дакладную інструкцыю і форму аперанда, а не мяркуйце пра наяўнасць падтрымкі па суседнім пашырэнні. Скалярныя цэлалікавыя функцыі звычайна выкарыстоўваюць рэгістры агульнага прызначэння; кадаванне, звязанае з вектарамі, не азначае аўтаматычна патрабавання да вектарнага стану.

## Чаго гэта функцыя не гарантуе

LZCNT не падлічвае ўсе ўсталяваныя біты і не з'яўляецца TZCNT. Непадтрымоўваны працэсар можа інтэрпрэтаваць гэтае кадаванне як BSR, таму простая спроба выканаць інструкцыю з'яўляецца небяспечным тэстам наяўнасці функцыі. BMI1 і BMI2 з'яўляюцца асобнымі магчымасцямі.

## Сумяшчальнасць і прадукцыйнасць на практыцы

Карэктнасць залежыць як ад краявых выпадкаў, так і ад хуткасці. Нулявы ўваход, перапаўненне, сцягі пераносу, шырыня аперанда, выраўноўванне і ўпарадкаванне доступу да памяці могуць змяняць семантыку. Аддавайце перавагу інтэрфейсам кампілятара або бібліятэк, якія дакументуюць гэтыя дэталі і прапануюць падтрымліваемы запасны варыянт (fallback).

## Практычны чэк-ліст для праверкі

1. Зафіксуйце дакладную мадэль працэсара або платформы, а таксама задзейнічаныя версіі праграмы, АС і асяроддзя выканання. Захавайце дакладную фармулёўку памылкі або патрабавання.
2. Звярніцеся да дакументацыі вытворцы для гэтай канкрэтнай мадэлі, затым праверце фактычныя магчымасці і ўключаны стан у асяроддзі, дзе выконваецца праграма.
3. Супастаўце кожнае патрабаванне выбранага выканальнага файла або бэкэнда. Аналагічнай назвы функцыі, псеўданіма або агульнай назвы тэхналогіі недастаткова.
4. Пацвердзіце, што праграма выбрала патрэбную рэалізацыю. Выкарыстоўвайце яе задакументаваныя сродкі дыягностыкі і падтрымліваемы запасны варыянт, калі патрабаванні не выконваюцца.
5. Уносьце па адным падтрымліваемым змяненні за раз і паўтарайце тую ж нагрузку. Захоўвайце зыходную канфігурацыю і магчымасць адкату.

## Калі функцыя пазначана, але праграмнае забеспячэнне не можа яе выкарыстоўваць

Пачніце з канкрэтнага кампанента, які выклікае збой. Апаратная база даных апісвае зафіксаваныя магчымасці; аперацыйная сістэма або гіпервізар могуць прадастаўляць іншае фактычнае асяроддзе. Памылка недапушчальнай інструкцыі (illegal instruction) таксама патрабуе даследавання канкрэтнай інструкцыі, якая выклікала збой, і зборкі бінарнага файла, паколькі пашкоджанне даных або іншая непадтрымліваемая інструкцыя могуць выклікаць аналагічны сімптом.

Усталюйце версію праграмы, драйвера або асяроддзя выканання, якая падтрымліваецца для дадзенай платформы, і пры неабходнасці выкарыстоўвайце задакументаваную вытворцам базавую або запасную зборку. Абнаўленне ПЗ не можа стварыць інструкцыю, якой няма ў працэсары. Змяненні ў мікрапраграме (firmware) і палітыках бяспекі павінны адпавядаць працэдурам вытворцы сістэмы і плану аднаўлення, а не агульным рэцэптам аптымізацыі.

## Звязаныя функцыі і карысныя адрозненні

[POPCNT](https://feex.it/wiki/l/be/hardware/system/popcnt/) · [ABM](https://feex.it/wiki/l/be/hardware/system/abm/) · [BMI1](https://feex.it/wiki/l/be/hardware/system/bmi1/)

## Крыніцы і межы прымянення гэтага тлумачэння

[Intel 64 and IA-32 Architectures Software Developer's Manual](https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html) · [AMD CPUID Specification, публікацыя 25481](https://www.amd.com/content/dam/amd/en/documents/archived-tech-docs/design-guides/25481.pdf) · [x86-64 psABI: узроўні архітэктуры і мікраархітэктуры працэсараў](https://gitlab.com/x86-psABIs/x86-64-ABI/-/blob/master/x86-64-ABI/low-level-sys-info.tex)

Гэтыя даведнікі вызначаюць архітэктурныя паводзіны і патрабаванні да праграмнага забеспячэння. Яны не пацвярджаюць незалежна кожнае значэнне функцыі на звязанай старонцы мадэлі абсталявання. Для праверкі падтрымкі мадэллю выкарыстоўвайце даныя вытворцы на адпаведнай старонцы і правярайце фактычную канфігурацыю сістэмы. Гэты артыкул не змяшчае вынікаў тэсціравання (benchmark), сертыфікацыі або даты незалежнага агляду.

## Звязанае

Гэтыя аб'екты звязаны з гэтым артыкулам. Тып пазначаны на кожнай спасылцы.

[POPCNT: Архітэктурны даведнік](https://feex.it/wiki/l/be/hardware/system/popcnt/)[ABM: Архітэктурны даведнік](https://feex.it/wiki/l/be/hardware/system/abm/)[BMI1: Архітэктурны даведнік](https://feex.it/wiki/l/be/hardware/system/bmi1/)

## Крыніцы і праверка

Рэдакцыйная прыналежнасць: Feex. Дата незалежнай праверкі не зафіксавана. [Як мы даследуем](https://feex.it/wiki/research/).

- [Intel 64 and IA-32 Architectures Software Developer's Manual ](https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html)· Тамы 1 і 2 апісваюць названыя сямействы інструкцый і CPUID; Том 3 апісвае стан, старонкавую арганізацыю памяці, VMX і элементы кіравання абаронай. Архітэктурная дакументацыя не пацвярджае падтрымку канкрэтнай мадэлі.
- [AMD CPUID Specification, публікацыя 25481 ](https://www.amd.com/content/dam/amd/en/documents/archived-tech-docs/design-guides/25481.pdf)· Архіўны архітэктурны даведнік па базавых функцыях AMD CPUID і вызначэннях бітаў. Для больш позніх пашырэнняў канкрэтных пакаленняў выкарыстоўвайце бягучы даведнік па праграмаванні працэсараў.
- [x86-64 psABI: узроўні архітэктуры і мікраархітэктуры працэсараў ](https://gitlab.com/x86-psABIs/x86-64-ABI/-/blob/master/x86-64-ABI/low-level-sys-info.tex)· Machine Interface, Processor Architecture: табліца базавых і кумулятыўных магчымасцей v2/v3/v4, праверкі стану АС і рэкамендацыі па разгортванні.

## Ці быў гэты артыкул карысным?

Дастаткова адказаць "так" або "не". Выберыце прычыну, калі хочаце, або дадайце кароткую нататку.

Кароткія факты

Кароткая інфармацыя пра гэтую старонку. Характарыстыкі, крыніцы і поўная гісторыя застаюцца ў артыкуле.

---

Source: [Canonical Feex Wiki page](https://feex.it/wiki/l/be/hardware/system/lzcnt/)

[Developer guide](https://feex.it/wiki/developers/) | [API policy](https://feex.it/developers/api-policy/) | [Agent guidance](https://feex.it/wiki/llms.txt)
