Carmack about static analysis
Adam D. Ruppe
destructionator at gmail.com
Sun Dec 25 15:13:55 PST 2011
On Sunday, 25 December 2011 at 04:44:57 UTC, Andrei Alexandrescu
wrote:
> I see every letter beyond this as a liability:
Yeah, though like Jacob said, the implementation doesn't
matter as much as the idea of giving it a name.
But, if you're curious about why I wrote it long form, it's
just a quirk I sometimes do; if I read something out loud
differently than how I wrote it, I'll sometimes rewrite it.
Here, I dictated it to myself as "if it's divisible by two,
return false (not odd), otherwise, return true (is odd)", and
decided to write it almost exactly like that.
Usually, these little things are meaningless once compiled,
but check this out:
===
bool test(int a) {
if(a%2 == 0)
return false;
else
return true;
}
bool test2(int a) {
return a&1;
}
===
$ dmd -O -c test.d # 2.057 btw
$ objdump -d test.o
Disassembly of section .text._D5test24testFiZb:
00000000 <_D5test24testFiZb>:
0: 55 push %ebp
1: 8b ec mov %esp,%ebp
3: 50 push %eax
4: 99 cltd
5: 33 c2 xor %edx,%eax
7: 25 01 00 00 00 and $0x1,%eax
c: 03 d0 add %eax,%edx
e: 83 fa 01 cmp $0x1,%edx
11: 19 c0 sbb %eax,%eax
13: 8b e5 mov %ebp,%esp
15: 40 inc %eax
16: 5d pop %ebp
17: c3 ret
Disassembly of section .text._D5test25test2FiZb:
00000000 <_D5test25test2FiZb>:
0: 55 push %ebp
1: 8b ec mov %esp,%ebp
3: 50 push %eax
4: 25 01 00 00 00 and $0x1,%eax
9: f7 d8 neg %eax
b: 19 c0 sbb %eax,%eax
d: 8b e5 mov %ebp,%esp
f: f7 d8 neg %eax
11: 5d pop %ebp
12: c3 ret
Almost the same, but not quite.... I think the two
functions should have compiled identically. With gcc
(compiling the code as C), it comes out:
00000000 <test>:
0: 55 push %ebp
1: 89 e5 mov %esp,%ebp
3: 8b 45 08 mov 0x8(%ebp),%eax
6: 83 e0 01 and $0x1,%eax
9: 5d pop %ebp
a: c3 ret
for both functions.
(btw "Akismet thinks your post looks like spam. " LOL)
More information about the Digitalmars-d
mailing list