[Bug c/27264] New: gcc 4.0.1 creates unassembleable code for FFTW library

stp at create dot ucsb dot edu gcc-bugzilla@gcc.gnu.org
Sat Apr 22 23:42:00 GMT 2006


Compiling FFTW 3.1.1 on a new Intel Mac, gcc 4.0.1 generates unassemblable code
for several of the main files, e.g. the following,

[stp:/Users/stp/Code/MacLibs/fftw-3.1.1/kernel] make trig.lo
 gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../simd -O3 -fomit-frame-pointer
-malign-double -fstrict-aliasing -ffast-math -march=pentiumpro -D_THREAD_SAFE
-MT trig.lo -MD -MP -MF .deps/trig.Tpo -c trig.c -o trig.o
/var/tmp//ccL7WCuH.s:79:operands given don't match any known 386 instruction
/var/tmp//ccL7WCuH.s:83:operands given don't match any known 386 instruction
/var/tmp//ccL7WCuH.s:112:operands given don't match any known 386 instruction
/var/tmp//ccL7WCuH.s:114:operands given don't match any known 386 instruction
/var/tmp//ccL7WCuH.s:138:operands given don't match any known 386 instruction
/var/tmp//ccL7WCuH.s:144:operands given don't match any known 386 instruction
make: *** [trig.lo] Error 1

I'm attaching the broken assembly file below.
If I compile with no flags, it succeeds; as in,

[stp:/Users/stp/Code/MacLibs/fftw-3.1.1/kernel] make CFLAGS="-O2" trig.lo
 gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../simd -O2 -MT trig.lo -MD -MP -MF
.deps/trig.Tpo -c trig.c -o trig.o

which works fine.
Here's the gcc version:

Target: i686-apple-darwin8
Configured with: /private/var/tmp/gcc/gcc-5250.obj~12/src/configure
--disable-checking -enable-werror --prefix=/usr --mandir=/share/man
--enable-languages=c,objc,c++,obj-c++
--program-transform-name=/^[cg][^.-]*$/s/$/-4.0/
--with-gxx-include-dir=/include/c++/4.0.0 --build=powerpc-apple-darwin8
--with-arch=pentium-m --with-tune=prescott --program-prefix=
--host=i686-apple-darwin8 --target=i686-apple-darwin8
Thread model: posix
gcc version 4.0.1 (Apple Computer, Inc. build 5250)

Here's the broken trig.s file

        .text
_cexpl_sqrtn_table:
        pushl   %edi
        pushl   %esi
        subl    $4, %esp
        movl    16(%esp), %ecx
        movl    20(%esp), %edx
        movl    24(%esp), %edi
        movl    %edx, %eax
        shrl    $31, %eax
        imull   32(%ecx), %eax
        addl    %eax, %edx
        movl    24(%ecx), %esi
        movl    %edx, %eax
        andl    20(%ecx), %eax
        sall    $4, %eax
        fldl    (%esi,%eax)
        fldl    8(%esi,%eax)
        movl    28(%ecx), %eax
        movl    12(%ecx), %ecx
        sarl    %cl, %edx
        sall    $4, %edx
        fldl    (%eax,%edx)
        fldl    8(%eax,%edx)
        fld     %st(3)
        fmul    %st(2), %st
        fld     %st(3)
        fmul    %st(2), %st
        fsubrp  %st, %st(1)
        fstpl   (%edi)
        fmulp   %st, %st(3)
        fmulp   %st, %st(1)
        faddp   %st, %st(1)
        fstpl   8(%edi)
        addl    $4, %esp
        popl    %esi
        popl    %edi
        ret
_rotate_sqrtn_table:
        pushl   %edi
        pushl   %esi
        subl    $4, %esp
        movl    16(%esp), %ecx
        movl    20(%esp), %edx
        movl    32(%esp), %edi
        movl    %edx, %eax
        shrl    $31, %eax
        imull   32(%ecx), %eax
        addl    %eax, %edx
        movl    24(%ecx), %esi
        movl    %edx, %eax
        andl    20(%ecx), %eax
        sall    $4, %eax
        fldl    (%esi,%eax)
        fldl    8(%esi,%eax)
        movl    28(%ecx), %eax
        movl    12(%ecx), %ecx
        sarl    %cl, %edx
        sall    $4, %edx
        fldl    (%eax,%edx)
        fldl    8(%eax,%edx)
        fld     %st(3)
        fmul    %st(2), %st
        fld     %st(3)
        fmul    %st(2), %st
        fsubrp  %st, %st(1)
        fxch    %st(4)
        fmulp   %st, %st(1)
        fxch    %st(2)
        fmulp   %st, %st(1)
        faddp   %st, %st(1)
        flds    24(%esp)
        flds    28(%esp)
        fld     %st(3)
        fmul    %st(2), %st
        fld     %st(3)
        fmul    %st(2), %st
        faddp   %st, %st(1)
        fstp    (%edi)
        fmulp   %st, %st(3)
        fmulp   %st, %st(1)
        fsubrp  %st, %st(1)
        fstp    4(%edi)
        addl    $4, %esp
        popl    %esi
        popl    %edi
        ret
_cexp_zero:
        movl    12(%esp), %edx
        xorl    %eax, %eax
        movl    %eax, (%edx)
        movl    %eax, 4(%edx)
        ret
_cexpl_zero:
        movl    12(%esp), %eax
        fldz
        fstl    (%eax)
        fstpl   8(%eax)
        ret
_cexp_generic:
        pushl   %esi
        subl    $40, %esp
        movl    48(%esp), %edx
        movl    56(%esp), %esi
        leal    16(%esp), %eax
        movl    %eax, 8(%esp)
        movl    52(%esp), %eax
        movl    %eax, 4(%esp)
        movl    %edx, (%esp)
        call    *4(%edx)
        fldl    16(%esp)
        fstp    (%esi)
        fldl    24(%esp)
        fstp    4(%esi)
        addl    $40, %esp
        popl    %esi
        ret
_rotate_generic:
        pushl   %esi
        subl    $40, %esp
        movl    48(%esp), %edx
        movl    64(%esp), %esi
        leal    16(%esp), %eax
        movl    %eax, 8(%esp)
        movl    52(%esp), %eax
        movl    %eax, 4(%esp)
        movl    %edx, (%esp)
        call    *4(%edx)
        flds    56(%esp)
        fldl    16(%esp)
        flds    60(%esp)
        fldl    24(%esp)
        fld     %st(3)
        fmul    %st(3), %st
        fld     %st(2)
        fmul    %st(2), %st
        faddp   %st, %st(1)
        fstp    (%esi)
        fxch    %st(2)
        fmulp   %st, %st(1)
        fxch    %st(1)
        fmulp   %st, %st(2)
        fsubp   %st, %st(1)
        fstp    4(%esi)
        addl    $40, %esp
        popl    %esi
        ret
.globl _fftwf_triggen_destroy
_fftwf_triggen_destroy:
        pushl   %esi
        subl    $24, %esp
        movl    32(%esp), %esi
        movl    24(%esi), %eax
        movl    %eax, (%esp)
        call    L_fftwf_ifree0$stub
        movl    28(%esi), %eax
        movl    %eax, (%esp)
        call    L_fftwf_ifree0$stub
        movl    %esi, 32(%esp)
        addl    $24, %esp
        popl    %esi
        jmp     L_fftwf_ifree$stub
        .literal8
        .align 3
LC2:
        .long   1413754136
        .long   1075388923
        .text
_cexpl_sincos:
        pushl   %ebp
        pushl   %edi
        pushl   %esi
        pushl   %ebx
        subl    $4, %esp
        call    ___i686.get_pc_thunk.bx
"L00000000001$pb":
        movl    24(%esp), %eax
        movl    32(%eax), %esi
        leal    0(,%esi,4), %edi
        movl    28(%esp), %edx
        sall    $2, %edx
        leal    (%edx,%edi), %eax
        cmpl    $-1, %edx
        cmovle  %eax, %edx
        movl    %edi, %ecx
        subl    %edx, %ecx
        cmpl    %ecx, %edx
        jle     L18
        movl    $4, %ebp
        movl    %ecx, %eax
        subl    %esi, %eax
        testl   %eax, %eax
        jle     L36
L21:
        orl     $2, %ebp
L23:
        movl    %esi, %edx
        subl    %eax, %edx
        cmpl    %edx, %eax
        jg      L24
        movl    %eax, %edx
L26:
        fldl    LC2-"L00000000001$pb"(%ebx)
        pushl   %edx
        fimull  (%esp)
        movl    %edi, (%esp)
        fidivl  (%esp)
        addl    $4, %esp
        fsincos
        fld     %st(0)
        testl   $1, %ebp
        jne     L37
        fstp    %st(0)
        fxch    %st(1)
L27:
        testl   $2, %ebp
        je      L31
        fchs
        fxch    %st(1)
L31:
        andl    $4, %ebp
        je      L32
        fchs
L32:
        fxch    %st(1)
        movl    32(%esp), %eax
        fstpl   (%eax)
        fstpl   8(%eax)
        addl    $4, %esp
        popl    %ebx
        popl    %esi
        popl    %edi
        popl    %ebp
        ret
L37:
        fstp    %st(1)
        jmp     L27
L24:
        orl     $1, %ebp
        jmp     L26
L18:
        movl    %edx, %ecx
        xorl    %ebp, %ebp
        movl    %ecx, %eax
        subl    %esi, %eax
        testl   %eax, %eax
        jg      L21
L36:
        movl    %ecx, %eax
        jmp     L23
        .literal8
        .align 3
LC5:
        .long   1413754136
        .long   1075388923
        .text
.globl _fftwf_mktriggen
_fftwf_mktriggen:
        pushl   %ebp
        pushl   %edi
        pushl   %esi
        pushl   %ebx
        subl    $76, %esp
        call    ___i686.get_pc_thunk.bx
"L00000000002$pb":
        movl    96(%esp), %esi
        movl    $36, (%esp)
        call    L_fftwf_malloc_plain$stub
        movl    %eax, %edi
        movl    100(%esp), %eax
        movl    %eax, 32(%edi)
        movl    $0, 28(%edi)
        movl    $0, 24(%edi)
        movl    $0, (%edi)
        movl    $0, 8(%edi)
        cmpl    $2, %esi
        je      L41
        cmpl    $3, %esi
        je      L42
        subl    $1, %esi
        je      L100
L115:
        movl    (%edi), %ecx
        testl   %ecx, %ecx
        je      L117
L89:
        movl    8(%edi), %edx
        testl   %edx, %edx
        je      L118
        movl    %edi, %eax
        addl    $76, %esp
        popl    %ebx
        popl    %esi
        popl    %edi
        popl    %ebp
        ret
L118:
        leal    _rotate_generic-"L00000000002$pb"(%ebx), %eax
        movl    %eax, 8(%edi)
        movl    %edi, %eax
        addl    $76, %esp
        popl    %ebx
        popl    %esi
        popl    %edi
        popl    %ebp
        ret
L41:
        movl    100(%esp), %eax
        testl   %eax, %eax
        jle     L103
        movl    100(%esp), %eax
        xorl    %ecx, %ecx
L44:
        addl    $1, %ecx
        sarl    $2, %eax
        testl   %eax, %eax
        jg      L44
        movl    $1, 48(%esp)
        sall    %cl, 48(%esp)
L46:
        movl    %ecx, 12(%edi)
        movl    48(%esp), %edx
        movl    %edx, 16(%edi)
        movl    %edx, %eax
        subl    $1, %eax
        movl    %eax, 20(%edi)
        movl    100(%esp), %ecx
        leal    -1(%ecx,%edx), %esi
        movl    %esi, %eax
        cltd
        idivl   48(%esp)
        movl    %eax, 32(%esp)
        movl    48(%esp), %eax
        sall    $4, %eax
        movl    %eax, (%esp)
        call    L_fftwf_malloc_plain$stub
        movl    %eax, 24(%edi)
        movl    32(%esp), %eax
        sall    $4, %eax
        movl    %eax, (%esp)
        call    L_fftwf_malloc_plain$stub
        movl    %eax, 40(%esp)
        movl    %eax, 28(%edi)
        movl    48(%esp), %ebp
        testl   %ebp, %ebp
        jle     L47
        movl    100(%esp), %edx
        sall    $2, %edx
        movl    %edx, 52(%esp)
        fildl   52(%esp)
        movl    $0, 44(%esp)
        movl    $0, 56(%esp)
        fldl    LC5-"L00000000002$pb"(%ebx)
        movl    24(%edi), %ebp
L49:
        movl    56(%esp), %edx
        testl   %edx, %edx
        js      L105
L50:
        movl    52(%esp), %eax
        subl    %edx, %eax
        cmpl    %eax, %edx
        jg      L106
        movl    %edx, %eax
        xorl    %esi, %esi
        movl    %eax, %ecx
        subl    100(%esp), %ecx
        testl   %ecx, %ecx
        jle     L104
L55:
        orl     $2, %esi
        movl    100(%esp), %edx
        subl    %ecx, %edx
        cmpl    %edx, %ecx
        jg      L58
L107:
        movl    %ecx, %edx
        fld     %st(0)
        pushl   %edx
        fimull  (%esp)
        addl    $4, %esp
        fdiv    %st(2), %st
        fsincos
        fld     %st(0)
        testl   $1, %esi
        jne     L111
L120:
        fstp    %st(0)
        fxch    %st(1)
L61:
        testl   $2, %esi
        je      L65
        fchs
        fxch    %st(1)
L65:
        andl    $4, %esi
        je      L66
        fchs
L66:
        fxch    %st(1)
        fstpl   (%ebp)
        fstpl   8(%ebp)
        addl    $1, 44(%esp)
        addl    $4, 56(%esp)
        addl    $16, %ebp
        movl    44(%esp), %ecx
        cmpl    %ecx, 48(%esp)
        jne     L49
        fstp    %st(0)
        fstp    %st(0)
L47:
        movl    32(%esp), %esi
        testl   %esi, %esi
        jle     L68
        movl    100(%esp), %ebp
        sall    $2, %ebp
        pushl   %ebp
        fildl   (%esp)
        addl    $4, %esp
        movl    16(%edi), %eax
        movl    %eax, 36(%esp)
        movl    40(%esp), %esi
        movl    $0, 60(%esp)
        fldl    LC5-"L00000000002$pb"(%ebx)
        movl    $0, 28(%esp)
L70:
        movl    28(%esp), %edx
        sall    $2, %edx
        leal    (%edx,%ebp), %eax
        cmpl    $-1, %edx
        cmovle  %eax, %edx
        movl    %ebp, %eax
        subl    %edx, %eax
        cmpl    %eax, %edx
        jg      L109
        movl    %edx, %eax
        xorl    %ecx, %ecx
        movl    %eax, %edx
        subl    100(%esp), %edx
        testl   %edx, %edx
        jle     L108
L76:
        orl     $2, %ecx
        movl    100(%esp), %eax
        subl    %edx, %eax
        cmpl    %eax, %edx
        jg      L79
L110:
        movl    %edx, %eax
        fld     %st(0)
        pushl   %eax
        fimull  (%esp)
        addl    $4, %esp
        fdiv    %st(2), %st
        fsincos
        fld     %st(0)
        testb   $1, %cl
        jne     L113
L119:
        fstp    %st(0)
        fxch    %st(1)
L82:
        testb   $2, %cl
        je      L86
        fchs
        fxch    %st(1)
L86:
        andb    $4, %cl
        je      L87
        fchs
L87:
        fxch    %st(1)
        fstpl   (%esi)
        fstpl   8(%esi)
        addl    $1, 60(%esp)
        movl    36(%esp), %edx
        addl    %edx, 28(%esp)
        addl    $16, %esi
        movl    60(%esp), %ecx
        cmpl    %ecx, 32(%esp)
        jne     L70
        fstp    %st(0)
        fstp    %st(0)
L68:
        leal    _cexpl_sqrtn_table-"L00000000002$pb"(%ebx), %eax
        movl    %eax, 4(%edi)
        leal    _rotate_sqrtn_table-"L00000000002$pb"(%ebx), %eax
        movl    %eax, 8(%edi)
        movl    (%edi), %ecx
        testl   %ecx, %ecx
        jne     L89
L117:
        leal    _cexp_generic-"L00000000002$pb"(%ebx), %eax
        movl    %eax, (%edi)
        jmp     L89
L42:
        leal    _cexpl_sincos-"L00000000002$pb"(%ebx), %eax
        movl    %eax, 4(%edi)
        jmp     L115
L100:
        leal    _cexp_zero-"L00000000002$pb"(%ebx), %eax
        movl    %eax, (%edi)
        leal    _cexpl_zero-"L00000000002$pb"(%ebx), %eax
        movl    %eax, 4(%edi)
        jmp     L115
L109:
        movl    $4, %ecx
        movl    %eax, %edx
        subl    100(%esp), %edx
        testl   %edx, %edx
        jg      L76
L108:
        movl    %eax, %edx
        movl    100(%esp), %eax
        subl    %edx, %eax
        cmpl    %eax, %edx
        jle     L110
L79:
        orl     $1, %ecx
        fld     %st(0)
        pushl   %eax
        fimull  (%esp)
        addl    $4, %esp
        fdiv    %st(2), %st
        fsincos
        fld     %st(0)
        testb   $1, %cl
        je      L119
L113:
        fstp    %st(1)
        jmp     L82
L106:
        movl    $4, %esi
        movl    %eax, %ecx
        subl    100(%esp), %ecx
        testl   %ecx, %ecx
        jg      L55
L104:
        movl    %eax, %ecx
        movl    100(%esp), %edx
        subl    %ecx, %edx
        cmpl    %edx, %ecx
        jle     L107
L58:
        orl     $1, %esi
        fld     %st(0)
        pushl   %edx
        fimull  (%esp)
        addl    $4, %esp
        fdiv    %st(2), %st
        fsincos
        fld     %st(0)
        testl   $1, %esi
        je      L120
L111:
        fstp    %st(1)
        jmp     L61
L105:
        addl    52(%esp), %edx
        jmp     L50
L103:
        xorl    %ecx, %ecx
        movl    $1, 48(%esp)
        jmp     L46
        .section
__IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5
L_fftwf_ifree$stub:
        .indirect_symbol _fftwf_ifree
        hlt ; hlt ; hlt ; hlt ; hlt
L_fftwf_ifree0$stub:
        .indirect_symbol _fftwf_ifree0
        hlt ; hlt ; hlt ; hlt ; hlt
L_fftwf_malloc_plain$stub:
        .indirect_symbol _fftwf_malloc_plain
        hlt ; hlt ; hlt ; hlt ; hlt
        .subsections_via_symbols
        .section __TEXT,__textcoal_nt,coalesced,pure_instructions
.weak_definition        ___i686.get_pc_thunk.bx
.private_extern ___i686.get_pc_thunk.bx
___i686.get_pc_thunk.bx:
        movl    (%esp), %ebx
        ret

----END----


-- 
           Summary: gcc 4.0.1 creates unassembleable code for FFTW library
           Product: gcc
           Version: 4.0.1
            Status: UNCONFIRMED
          Severity: major
          Priority: P3
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: stp at create dot ucsb dot edu
 GCC build triplet: powerpc-apple-darwin8
  GCC host triplet: i686-apple-darwin8 (Intel Mac)
GCC target triplet: i686-apple-darwin8


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27264



More information about the Gcc-bugs mailing list