This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH v2 9/10] Tilera (and Linux asm-generic) support for glibc
- From: Chris Metcalf <cmetcalf at tilera dot com>
- To: Andrew Pinski <pinskia at gmail dot com>
- Cc: Roland McGrath <roland at hack dot frob dot com>, <libc-alpha at sourceware dot org>, Arnd Bergmann <arnd at arndb dot de>, Linas Vepstas <linas at codeaurora dot org>, Guan Xuetao <gxt at mprc dot pku dot edu dot cn>, Jonas Bonn <jonas at southpole dot se>, Chen Liqin <liqin dot chen at gmail dot com>, GCC Development <gcc at gcc dot gnu dot org>, "Joseph S. Myers" <joseph at codesourcery dot com>
- Date: Fri, 11 Nov 2011 15:41:01 -0500
- Subject: Re: [PATCH v2 9/10] Tilera (and Linux asm-generic) support for glibc
- References: <201111100054.pAA0sf6u025585@farm-0002.internal.tilera.com> <201111100056.pAA0uKcv025809@farm-0002.internal.tilera.com> <20111111180905.A02A22C0F8@topped-with-meat.com> <4EBD81EA.3000605@tilera.com> <CA+=Sn1nGhhYy7wkEkjcXD-FrV-5eHJGfhZv9H3TJ+wQVQSnt3A@mail.gmail.com>
On 11/11/2011 3:17 PM, Andrew Pinski wrote:
On Fri, Nov 11, 2011 at 12:13 PM, Chris Metcalf<cmetcalf@tilera.com> wrote:
I'm cc'ing the gcc mailing list with this reply, so if someone there
can provide an authoritative statement, that would be great. It looks
like right now the i386/x86_64, ia64, and s390 architecture don't use
this header anyway, so it's less important for them. But powerpc and
sparc do use the header (in the core glibc), and most of the
architectures in the "ports" part of glibc do as well.
Roland, Joseph, if we don't hear something definitive from the gcc
folks, I'm inclined to revert this piece back to what I had in the v1
patch, where I provide a tile-specific byteswap.h using
__builtin_bswapNN(), so our gcc 4.4 will generate good code.
Right now it does not emit good code for MIPS 32/64 R2. Though I have
patches to emit better code for that target.
In retrospect, I guess the right question is not whether it produces
bad code per se, but whether it produces worse code than for the
standard generic byteswap.h:
#define __bswap_16(x) \
((((x)>> 8)& 0xff) | (((x)& 0xff)<< 8))
#define __bswap_32(x) \
((((x)& 0xff000000)>> 24) | (((x)& 0x00ff0000)>> 8) | \
(((x)& 0x0000ff00)<< 8) | (((x)& 0x000000ff)<< 24))
#define __bswap_64(x) \
((((x)& 0xff00000000000000ull)>> 56) \
| (((x)& 0x00ff000000000000ull)>> 40) \
| (((x)& 0x0000ff0000000000ull)>> 24) \
| (((x)& 0x000000ff00000000ull)>> 8) \
| (((x)& 0x00000000ff000000ull)<< 8) \
| (((x)& 0x0000000000ff0000ull)<< 24) \
| (((x)& 0x000000000000ff00ull)<< 40) \
| (((x)& 0x00000000000000ffull)<< 56))
(The 16-bit swap would be done via __builtin_bswap32(x)>> 16.)
If it's no worse for any platform, and better for some, that's
probably sufficient reason to make the change in glibc to use it.
--
Chris Metcalf, Tilera Corp.
http://www.tilera.com