This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH 1/* v3] Generic string function optimization: Add skeleton
- From: Joseph Myers <joseph at codesourcery dot com>
- To: Ondřej Bílka <neleai at seznam dot cz>
- Cc: Richard Henderson <rth at twiddle dot net>, <libc-alpha at sourceware dot org>
- Date: Fri, 29 May 2015 10:42:17 +0000
- Subject: Re: [PATCH 1/* v3] Generic string function optimization: Add skeleton
- Authentication-results: sourceware.org; auth=none
- References: <20150527060121 dot GA19105 at domone> <20150528142956 dot GA25176 at domone> <556754ED dot 70804 at twiddle dot net> <20150528180439 dot GB4872 at domone> <alpine dot DEB dot 2 dot 10 dot 1505282053130 dot 10508 at digraph dot polyomino dot org dot uk> <20150528221320 dot GA7297 at domone>
On Fri, 29 May 2015, OndÅej BÃlka wrote:
> On Thu, May 28, 2015 at 08:54:31PM +0000, Joseph Myers wrote:
> > On Thu, 28 May 2015, OndÅej BÃlka wrote:
> >
> > > Both comments are correct. We should do it generically and surround
> > > these functions with ifdef to supply arch-specific versions.
> >
> > #if, not #ifdef, please, for all architecture choices in these functions.
> > The sysdeps/generic version of the header architectures can use to change
> > the default choices should have detailed comments on the default
> > definitions of all the relevant macros to explain their semantics.
> >
> For what purpose? Its pointless except that you would need to have
> additional header say precommon.h, then undef and redefine macro when
> you want change.
The general principle is that macro uses should be typo-proof. That means
avoiding #ifdef, #ifndef and #undef where possible.
The principle of documenting macro semantics applies even if there's a
good reason typo-proof conventions are problematic in a particular case.
There should *never* be any sort of architecture hook without clear
documentation of the semantics of the hook (written from the perspective
of an architecture maintainer wanting to know how to set the hook for
their architecture, not from the perspective of the person writing the
code using the hook). I always advise writing documentation early in the
process of developing a patch - the documentation is as important as the
rest of the code.
> And it doesn't help to catch any errors. If you misspell define then you
> will get error with duplicate definition.
If the code does
#ifdef MACRO
or
#ifndef MACRO
then if an architecture does
#define MCARO
(with or without #undef) that will silently be ignored.
If, instead, the code does
#if MACRO
and there's a sysdeps/generic header that defines MACRO one way, if an
architecture overrides that header with one that misspells the name, a
-Wundef warning will be immediately visible (though we still need to fix
the -Wundef warnings in the testsuite and remove the -Wno-error=undef).
--
Joseph S. Myers
joseph@codesourcery.com