#ifndef _NTZ_H #define _NTZ_H /* Number of Tail Zeros: ntz(x)= (ffs(x) ? ffs(x)-1 : 16) It works with all: cpp, gcc and gas expressions. */ #define ntz(x) \ ( (1 & (((x) & 1) == 0)) \ + (1 & (((x) & 3) == 0)) \ + (1 & (((x) & 7) == 0)) \ + (1 & (((x) & 017) == 0)) \ + (1 & (((x) & 037) == 0)) \ + (1 & (((x) & 077) == 0)) \ + (1 & (((x) & 0177) == 0)) \ + (1 & (((x) & 0377) == 0)) \ + (1 & (((x) & 0777) == 0)) \ + (1 & (((x) & 01777) == 0)) \ + (1 & (((x) & 03777) == 0)) \ + (1 & (((x) & 07777) == 0)) \ + (1 & (((x) & 017777) == 0)) \ + (1 & (((x) & 037777) == 0)) \ + (1 & (((x) & 077777) == 0)) \ + (1 & (((x) & 0177777) == 0)) ) #endif /* !_NTZ_H */