http://d.puremagic.com/issues/show_bug.cgi?id=5688
--- Comment #2 from Don <clugd...@yahoo.com.au> 2011-03-03 17:52:46 PST --- (In reply to comment #1) > Interestingly, if the code is written as: > > bool foo(long v) > { > return (v & 1) == 1; > } > > the code generated is: > > mov EAX,4[ESP] > mov EDX,8[ESP] > and EAX,1 > xor EDX,EDX > ret 8 I noticed that. And even though that's better, both uses of EDX are completely unnecessary. Changing cgelem.c, elcmp(), around line 3350 to this: case 8: - e = el_una(OP64_32,TYlong,e); + e->E1 = el_una(OP64_32,TYint,e->E1); + e->E2 = el_una(OP64_32,TYint,e->E2); break; makes it create optimal code, although that's probably incorrect for 64 bits. The way elcmp() works looks pretty bizarre to me. But it's the return ( v & 1); case that is the primary problem. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------