x86, asm: use bool for bitops and other assembly outputs
The gcc people have confirmed that using "bool" when combined with inline assembly always is treated as a byte-sized operand that can be assumed to be 0 or 1, which is exactly what the SET instruction emits. Change the output types and intermediate variables of as many operations as practical to "bool". Signed-off-by: H. Peter Anvin <hpa@zytor.com> Link: http://lkml.kernel.org/r/1465414726-197858-3-git-send-email-hpa@linux.intel.com Reviewed-by: Andy Lutomirski <luto@kernel.org> Reviewed-by: Borislav Petkov <bp@suse.de> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Šī revīzija ir iekļauta:

revīziju iesūtīja
H. Peter Anvin

vecāks
2823d4da5d
revīzija
117780eef7
@@ -16,14 +16,16 @@
|
||||
#define BOOT_BITOPS_H
|
||||
#define _LINUX_BITOPS_H /* Inhibit inclusion of <linux/bitops.h> */
|
||||
|
||||
static inline int constant_test_bit(int nr, const void *addr)
|
||||
#include <linux/types.h>
|
||||
|
||||
static inline bool constant_test_bit(int nr, const void *addr)
|
||||
{
|
||||
const u32 *p = (const u32 *)addr;
|
||||
return ((1UL << (nr & 31)) & (p[nr >> 5])) != 0;
|
||||
}
|
||||
static inline int variable_test_bit(int nr, const void *addr)
|
||||
static inline bool variable_test_bit(int nr, const void *addr)
|
||||
{
|
||||
u8 v;
|
||||
bool v;
|
||||
const u32 *p = (const u32 *)addr;
|
||||
|
||||
asm("btl %2,%1; setc %0" : "=qm" (v) : "m" (*p), "Ir" (nr));
|
||||
|
Atsaukties uz šo jaunā problēmā
Block a user