On Sat, 22 Jan 2005 18:36:46 +1100
Erik de Castro Lopo <erikd-lad(a)mega-nerd.com> wrote:
  On Fri, 21 Jan 2005 23:08:50 +0000
 Neil Klepeis <nklepeis(a)sbcglobal.net> wrote:
  What exactly am I looking for?  
 I'm not too sure, but I'd know if I saw it :-).
  After using g++ -S, the allpass.o file,
 for example, starts out with: 
 Send me the whole allpass.c file by private mail (address below) and
 I'll have a look. 
OK, the code of interest is in the process() method of the allpass class.
This method is defined as an inline function in allpass.h. I therefore
wrote a small test file :
    #include "allpass.h"
    static allpass ap ;
    float test (float x)
    {   return ap.process (x) ;
    }
and compiler that with:
    g++ -S -O3 test.cpp -o test.s
In the asembler output file we get this:
    .LFE6:
        .size _Z41__static_initialization_and_  <snip rest of line>
        .section        .rodata.cst4,"aM",@progbits,4
        .align 4
.LC0:
        .long   201326592
        .text
        .align 2
        .p2align 4,,15
The long above (201326592) is the integer representation of the float value.
The asm code for the test function looks like this (comments added):
    .globl _Z4testf
        .type   _Z4testf, @function
    _Z4testf:
    .LFB7:
        pushl   %ebp
    .LCFI2:
        movl    %esp, %ebp
    .LCFI3:
        subl    $4, %esp
    .LCFI4:
        flds    .LC0                  ; load the float value to the fpu stack
        movl    ap+12, %edx
        movl    ap+4, %ecx
        flds    8(%ebp)
        movl    (%ecx,%edx,4), %eax   ; load buffer[bufidx] -> %eax
        movl    %eax, -4(%ebp)        ; move %eax -> bufout
        flds    -4(%ebp)              ; load bufout to the fpu
        fadd    %st(2), %st           ; new top of stack = bufout + the_const
        fstps   -4(%ebp)              ; store top of stack -> bufout
        flds    -4(%ebp)              ; load buf out to top of stack
        fsubp   %st, %st(2)           ; new top of stack <- bufout - the_const
and so on. This shows that even with -O3, the denormalisation
code is not being optimised out.
Erik
--
+-----------------------------------------------------------+
  Erik de Castro Lopo  nospam(a)mega-nerd.com (Yes it's valid)
+-----------------------------------------------------------+
"O'Caml ... a "language designed for smart people" if there ever
was one." -- Mike Vanier