]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[bitops] Provide an explicit operand size for bit test instructions
authorMichael Brown <mcb30@ipxe.org>
Sat, 27 Feb 2021 15:05:20 +0000 (15:05 +0000)
committerMichael Brown <mcb30@ipxe.org>
Sat, 27 Feb 2021 15:45:31 +0000 (15:45 +0000)
Recent versions of the GNU assembler (observed with GNU as 2.35 on
Fedora 33) will produce a warning message

  Warning: no instruction mnemonic suffix given and no register
  operands; using default for `bts'

The operand size affects only the potential range for the bit number.
Since we pass the bit number as an unsigned int, it is already
constrained to 32 bits for both i386 and x86_64.

Silence the assembler warning by specifying an explicit 32-bit operand
size (and thereby matching the choice that the assembler would
otherwise make automatically).

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/arch/x86/include/bits/bitops.h

index 17dcf1024b591ef89115df1a774d6a831117873d..f697b8c8f90393087b7df959609a18a6518a4957 100644 (file)
@@ -29,7 +29,7 @@ set_bit ( unsigned int bit, volatile void *bits ) {
                uint8_t byte[ ( bit / 8 ) + 1 ];
        } *bytes = bits;
 
-       __asm__ __volatile__ ( "lock bts %1, %0"
+       __asm__ __volatile__ ( "lock btsl %k1, %0"
                               : "+m" ( *bytes ) : "Ir" ( bit ) );
 }
 
@@ -45,7 +45,7 @@ clear_bit ( unsigned int bit, volatile void *bits ) {
                uint8_t byte[ ( bit / 8 ) + 1 ];
        } *bytes = bits;
 
-       __asm__ __volatile__ ( "lock btr %1, %0"
+       __asm__ __volatile__ ( "lock btrl %k1, %0"
                               : "+m" ( *bytes ) : "Ir" ( bit ) );
 }
 
@@ -63,7 +63,7 @@ test_and_set_bit ( unsigned int bit, volatile void *bits ) {
        } *bytes = bits;
        int old;
 
-       __asm__ __volatile__ ( "lock bts %2, %0\n\t"
+       __asm__ __volatile__ ( "lock btsl %k2, %0\n\t"
                               "sbb %1, %1\n\t"
                               : "+m" ( *bytes ), "=r"  ( old )
                               : "Ir" ( bit ) );
@@ -84,7 +84,7 @@ test_and_clear_bit ( unsigned int bit, volatile void *bits ) {
        } *bytes = bits;
        int old;
 
-       __asm__ __volatile__ ( "lock btr %2, %0\n\t"
+       __asm__ __volatile__ ( "lock btrl %k2, %0\n\t"
                               "sbb %1, %1\n\t"
                               : "+m" ( *bytes ), "=r"  ( old )
                               : "Ir" ( bit ) );