/
githubmirror
/
ipxe
Обзор
Документация
Войти
/
githubmirror
/
ipxe
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/arch/arm64/include/bits/strings.h
70 строк
2 KB
Michael Brown
[build] Mark core arm64 files as permitted for UEFI Secure Boot
28 янв 2026, 18:44
28 янв 2026, 18:44
6b17d32
Код
Авторство
О чём код?
#ifndef _BITS_STRINGS_H #define _BITS_STRINGS_H /** @file * * String functions * */ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); FILE_SECBOOT ( PERMITTED ); /** * Find first (i.e. least significant) set bit * * @v value Value * @ret lsb Least significant bit set in value (LSB=1), or zero */ static inline __attribute__ (( always_inline )) int __ffsll ( long long value ){ unsigned long long bits = value; unsigned long long lsb; unsigned int lz; /* Extract least significant set bit */ lsb = ( bits & -bits ); /* Count number of leading zeroes before LSB */ __asm__ ( "clz %0, %1" : "=r" ( lz ) : "r" ( lsb ) ); return ( 64 - lz ); } /** * Find first (i.e. least significant) set bit * * @v value Value * @ret lsb Least significant bit set in value (LSB=1), or zero */ static inline __attribute__ (( always_inline )) int __ffsl ( long value ) { return __ffsll ( value ); } /** * Find last (i.e. most significant) set bit * * @v value Value * @ret msb Most significant bit set in value (LSB=1), or zero */ static inline __attribute__ (( always_inline )) int __flsll ( long long value ){ unsigned int lz; /* Count number of leading zeroes */ __asm__ ( "clz %0, %1" : "=r" ( lz ) : "r" ( value ) ); return ( 64 - lz ); } /** * Find last (i.e. most significant) set bit * * @v value Value * @ret msb Most significant bit set in value (LSB=1), or zero */ static inline __attribute__ (( always_inline )) int __flsl ( long value ) { return __flsll ( value ); } #endif /* _BITS_STRINGS_H */