On Thu, Mar 7, 2019 at 8:46 AM Oleg Nesterov <oleg@xxxxxxxxxx> wrote: > > On 03/07, Arnd Bergmann wrote: > > > > We could use % everywhere, > > Yes. > > But again, why not simply use the "for (;;)" loops? Why we can't kill the > supid switch(_NSIG_WORDS) tricks altogether? > > Oleg. > > --- x/include/linux/signal.h > +++ x/include/linux/signal.h > @@ -121,26 +121,9 @@ > #define _SIG_SET_BINOP(name, op) \ > static inline void name(sigset_t *r, const sigset_t *a, const sigset_t *b) \ > { \ > - unsigned long a0, a1, a2, a3, b0, b1, b2, b3; \ > - \ > - switch (_NSIG_WORDS) { \ > - case 4: \ > - a3 = a->sig[3]; a2 = a->sig[2]; \ > - b3 = b->sig[3]; b2 = b->sig[2]; \ > - r->sig[3] = op(a3, b3); \ > - r->sig[2] = op(a2, b2); \ > - /* fall through */ \ > - case 2: \ > - a1 = a->sig[1]; b1 = b->sig[1]; \ > - r->sig[1] = op(a1, b1); \ > - /* fall through */ \ > - case 1: \ > - a0 = a->sig[0]; b0 = b->sig[0]; \ > - r->sig[0] = op(a0, b0); \ > - break; \ > - default: \ > - BUILD_BUG(); \ > - } \ > + int i; \ > + for (i = 0; i < ARRAY_SIZE(r->sig); ++i) \ > + r->sig[i] = op(a->sig[i], b->sig[i]); \ > } > > #define _sig_or(x,y) ((x) | (y)) > That looks much cleaner IMO. -- Thanks, ~Nick Desaulniers