diff options
Diffstat (limited to 'hw')
-rw-r--r-- | hw/apic.c | 38 |
1 files changed, 3 insertions, 35 deletions
@@ -20,7 +20,7 @@ #include "hw.h" #include "pc.h" #include "qemu-timer.h" -#include "osdep.h" +#include "host-utils.h" //#define DEBUG_APIC //#define DEBUG_IOAPIC @@ -108,45 +108,13 @@ static void apic_update_irq(APICState *s); /* Find first bit starting from msb */ static int fls_bit(uint32_t value) { -#if QEMU_GNUC_PREREQ(3, 4) - return 31 - __builtin_clz(value); -#else - unsigned int ret = 0; - - if (value > 0xffff) - value >>= 16, ret = 16; - if (value > 0xff) - value >>= 8, ret += 8; - if (value > 0xf) - value >>= 4, ret += 4; - if (value > 0x3) - value >>= 2, ret += 2; - return ret + (value >> 1); -#endif + return 31 - clz32(value); } /* Find first bit starting from lsb */ static int ffs_bit(uint32_t value) { -#if QEMU_GNUC_PREREQ(3, 4) - return __builtin_ffs(value) - 1; -#else - unsigned int ret = 0; - - if (!value) - return 0; - if (!(value & 0xffff)) - value >>= 16, ret = 16; - if (!(value & 0xff)) - value >>= 8, ret += 8; - if (!(value & 0xf)) - value >>= 4, ret += 4; - if (!(value & 0x3)) - value >>= 2, ret += 2; - if (!(value & 0x1)) - ret++; - return ret; -#endif + return ctz32(value); } static inline void set_bit(uint32_t *tab, int index) |