[S390] find bit corner case.
Fix [ext2_]find_first_[zero_]bit for the corner case of an all clear or all set bit field by always handling that last word of the bit field with __ffz_word/__ffs_word. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
@@ -456,16 +456,18 @@ static inline unsigned long __ffz_word_loop(const unsigned long *addr,
|
|||||||
|
|
||||||
asm volatile(
|
asm volatile(
|
||||||
#ifndef __s390x__
|
#ifndef __s390x__
|
||||||
" ahi %1,31\n"
|
" ahi %1,-1\n"
|
||||||
" srl %1,5\n"
|
" sra %1,5\n"
|
||||||
|
" jz 1f\n"
|
||||||
"0: c %2,0(%0,%3)\n"
|
"0: c %2,0(%0,%3)\n"
|
||||||
" jne 1f\n"
|
" jne 1f\n"
|
||||||
" la %0,4(%0)\n"
|
" la %0,4(%0)\n"
|
||||||
" brct %1,0b\n"
|
" brct %1,0b\n"
|
||||||
"1:\n"
|
"1:\n"
|
||||||
#else
|
#else
|
||||||
" aghi %1,63\n"
|
" aghi %1,-1\n"
|
||||||
" srlg %1,%1,6\n"
|
" srag %1,%1,6\n"
|
||||||
|
" jz 1f\n"
|
||||||
"0: cg %2,0(%0,%3)\n"
|
"0: cg %2,0(%0,%3)\n"
|
||||||
" jne 1f\n"
|
" jne 1f\n"
|
||||||
" la %0,8(%0)\n"
|
" la %0,8(%0)\n"
|
||||||
@@ -491,16 +493,18 @@ static inline unsigned long __ffs_word_loop(const unsigned long *addr,
|
|||||||
|
|
||||||
asm volatile(
|
asm volatile(
|
||||||
#ifndef __s390x__
|
#ifndef __s390x__
|
||||||
" ahi %1,31\n"
|
" ahi %1,-1\n"
|
||||||
" srl %1,5\n"
|
" sra %1,5\n"
|
||||||
|
" jz 1f\n"
|
||||||
"0: c %2,0(%0,%3)\n"
|
"0: c %2,0(%0,%3)\n"
|
||||||
" jne 1f\n"
|
" jne 1f\n"
|
||||||
" la %0,4(%0)\n"
|
" la %0,4(%0)\n"
|
||||||
" brct %1,0b\n"
|
" brct %1,0b\n"
|
||||||
"1:\n"
|
"1:\n"
|
||||||
#else
|
#else
|
||||||
" aghi %1,63\n"
|
" aghi %1,-1\n"
|
||||||
" srlg %1,%1,6\n"
|
" srag %1,%1,6\n"
|
||||||
|
" jz 1f\n"
|
||||||
"0: cg %2,0(%0,%3)\n"
|
"0: cg %2,0(%0,%3)\n"
|
||||||
" jne 1f\n"
|
" jne 1f\n"
|
||||||
" la %0,8(%0)\n"
|
" la %0,8(%0)\n"
|
||||||
|
Reference in New Issue
Block a user