On Nov 8, 2005, at 11:39, Eduardo wrote:

At 04:42 08/11/2005, you wrote:
May be having case statement problem.

App has case statement with 146 sequential labels.
They are in order, from a defined type.
The assembler output is scanning each label, where it seems a jump would be more efficient.

I don't understand well what you have:

Not this

case L3o3.Formtype of
1,2,3,....,146 : begin <somecode>
                end;
or


This :)

case L3o3.FormType of
1 : begin <somecode1>
     end
2 : begin <somecode2>
     end

and so on.....

For the second case the assemmbler code seems ok to me, also L1051 L1052 L1053 looks like are different destinations. For the first, well, it can be optimized "a bit" by hand, but note that it's difficult to do in "automatic mode" by a compiler.

lwz           r2,160(r1)        // Load in r2 the value to compare
subi r3,r2,145 // Change 145 with the top value. Don't need to record in cr0, so subi is used instead of subi. (with point) cmplwi cr3,r3,0 // Change 0 with the low value. So if 145-r2 is greater or equal 0, it's between them or is one of them bge cr3,L1051 // branch to L1051. Use bge+ cr3,L1051 if you are sure that branch will be taken often

Note that cr3, is a condition register field and can be used by the compiler for other pourposes. This code only works with integer values 0 < r2 < 65535, perhaps also works with chars. If you know that the condition is true (r2 is between 0 and 145 often), you can use the '+' format of the branch.

The code may not work, i'm writing it by memory.

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal



Was under the impression that doing a jump, offset by label number, would be faster. Specially for such long case statements.

P Davidson
http://CoraxNetworks.com

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to