Messages in this thread |  | | From | "H. Peter Anvin" <> | Subject | Re: Kernel's X86 ffs() doesn't work on constants. | Date | 28 Nov 2001 15:00:38 -0800 |
| |
Followup to: <200111282239.fASMdMY82422@aslan.scsiguy.com> By author: "Justin T. Gibbs" <gibbs@scsiguy.com> In newsgroup: linux.dev.kernel > > If you attempt to call ffs(SOME_CONSTAT) in an x86 kernel under > Linux, you get messages like this: > > {standard input}: Assembler messages: > {standard input}:14864: Error: suffix or operands invalid for `bsf' > > I'm not enough of a GCC asm syntax guru to understand why the > compiler/assembler doesn't handle this, but it is hightly anoying. > > "Why not just code in the constant bit offset?", you ask? If > the constant the bit offset is based on is ever changed, I must > recognize that the change occured and change the second constant. > For constants that are maintained outside of my code, I'd rather > code the dependency once and let the compiler ensure that the constants > are in sync. >
Try changing the "g" in the definition of ffs() (asm/bitops.h) to "rm"; the "g" constrains incorrectly allows immediate operands.
-hpa -- <hpa@transmeta.com> at work, <hpa@zytor.com> in private! "Unix gives you enough rope to shoot yourself in the foot." http://www.zytor.com/~hpa/puzzle.txt <amsp@zytor.com> - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |