/
githubmirror
/
ipxe
Обзор
Документация
Войти
/
githubmirror
/
ipxe
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/arch/riscv/include/bits/strings.h
92 строки
2 KB
Michael Brown
[build] Mark core riscv64 files as permitted for UEFI Secure Boot
21 май 2026, 16:42
21 май 2026, 16:42
63eeb23
Код
Авторство
О чём код?
#ifndef _BITS_STRINGS_H #define _BITS_STRINGS_H /** @file * * String functions * */ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); FILE_SECBOOT ( PERMITTED ); extern __asmcall unsigned long riscv_ffs ( unsigned long value ); extern __asmcall unsigned long riscv_fls ( unsigned long value ); /** * 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 riscv_ffs ( value ); } /** * 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 low = value; unsigned long high; /* Check machine word size */ if ( sizeof ( value ) > sizeof ( low ) ) { /* 32-bit */ high = ( value >> 32 ); if ( low ) { return ( __ffsl ( low ) ); } else if ( high ) { return ( 32 + __ffsl ( high ) ); } else { return 0; } } else { /* 64-bit */ return ( __ffsl ( low ) ); } } /** * 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 riscv_fls ( 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 long low = value; unsigned long high; /* Check machine word size */ if ( sizeof ( value ) > sizeof ( low ) ) { /* 32-bit */ high = ( value >> 32 ); if ( high ) { return ( 32 + __flsl ( high ) ); } else if ( low ) { return ( __flsl ( low ) ); } else { return 0; } } else { /* 64-bit */ return ( __flsl ( low ) ); } } #endif /* _BITS_STRINGS_H */