Hi, I was looking the kernel source code and there are a lot of places in which either "(expression) ? 1 : 0" or "(expression) ? 0 : 1" appear. As fair as I can tell both can be replaced by "!!expression" and "!expression".
Moreover there it seems that using "!!" does not add a "nopl" instruction at the end of the call. Does anybody knows why? Anyway. Wouldn't be nice if kernel provides something like "boolean(x)" macro and "inv_boolean(x)" to do this operations? #ifdef MOD_IF int mod_if(int x) { return (x == 0) ? 0 : 1; } #endif #ifdef MOD_X int mod_x(int x) { return !!x; } #endif 0000000000000000 <mod_if>: 0: 31 c0 xor %eax,%eax 2: 85 ff test %edi,%edi 4: 0f 95 c0 setne %al 7: c3 retq 8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) f: 00 0000000000000010 <mod_x>: 10: 31 c0 xor %eax,%eax 12: 85 ff test %edi,%edi 14: 0f 95 c0 setne %al 17: c3 retq Regards, Vinícius -- Simplicity is the ultimate sophistication _______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies