Basecase assembly optimisation project

Ondřej Bílka neleai at
Wed Oct 2 23:14:02 CEST 2013

On Wed, Oct 02, 2013 at 08:19:29PM +0200, Niels Möller wrote:
> Torbjorn Granlund <tg at> writes:
> > We don't handle alternatives currently, except with a loop around the
> > loopmixer.  One could think of several classes, some known to the tool,
> > others not-always-valid only by source file annotation.  Examples of the
> > former would be "xor rax,rax" vs "xor eax,eax" and "mov reg,reg" vs lea
> > (reg),reg.
> Another feature, which I looked into while ago without getting very far
> with the loopmixer, is to make it understand associativity. I.e, try
> reordering certain instructions with the same destination register, like
>   xor	%r8, %rax
>   xor	%r9, %rax
> or
>   add	%r8, %rax
>   add	%r9, %rax
> This is possible if nothing else depends on the intermediate results
> (including no dependencies on status flags).
This is relatively easy to add, my basic block is swap two adjacent
instructions and I have list of pairs that are possible like
addq addq
addq subq
pminub pminub

There is one feature that I plan to add which is recalculating addresses
like transforming between

addq $64, %rdi
movdqa (%rdi), %xmm0
movdqa 64(%rdi), %xmm0
addq $64, %rdi

In mine program is programmer responsibility to annotate parts 
without control flow.

> Probably more useful for cryptographic loops than for arithmetic.
With vector loops this is also usefull.
> Regards,
> /Niels
> -- 
> Niels Möller. PGP-encrypted email is preferred. Keyid C0B98E26.
> Internet email is subject to wholesale government surveillance.

More information about the gmp-devel mailing list