Author: Vincent Diepeveen
Date: 19:33:18 09/15/01
Go up one level in this thread
On September 15, 2001 at 20:38:36, Robert Hyatt wrote: >On September 15, 2001 at 16:17:52, Vincent Diepeveen wrote: > >>On September 15, 2001 at 15:23:29, Bruce Moreland wrote: >> >>>On September 15, 2001 at 14:30:40, Vincent Diepeveen wrote: >>> >>>>On September 15, 2001 at 11:14:36, Sune Fischer wrote: >>> >>>>> bb ^= mask[to_square]; // remove the bit >>>>> >>>>> movelist[++counter].from=from_square; >>>>> movelist[counter].to=to_square; >>>>> movelist[counter].piece=QUEEN; >>>>> movelist[counter].capturedpiece=enemy.piece[board.id[to_square]]; >>>> >>>>this looks ugly. Using a pointer here would be way faster. >>> >>>Not necessarily. If the "counter" variable is enregistered by the compiler, you >>>end up with about the same thing as if you used a pointer, but it also depends >>>upon how large the elements of "movelist" are. >> >>If compilers optimized very well, then our problems would be solved Bruce, >>we could go write our programs in JAVA or C++ and let the compiler handle >>the problems of not allocating and removing objects. >> >>Also we would be able to use old Qbasic code in a very efficient way then. >> >>That's not what happens however. Usual it's smart to NOT trust the compiler. >> >>When patterns get complex then i saw that visual c++ makes huge optimization >>errors. >> >>Like if i check for 2 non-array/pointer entities for being zero: >> >>if( a & b ) >> then do this and that; >> >>to produce some crap assembly: >> CMP EAX,0 >> JNZ LOOP >> CMP EDX,0 >> JNZ LOOP1 >> >>Now already people will complain: "you don't need special CMP for >>2 different statements". Well they're right. >> >>In fact you don't need 2 compares even. All you need is something >>primitive like: >> >> ADD EAX,EDX >> CMP EAX,0 >> JNZ LOOP1 >> > > >That would be terribly dangerous, and if a is 1 and b is -1 you will screw >up badly. The compiler can't possibly know that it can do that unless a and >b are unsigned. And it would be dangerous there as there are two non-zero >constants you can add and get zero in an unsigned integer. > >The compiler would need special information to be able to do the above >safely, otherwise the world would be debugging some of the strangest bugs >anyone ever saw... Yeah sorry, there were a few bugs in my example code. It should read: if ( a && b ) versus if( a | b ) > > >>However i would need to learn assembly for this or i must rewrite >>my C code. The compiler isn't smart Bruce. The compiler is very stupid >>when talking about source connections. So i have to write: >> if( a+b ) >> then do this and that; >> >>>Using pointers will usually help the compiler out, because it can just indirect >>>through a value, rather than having to deal with scaling the value and adding it >>>to a constant. But in some circumstances, scaling it and adding it to a >>>constant is free. >> >>In general the above construction makes no sense. Optimizing it with a >>pointer is always safer! >> >>>bruce
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.