More on semantics of opPow: return type

bearophile bearophileHUGS at lycos.com
Mon Dec 7 14:29:33 PST 2009


Lars T. Kyllingstad:
> I also seem to remember someone (was it Don or bearophile, perhaps?) 
> listing various optimisation possibilities that are more readily 
> available if ^^ is a built-in operator.

It was Don, I think.
Those optimizations can be done with the pow, ipow and cpow (real, integer, complex, this is just an idea) functions too. GCC for example simplifies cases when the exponent is 2 or 3 (that are the most common):

// C code
#include "stdio.h"
#include "math.h"
#include "stdlib.h"

int main() {
    int x = atoi("100");
    printf("%f\n", pow(x, 2));
    return 0;
}

Compiled with:
gcc version 4.3.3-dw2-tdm-1 (GCC)
gcc -Wall -S -O3 test2.c -o test2.s

    ...
    call    _atoi
    pushl   %eax
    fildl   (%esp)
    addl    $4, %esp
    fmul    %st(0), %st
    movl    $LC1, (%esp)
    fstpl   4(%esp)
    call    _printf
    ...

Some weeks ago I have filed a bug asking for a similar optimization in LLVM too (so LDC too will have it).

Bye,
bearophile



More information about the Digitalmars-d mailing list