Re: Intermediate void* casts
Bill Studenmund <[email protected]>
| Newsgroups | gmane.os.netbsd.devel.general,gmane.os.netbsd.devel.kernel,gmane.os.netbsd.devel.userlevel |
|---|---|
| Message-ID | <Pine.NEB.4.33.0308101701360.15312-100000@vespasia.home-net.icnt.net> |
On Sun, 10 Aug 2003, Martin Husemann wrote: > Hi folks, > > sorry for the cross-post, please be sure to only reply to tech-misc to > avoid spreading this flame fest over various mailing lists. > > Since we will switch to gcc3.3.1 soon and already had first problems > with incorrect code due to alias bugs, I think we should have a kind > of a mini audit for these. Usually gcc 3.3.1 warns about this kind > of problems, but it shuts up if an intermediate void* cast is involved. > So I tried to find dubious casts to pointer types after casts to void*. Thanks! This will certainly help us. Though what exactly is an alias bug? [snip] > The latter point needs manual judgement from someone comfortable with that > area of the source tree. Possible solutions in that case inlcude: > - just leave the (void*) in place if alias problems are not possible > according to manual verification. We should not let the compiler stop > us doing clever things, if we know what we are doing. > - rewrite the expression completely to avoid the aliases > I did this with svr_machdep code for sparc*, where the address of a 64bit > value was casted to a 32bit pointer to access the two halves of the value. > Easy to replace with shift/mask expressions. Even clearer IMHO and might > give the compiler better optimization hints. > This was the case for bswap64 too (which is the problem that triggered > all this) I'm not so sure about that. Can/will the compiler notice that you're only using half of a 64-bit value? Otherwise, by making this change, you're pulling in more 64-bit using code. For sparc64 that's not bad, since the registers are 64-bit. But for sparc, 64-bit values won't fit in a register, and so manipulating them can be cumbersome. Yes, I realize that if we're talking about a 64-bit value, other bits of code are having to deal with the difficulties of 64-bit math & such. But if there's a place where we can make the code more efficient than the compiler will on its own, I think we should. Take care, Bill