Am 10.12.2017 20:01 schrieb "J. Gareth Moreton" <gar...@moreton-family.com>:
The idea I had currently (this is without looking at any previous theory) was to use a kind of sliding window, similar to how ZIP and other LZ77-based algorithms work when compressing repeating strings, to look backwards in the current block for a matching command and then scan forward. If the scan gets up to the instruction right before the starting point, then it's potential for vectorisable code. Using the previous example: movss 16(%rsp),%xmm0 addss 32(%rsp),%xmm0 movss %xmm0,(%rax) movss 20(%rsp),%xmm0 addss 36(%rsp),%xmm0 movss %xmm0,4(%rax) Starting at the 4th command, it looks back to find a match in the 1st command, albeit with Ann address that differs only by 4. As it scans forward, it finds similar matches in subsequent commands, and eventually realises the entire block could potentially be vectorised. If it continues, it finds the code fragment repeats 4 times and can be vectorised with little difficulty. Being only SSE commands helps too. The preferred way would be to detect this on the parser side (with the AST) not on the code generator side as then this can be more easily implemented for different platforms. Regards, Sven
_______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel