Author: Matt Taylor
Date: 16:42:51 01/03/03
Go up one level in this thread
On January 03, 2003 at 13:37:25, Robert Hyatt wrote: >On January 03, 2003 at 10:00:51, Graham Laight wrote: > > >Here is a snippet of assembly produced by gcc, for the test > >if (x[1]==3 || x[1]==7) return(1); >else return(0); > > movl x+4, %eax > cmpl $3, %eax > sete %dl > cmpl $7, %eax > sete %al > orl %edx, %eax > testl $1, %eax > sete %al > movzbl %al, %eax > ret <snip> Very interesting. I tried the same snippet using VC 7 and every optimization I could find and got atrocious code: movl x+4, %eax cmpl $3, %eax je L73439 cmpl $7, %eax je L73439 xorl %eax, %eax ret L73439: movl $1, %eax ret I'm also suprised that GCC missed saving these two cycles: movl x+4, %eax cmpl $3, %eax sete %dl cmpl $7, %eax sete %al ; Should be using partial registers to avoid stall on P6/P7 ;orl %edx, %eax orb %dl, %al ; Omit (redundant) ;testl $1, %eax ;sete %al movzbl %al, %eax ret I guess there is still room for hand-tweaking assembly code, though it is obviously not worthwhile unless you need to start squeezing cycles out of code. -Matt
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.