On Mon, Dec 29, 2014 at 10:34 PM, Max Filippov <jcmvbkbc@gmail.com> wrote:
On Tue, Dec 30, 2014 at 3:25 AM, VinÃcius Tinti <viniciustinti@gmail.com> wrote:
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?
It seems that the nop instruction is inserted for alignment, and if you reverse the order of functions in your c source, nop will still be inserted between them.
I notice that too. If you use both functions in other code they both will have the nopl. And "!expression" is as good as the "(expression) ? 0 : 1". Thus no gain and worse readability I think.
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
-- Thanks. -- Max
-- Simplicity is the ultimate sophistication