/*
- * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved.
+ * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
static INLINE int _bitset_ia32_inside_is_set(bitset_unit_t *unit, unsigned bit)
{
int res;
- __asm__("btl %2, %1\n\t"
- "mov $0, %0\n\t"
- "adc $0, %0"
+ __asm__("bt %2, %1\n\t"
+ "rcl $1, %0\n\t"
+ "and $1, %0"
: "=r" (res)
: "m" (*unit), "Ir" (bit)
: "cc");
static INLINE unsigned _bitset_ia32_inside_nlz(bitset_unit_t *unit)
{
- unsigned res, tmp;
- __asm__("bsrl %1, %0\n\t"
- "mov $ffffffff, %2\n\t"
+ unsigned res;
+ __asm__("bsr %1, %0\n\t"
"cmovz %2, %0\n\t"
"neg %0\n\t"
"add $31, %0"
: "=&r" (res)
- : "m" (*unit), "r" (tmp)
+ : "m" (*unit), "r" (-1)
: "cc");
return res;
}
static INLINE unsigned _bitset_ia32_inside_ntz(bitset_unit_t *unit) {
- unsigned res, tmp;
- __asm__("bsf l %1, %0\n\t"
- "mov $32, %2\n\t"
+ unsigned res;
+ __asm__("bsfl %1, %0\n\t"
"cmovz %2, %0\n\t"
: "=&r" (res)
- : "m" (*unit), "r" (tmp)
+ : "m" (*unit), "r" (32)
: "cc");
return res;
}
static INLINE unsigned _bitset_ia32_inside_ntz_value(bitset_unit_t unit) {
- unsigned res, tmp;
+ unsigned res;
__asm__("bsfl %1, %0\n\t"
- "mov $32, %2\n\t"
"cmovz %2, %0\n\t"
: "=&r" (res)
- : "r" (unit), "r" (tmp)
+ : "r" (unit), "r" (32)
: "cc");
return res;
}