Forum > General
inlining a generic lookup-table
(1/1)
yogo1212:
Hi,
im trying to do this weird thing to optimise my code.
Having to do a lookup-table everywhere you want you want one can be really annoying...
That's why i am trying to insert a level of abstraction; which is potentially slower, but still better than losing hundreds of cycles with a pipeline flush.
My current idea is:
--- Code: ---// ok... trying to make sure the inlined code is being optimised...
// not sure how inlining is implemented
{$OPTIMIZATION ON}
// inline for less stack-frames.
procedure genericLookup(second: Boolean; a,b: TObjProc); inline;
procedure genericLookup(really: Boolean; a: TObjProc); inline; overload;
{$OPTIMIZATION DEFAULT}
implementation
{$OPTIMIZATION ON}
// Is this crap?
procedure genericLookup(second: Boolean; a, b: TObjProc);
// cant make this a global variable because not thread-safe. :-(
// where does it land anyway? register? that makes the lookup really weird.
// Hope it's not on the stack...
var genericBinaryLookupTable: Array[Boolean] of TObjProc;
begin
genericBinaryLookupTable[False] := a;
genericBinaryLookupTable[True] := b;
genericBinaryLookupTable[second]();
end;
procedure genericLookup(really: Boolean; a: TObjProc);
var genericSingularLookupTable: Array[Boolean] of TObjProc;
begin
PPointer(@genericSingularLookupTable[False])^ := Pointer(@DoNothing);
genericSingularLookupTable[True] := a;
genericSingularLookupTable[really]();
end;
{$OPTIMIZATION DEFAULT}
--- End code ---
Is this bogus? If so, why?
Any ideas how to improve?
kind regards
EDIT: Is there a guide about writing code that helps make use of optimisation?
Navigation
[0] Message Index