On May 20 2007 18:12, Folkert van Heusden wrote: >> > >> > + if (unlikely(sig == SIGQUIT || sig == SIGILL || sig == SIGTRAP || >> > + sig == SIGABRT || sig == SIGBUS || sig == SIGFPE || >> > + sig == SIGSEGV || sig == SIGXCPU || sig == SIGXFSZ || >> > + sig == SIGSYS || sig == SIGSTKFLT)) >> > + { >> > + printk(KERN_WARNING "Sig %d send to %d owned by %d.%d (%s)\n", >> > + sig, t->pid, t->uid, t->gid, t->comm); >> > + } >> > + >> > /* >> > * fast-pathed signals for kernel-internal things like SIGSTOP >> > * or SIGKILL. >> >> Would turning that into a switch() generate better code.
Yes, this time. >Doubt it: in the worst case you still nee to check for each possibility. >Furthermore a.f.a.i.k. with switch you cannot do 'unlinkely()'. With if(), it generates a ton of "CMP, JE" instructions. With switch(), I would assume gcc transforms it into using a jump table (aka "JMP [table+sig]") I tried it: with switch(), gcc transforms this into a bitmap comparison ("MOV eax, 1; SHL eax, sig; TEST eax, 0x830109f8"), which seems even cheaper than a jump table. Jan -- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/