[fpc-devel] Object/Pointer Swap Intrinsic
J. Gareth Moreton
gareth at moreton-family.com
Thu Dec 12 00:34:18 CET 2019
That's true. Given I specialise in optimisation, I've started to
venture towards the node level to see where improvements can be made.
One question I do have in that regard... are platform-specific nodes
allowed? What I mean is, for example, a node's 'simplify' routine may
transmute a set of nodes to a platform-specific node that may better
benefit, say, vectorisation on an AMD64 processor. (A swap node will be
platform-independent, and if platform-specific assembly isn't available,
then to just create the equivalent Pascal code as you laid out below).
So many exciting challenges ahead! Got to fix bugs in the existing
stuff first though.
Gareth aka. Kit
On 11/12/2019 21:43, Sven Barth via fpc-devel wrote:
> Am 11.12.2019 um 07:26 schrieb J. Gareth Moreton:
>> Hi everyone,
>> I was wondering... is there an intrinsic in Free Pascal that swaps
>> the pointers stored in two object or pointer variables? That is...
>> something like "procedure SwapAddresses(var Obj1: TObject; var Obj2:
>> TObject);" so after it is called, Obj2 now points to Obj1 and vice
>> versa? Under x86-64, for example, it can be implemented as (Intel
>> XOR RCX, RDX
>> XOR RDX, RCX
>> XOR RCX, RDX
>> Or just
>> XCHG RCX, RDX
> It might be more useful to try to write high level optimization that
> detects the typical swap sequence of
> tmp := a;
> a := b;
> b := tmp;
> And optimizes that to the most optimal CPU instructions (by converting
> it to an internal "Swap" intrinsic, similar as it is done for the
> load/modify/store optimizations).
> Then any existing code would profit from that as well.
> And for your specific use case you could then add such swap procedures
> to cutils.pas or so...
> fpc-devel maillist - fpc-devel at lists.freepascal.org
More information about the fpc-devel