NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

port-vax/46677: gcc bug with builtin ffs on vax.



>Number:         46677
>Category:       port-vax
>Synopsis:       gcc bug with builtin ffs on vax.
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    port-vax-maintainer
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Jul 09 15:45:00 +0000 2012
>Originator:     Anders Magnusson
>Release:        6.0 beta2
>Organization:
>Environment:
NetBSD vs4090.tethuvudet.se 6.0_BETA2 NetBSD 6.0_BETA2 (GENERIC) #10: Mon Jul  
9 17:02:03 CEST 2012  
ragge@bakfull:/local/home/ragge/vaxsrc/60beta/sys/arch/vax/compile/obj/GENERIC 
vax

>Description:
The builtin ffs function fails in some situations for gcc both 4.1 or 4.5, and 
both native and cross-compiled.


>How-To-Repeat:
The code example below shows that the second ffs gets optimized away.

vs4090:/home/ragge >cat x.c

struct foo { long __bits[4]; };

int
firstsig(struct foo *ss)
{
        int sig;

        sig = ffs(ss->__bits[0]);
        if (sig != 0)
                return (sig);

        sig = ffs(ss->__bits[1]);
        if (sig != 0)
                return (sig + 32);

        return (0);
}

vs4090:/home/ragge >gcc -S -O2 x.c
vs4090:/home/ragge >cat x.s
#NO_APP
        .file   "x.c"
        .text
        .align 1
.globl firstsig
        .type   firstsig, @function
firstsig:
        .word 0x0
        subl2 $4,%sp
        ffs $0,$32,*4(%ap),%r0
        jneq .L2
        mnegl $1,%r0
.L2:
        incl %r0
        ret
        .size   firstsig, .-firstsig
        .ident  "GCC: (GNU) 4.1.3 20080704 prerelease (NetBSD nb3 20111107)"

>Fix:



Home | Main Index | Thread Index | Old Index