Author: Robert Hyatt
Date: 17:38:36 09/15/01
Go up one level in this thread
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... >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.01 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.