@ -302,7 +302,7 @@ extern const char * const x86_power_flags[32];
* patch the target code for additional performance .
*
*/
static __always_inline __pure bool __static_cpu_has ( u8 bit )
static __always_inline __pure bool __static_cpu_has ( u16 bit )
{
# if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
asm goto ( " 1: jmp %l[t_no] \n "
@ -311,11 +311,11 @@ static __always_inline __pure bool __static_cpu_has(u8 bit)
_ASM_ALIGN " \n "
_ASM_PTR " 1b \n "
_ASM_PTR " 0 \n " /* no replacement */
" .byte %P0 \n " /* feature bit */
" .word %P0 \n " /* feature bit */
" .byte 2b - 1b \n " /* source len */
" .byte 0 \n " /* replacement len */
" .byte 0xff + 0 - (2b-1b) \n " /* padding */
" .previous \n "
/* skipping size check since replacement size = 0 */
: : " i " ( bit ) : : t_no ) ;
return true ;
t_no :
@ -329,10 +329,12 @@ static __always_inline __pure bool __static_cpu_has(u8 bit)
_ASM_ALIGN " \n "
_ASM_PTR " 1b \n "
_ASM_PTR " 3f \n "
" .byte %P1 \n " /* feature bit */
" .word %P1 \n " /* feature bit */
" .byte 2b - 1b \n " /* source len */
" .byte 4f - 3f \n " /* replacement len */
" .byte 0xff + (4f-3f) - (2b-1b) \n " /* padding */
" .previous \n "
" .section .discard, \" aw \" ,@progbits \n "
" .byte 0xff + (4f-3f) - (2b-1b) \n " /* size check */
" .previous \n "
" .section .altinstr_replacement, \" ax \" \n "
" 3: movb $1,%0 \n "
@ -348,7 +350,7 @@ static __always_inline __pure bool __static_cpu_has(u8 bit)
( \
__builtin_constant_p ( boot_cpu_has ( bit ) ) ? \
boot_cpu_has ( bit ) : \
( __builtin_constant_p ( bit ) & & ! ( ( bit ) & ~ 0xff ) ) ? \
__builtin_constant_p ( bit ) ? \
__static_cpu_has ( bit ) : \
boot_cpu_has ( bit ) \
)