* __ffz_word returns __BITOPS_WORDSIZE
                 * if no zero bit is present in the word.
                 */
-               set = __ffz_word(0, *p >> bit) + bit;
+               set = __ffz_word(bit, *p >> bit);
                if (set >= size)
                        return size + offset;
                if (set < __BITOPS_WORDSIZE)
                 * s390 version of ffz returns __BITOPS_WORDSIZE
                 * if no zero bit is present in the word.
                 */
-               set = ffz(__load_ulong_le(p, 0) >> bit) + bit;
+               set = __ffz_word(bit, __load_ulong_le(p, 0) >> bit);
                if (set >= size)
                        return size + offset;
                if (set < __BITOPS_WORDSIZE)
                 * s390 version of ffz returns __BITOPS_WORDSIZE
                 * if no zero bit is present in the word.
                 */
-               set = ffs(__load_ulong_le(p, 0) >> bit) + bit;
+               set = __ffs_word(0, __load_ulong_le(p, 0) & (~0UL << bit));
                if (set >= size)
                        return size + offset;
                if (set < __BITOPS_WORDSIZE)