[fpc-devel] Discussion on a particular optimisation development (WARNING: Technical!)

J. Gareth Moreton gareth at moreton-family.com
Wed Feb 3 22:36:05 CET 2021


On 03/02/2021 21:18, Florian Klämpfl via fpc-devel wrote:
> Am 03.02.21 um 22:14 schrieb J. Gareth Moreton via fpc-devel:
>> Rats, I might have messed up with some of the arithmetic, as well as 
>> the dangers of crossing bitwise with logical Boolean operations, 
>> although some combinations still work - if the conditions are "x = 0" 
>> rather than "x <> 0" in the example:
>>
>>       testq    %rbx,%rbx
>>       seteb    %al
>>       testq    %rsi,%rsi
>>       seteb    %dl
>>       andb     %dl,%al
>>
>> Then this would equate to:
>>
>>       orq      %rbx,%rsi
>>       seteb    %al
>
> Indeed:
>
> # [6] b:=(x=0) and (y=0);
>     orl    %edx,%eax
> # Var b located in register al
>     seteb    %al
>
> :)
>
Suddenly I'm feeling embarrassed!  I'll have to look up to see how that 
one is optimised!
>>
>> Mistake aside, I'm looking for acceptable solutions for a 
>> platform-dependent node transformation, like a flag of some kind ($if 
>> defined etc. might get untidy, although is an option).
>>
>
> This depends on the transformation. Most transformations are 
> beneficial for all platforms.
> _______________________________________________
> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
>
I'll look around to see if there are other possible optimisations that 
revolve around DeMorgan's Laws first.  For "b:=(x<>0) and (y<>0);", 
there might not be a simple transformation available after all because, 
generally, bitwise not <> logical not.  The main question regarding 
transformations is that there might be a place for "nor" and "nand" 
operations (more traditional operations for electronics since you can 
make circuits that do all the basic Boolean operations using just NOR 
and NAND gates... e.g. a NAND gate where both inputs are wired to the 
same signal becomes a NOT gate), and Intel does have "and not" (ANDN) as 
a single instruction on later processors (anything that supports BMI1).

Gareth aka. Kit


-- 
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus



More information about the fpc-devel mailing list