From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 112785 invoked by alias); 12 Oct 2015 18:06:53 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Received: (qmail 112174 invoked by uid 89); 12 Oct 2015 18:06:52 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=AWL,BAYES_00,SPF_PASS autolearn=ham version=3.3.2 X-HELO: eu-smtp-delivery-143.mimecast.com From: "Wilco Dijkstra" To: "'Joseph Myers'" Cc: "'GNU C Library'" References: <000401d102aa$8db859e0$a9290da0$@com> <000801d102b1$3e4f33e0$baed9ba0$@com> <000901d104e0$069f65b0$13de3110$@com> <000a01d104ed$0b7a9c00$226fd400$@com> In-Reply-To: Subject: RE: [PATCH 2/2] Remove ancient GCC string inlines Date: Mon, 12 Oct 2015 18:06:00 -0000 Message-ID: <000b01d10518$befeab10$3cfc0130$@com> MIME-Version: 1.0 X-MC-Unique: mY8jBTirTpuM2tdJ-XJy_g-1 Content-Type: multipart/mixed; boundary="----=_NextPart_000_000C_01D10521.20C31310" X-SW-Source: 2015-10/txt/msg00325.txt.bz2 This is a multi-part message in MIME format. ------=_NextPart_000_000C_01D10521.20C31310 Content-Type: text/plain; charset=WINDOWS-1252 Content-Transfer-Encoding: quoted-printable Content-length: 2035 > Joseph Myers wrote: > On Mon, 12 Oct 2015, Wilco Dijkstra wrote: >=20 > > ../sysdeps/unix/sysv/linux/i386/sysdep.h:409:12: error: '__NR_set_threa= d_area' undeclared > (first use > > in this function) > So, you need to find out why your compiler installation isn't finding an > appropriate asm/unistd.h, and fix that problem. It seems that the multilibs weren't properly installed somehow. With these = it suddenly started to work! Strange that configure doesn't check you've got the right = headers and report a meaningful error... Sysdeps/string-inlines.c is indeed built on x86, so I have updated my patch= to avoid namespace issues on x86. The fails are (same set as before my patch): build/glibc_x86/tests.sum:FAIL: c++-types-check build/glibc_x86/tests.sum:FAIL: grp/testgrp build/glibc_x86/tests.sum:FAIL: localedata/bug-iconv-trans build/glibc_x86/tests.sum:FAIL: localedata/tst-wctype build/glibc_x86/tests.sum:FAIL: localedata/tst_mblen build/glibc_x86/tests.sum:FAIL: localedata/tst_mbrlen build/glibc_x86/tests.sum:FAIL: localedata/tst_mbrtowc build/glibc_x86/tests.sum:FAIL: localedata/tst_mbsrtowcs build/glibc_x86/tests.sum:FAIL: localedata/tst_mbstowcs build/glibc_x86/tests.sum:FAIL: localedata/tst_mbtowc build/glibc_x86/tests.sum:FAIL: localedata/tst_swscanf build/glibc_x86/tests.sum:FAIL: localedata/tst_wcrtomb build/glibc_x86/tests.sum:FAIL: localedata/tst_wcsrtombs build/glibc_x86/tests.sum:FAIL: localedata/tst_wcstombs build/glibc_x86/tests.sum:FAIL: localedata/tst_wctob build/glibc_x86/tests.sum:FAIL: localedata/tst_wctomb build/glibc_x86/tests.sum:FAIL: posix/globtest ChangeLog: 2015-10-12 Wilco Dijkstra wdijkstr@arm.com * string/string-inlines.c (__STRING2_COPY_TYPE): Add, moved from string2.h. (__mempcpy_small): Likewise. (__strcpy_small): Likewise. (__stpcpy_small): Likewise. * string/bits/string2.h (__STRING2_COPY_TYPE): Remove. (__mempcpy_small): Remove. (__strcpy_small): Remove. (__stpcpy_small): Remove. * sysdeps/i386/string-inlines.c: Include string/string-inlines.c. ------=_NextPart_000_000C_01D10521.20C31310 Content-Type: text/plain; name=0002-Move-inlines-to-string-inline.txt Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="0002-Move-inlines-to-string-inline.txt" Content-length: 21573 --- string/bits/string2.h | 372 --------------------------------------= ---- string/string-inlines.c | 346 +++++++++++++++++++++++++++++++++++++++ sysdeps/i386/string-inlines.c | 14 +- 3 files changed, 347 insertions(+), 385 deletions(-) diff --git a/string/bits/string2.h b/string/bits/string2.h index bd8c404..f8ea1f9 100644 --- a/string/bits/string2.h +++ b/string/bits/string2.h @@ -51,20 +51,6 @@ # include # include =20 -#else -/* These are a few types we need for the optimizations if we cannot - use unaligned memory accesses. */ -# define __STRING2_COPY_TYPE(N) \ - typedef struct { unsigned char __arr[N]; } \ - __attribute__ ((__packed__)) __STRING2_COPY_ARR##N -__STRING2_COPY_TYPE (2); -__STRING2_COPY_TYPE (3); -__STRING2_COPY_TYPE (4); -__STRING2_COPY_TYPE (5); -__STRING2_COPY_TYPE (6); -__STRING2_COPY_TYPE (7); -__STRING2_COPY_TYPE (8); -# undef __STRING2_COPY_TYPE #endif =20 /* Dereferencing a pointer arg to run sizeof on it fails for the void @@ -97,135 +83,10 @@ __STRING2_COPY_TYPE (8); we have to use the name `__mempcpy'. */ # define mempcpy(dest, src, n) __mempcpy (dest, src, n) # endif - -# if defined _FORCE_INLINES -# if _STRING_ARCH_unaligned -__STRING_INLINE void *__mempcpy_small (void *, char, char, char, char, - __uint16_t, __uint16_t, __uint32_t, - __uint32_t, size_t); -__STRING_INLINE void * -__mempcpy_small (void *__dest1, - char __src0_1, char __src2_1, char __src4_1, char __src6_1, - __uint16_t __src0_2, __uint16_t __src4_2, - __uint32_t __src0_4, __uint32_t __src4_4, - size_t __srclen) -{ - union { - __uint32_t __ui; - __uint16_t __usi; - unsigned char __uc; - unsigned char __c; - } *__u =3D __dest1; - switch ((unsigned int) __srclen) - { - case 1: - __u->__c =3D __src0_1; - __u =3D __extension__ ((void *) __u + 1); - break; - case 2: - __u->__usi =3D __src0_2; - __u =3D __extension__ ((void *) __u + 2); - break; - case 3: - __u->__usi =3D __src0_2; - __u =3D __extension__ ((void *) __u + 2); - __u->__c =3D __src2_1; - __u =3D __extension__ ((void *) __u + 1); - break; - case 4: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 4); - break; - case 5: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 4); - __u->__c =3D __src4_1; - __u =3D __extension__ ((void *) __u + 1); - break; - case 6: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 4); - __u->__usi =3D __src4_2; - __u =3D __extension__ ((void *) __u + 2); - break; - case 7: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 4); - __u->__usi =3D __src4_2; - __u =3D __extension__ ((void *) __u + 2); - __u->__c =3D __src6_1; - __u =3D __extension__ ((void *) __u + 1); - break; - case 8: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 4); - __u->__ui =3D __src4_4; - __u =3D __extension__ ((void *) __u + 4); - break; - } - return (void *) __u; -} -# else -__STRING_INLINE void *__mempcpy_small (void *, char, __STRING2_COPY_ARR2, - __STRING2_COPY_ARR3, - __STRING2_COPY_ARR4, - __STRING2_COPY_ARR5, - __STRING2_COPY_ARR6, - __STRING2_COPY_ARR7, - __STRING2_COPY_ARR8, size_t); -__STRING_INLINE void * -__mempcpy_small (void *__dest, char __src1, - __STRING2_COPY_ARR2 __src2, __STRING2_COPY_ARR3 __src3, - __STRING2_COPY_ARR4 __src4, __STRING2_COPY_ARR5 __src5, - __STRING2_COPY_ARR6 __src6, __STRING2_COPY_ARR7 __src7, - __STRING2_COPY_ARR8 __src8, size_t __srclen) -{ - union { - char __c; - __STRING2_COPY_ARR2 __sca2; - __STRING2_COPY_ARR3 __sca3; - __STRING2_COPY_ARR4 __sca4; - __STRING2_COPY_ARR5 __sca5; - __STRING2_COPY_ARR6 __sca6; - __STRING2_COPY_ARR7 __sca7; - __STRING2_COPY_ARR8 __sca8; - } *__u =3D __dest; - switch ((unsigned int) __srclen) - { - case 1: - __u->__c =3D __src1; - break; - case 2: - __extension__ __u->__sca2 =3D __src2; - break; - case 3: - __extension__ __u->__sca3 =3D __src3; - break; - case 4: - __extension__ __u->__sca4 =3D __src4; - break; - case 5: - __extension__ __u->__sca5 =3D __src5; - break; - case 6: - __extension__ __u->__sca6 =3D __src6; - break; - case 7: - __extension__ __u->__sca7 =3D __src7; - break; - case 8: - __extension__ __u->__sca8 =3D __src8; - break; - } - return __extension__ ((void *) __u + __srclen); -} -# endif -# endif # endif #endif =20 =20 -/* Return pointer to C in S. */ #ifndef _HAVE_STRING_ARCH_strchr extern void *__rawmemchr (const void *__s, int __c); # if __GNUC_PREREQ (3, 2) @@ -243,121 +104,6 @@ extern void *__rawmemchr (const void *__s, int __c); #endif =20 =20 -/* Copy SRC to DEST. */ -#if defined _FORCE_INLINES -# if _STRING_ARCH_unaligned -__STRING_INLINE char *__strcpy_small (char *, __uint16_t, __uint16_t, - __uint32_t, __uint32_t, size_t); -__STRING_INLINE char * -__strcpy_small (char *__dest, - __uint16_t __src0_2, __uint16_t __src4_2, - __uint32_t __src0_4, __uint32_t __src4_4, - size_t __srclen) -{ - union { - __uint32_t __ui; - __uint16_t __usi; - unsigned char __uc; - } *__u =3D (void *) __dest; - switch ((unsigned int) __srclen) - { - case 1: - __u->__uc =3D '\0'; - break; - case 2: - __u->__usi =3D __src0_2; - break; - case 3: - __u->__usi =3D __src0_2; - __u =3D __extension__ ((void *) __u + 2); - __u->__uc =3D '\0'; - break; - case 4: - __u->__ui =3D __src0_4; - break; - case 5: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 4); - __u->__uc =3D '\0'; - break; - case 6: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 4); - __u->__usi =3D __src4_2; - break; - case 7: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 4); - __u->__usi =3D __src4_2; - __u =3D __extension__ ((void *) __u + 2); - __u->__uc =3D '\0'; - break; - case 8: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 4); - __u->__ui =3D __src4_4; - break; - } - return __dest; -} -# else -__STRING_INLINE char *__strcpy_small (char *, __STRING2_COPY_ARR2, - __STRING2_COPY_ARR3, - __STRING2_COPY_ARR4, - __STRING2_COPY_ARR5, - __STRING2_COPY_ARR6, - __STRING2_COPY_ARR7, - __STRING2_COPY_ARR8, size_t); -__STRING_INLINE char * -__strcpy_small (char *__dest, - __STRING2_COPY_ARR2 __src2, __STRING2_COPY_ARR3 __src3, - __STRING2_COPY_ARR4 __src4, __STRING2_COPY_ARR5 __src5, - __STRING2_COPY_ARR6 __src6, __STRING2_COPY_ARR7 __src7, - __STRING2_COPY_ARR8 __src8, size_t __srclen) -{ - union { - char __c; - __STRING2_COPY_ARR2 __sca2; - __STRING2_COPY_ARR3 __sca3; - __STRING2_COPY_ARR4 __sca4; - __STRING2_COPY_ARR5 __sca5; - __STRING2_COPY_ARR6 __sca6; - __STRING2_COPY_ARR7 __sca7; - __STRING2_COPY_ARR8 __sca8; - } *__u =3D (void *) __dest; - switch ((unsigned int) __srclen) - { - case 1: - __u->__c =3D '\0'; - break; - case 2: - __extension__ __u->__sca2 =3D __src2; - break; - case 3: - __extension__ __u->__sca3 =3D __src3; - break; - case 4: - __extension__ __u->__sca4 =3D __src4; - break; - case 5: - __extension__ __u->__sca5 =3D __src5; - break; - case 6: - __extension__ __u->__sca6 =3D __src6; - break; - case 7: - __extension__ __u->__sca7 =3D __src7; - break; - case 8: - __extension__ __u->__sca8 =3D __src8; - break; - } - return __dest; -} -# endif -#endif - - /* Copy SRC to DEST, returning pointer to final NUL byte. */ #ifdef __USE_GNU # if !defined _HAVE_STRING_ARCH_stpcpy || defined _FORCE_INLINES @@ -369,124 +115,6 @@ __strcpy_small (char *__dest, we have to use the name `__stpcpy'. */ # define stpcpy(dest, src) __stpcpy (dest, src) # endif - -# if defined _FORCE_INLINES -# if _STRING_ARCH_unaligned -__STRING_INLINE char *__stpcpy_small (char *, __uint16_t, __uint16_t, - __uint32_t, __uint32_t, size_t); -__STRING_INLINE char * -__stpcpy_small (char *__dest, - __uint16_t __src0_2, __uint16_t __src4_2, - __uint32_t __src0_4, __uint32_t __src4_4, - size_t __srclen) -{ - union { - unsigned int __ui; - unsigned short int __usi; - unsigned char __uc; - char __c; - } *__u =3D (void *) __dest; - switch ((unsigned int) __srclen) - { - case 1: - __u->__uc =3D '\0'; - break; - case 2: - __u->__usi =3D __src0_2; - __u =3D __extension__ ((void *) __u + 1); - break; - case 3: - __u->__usi =3D __src0_2; - __u =3D __extension__ ((void *) __u + 2); - __u->__uc =3D '\0'; - break; - case 4: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 3); - break; - case 5: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 4); - __u->__uc =3D '\0'; - break; - case 6: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 4); - __u->__usi =3D __src4_2; - __u =3D __extension__ ((void *) __u + 1); - break; - case 7: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 4); - __u->__usi =3D __src4_2; - __u =3D __extension__ ((void *) __u + 2); - __u->__uc =3D '\0'; - break; - case 8: - __u->__ui =3D __src0_4; - __u =3D __extension__ ((void *) __u + 4); - __u->__ui =3D __src4_4; - __u =3D __extension__ ((void *) __u + 3); - break; - } - return &__u->__c; -} -# else -__STRING_INLINE char *__stpcpy_small (char *, __STRING2_COPY_ARR2, - __STRING2_COPY_ARR3, - __STRING2_COPY_ARR4, - __STRING2_COPY_ARR5, - __STRING2_COPY_ARR6, - __STRING2_COPY_ARR7, - __STRING2_COPY_ARR8, size_t); -__STRING_INLINE char * -__stpcpy_small (char *__dest, - __STRING2_COPY_ARR2 __src2, __STRING2_COPY_ARR3 __src3, - __STRING2_COPY_ARR4 __src4, __STRING2_COPY_ARR5 __src5, - __STRING2_COPY_ARR6 __src6, __STRING2_COPY_ARR7 __src7, - __STRING2_COPY_ARR8 __src8, size_t __srclen) -{ - union { - char __c; - __STRING2_COPY_ARR2 __sca2; - __STRING2_COPY_ARR3 __sca3; - __STRING2_COPY_ARR4 __sca4; - __STRING2_COPY_ARR5 __sca5; - __STRING2_COPY_ARR6 __sca6; - __STRING2_COPY_ARR7 __sca7; - __STRING2_COPY_ARR8 __sca8; - } *__u =3D (void *) __dest; - switch ((unsigned int) __srclen) - { - case 1: - __u->__c =3D '\0'; - break; - case 2: - __extension__ __u->__sca2 =3D __src2; - break; - case 3: - __extension__ __u->__sca3 =3D __src3; - break; - case 4: - __extension__ __u->__sca4 =3D __src4; - break; - case 5: - __extension__ __u->__sca5 =3D __src5; - break; - case 6: - __extension__ __u->__sca6 =3D __src6; - break; - case 7: - __extension__ __u->__sca7 =3D __src7; - break; - case 8: - __extension__ __u->__sca8 =3D __src8; - break; - } - return __dest + __srclen - 1; -} -# endif -# endif # endif #endif =20 diff --git a/string/string-inlines.c b/string/string-inlines.c index 0445be7..432d58d 100644 --- a/string/string-inlines.c +++ b/string/string-inlines.c @@ -32,3 +32,349 @@ #undef __NO_INLINE__ #include #include + +/* These are a few types we need for the optimizations if we cannot + use unaligned memory accesses. */ +# define __STRING2_COPY_TYPE(N) \ + typedef struct { unsigned char __arr[N]; } \ + __attribute__ ((__packed__)) __STRING2_COPY_ARR##N +__STRING2_COPY_TYPE (2); +__STRING2_COPY_TYPE (3); +__STRING2_COPY_TYPE (4); +__STRING2_COPY_TYPE (5); +__STRING2_COPY_TYPE (6); +__STRING2_COPY_TYPE (7); +__STRING2_COPY_TYPE (8); +# undef __STRING2_COPY_TYPE + + +#if _STRING_ARCH_unaligned +__STRING_INLINE void *__mempcpy_small (void *, char, char, char, char, + __uint16_t, __uint16_t, __uint32_t, + __uint32_t, size_t); +__STRING_INLINE void * +__mempcpy_small (void *__dest1, + char __src0_1, char __src2_1, char __src4_1, char __src6_1, + __uint16_t __src0_2, __uint16_t __src4_2, + __uint32_t __src0_4, __uint32_t __src4_4, + size_t __srclen) +{ + union { + __uint32_t __ui; + __uint16_t __usi; + unsigned char __uc; + unsigned char __c; + } *__u =3D __dest1; + switch ((unsigned int) __srclen) + { + case 1: + __u->__c =3D __src0_1; + __u =3D __extension__ ((void *) __u + 1); + break; + case 2: + __u->__usi =3D __src0_2; + __u =3D __extension__ ((void *) __u + 2); + break; + case 3: + __u->__usi =3D __src0_2; + __u =3D __extension__ ((void *) __u + 2); + __u->__c =3D __src2_1; + __u =3D __extension__ ((void *) __u + 1); + break; + case 4: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 4); + break; + case 5: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 4); + __u->__c =3D __src4_1; + __u =3D __extension__ ((void *) __u + 1); + break; + case 6: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 4); + __u->__usi =3D __src4_2; + __u =3D __extension__ ((void *) __u + 2); + break; + case 7: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 4); + __u->__usi =3D __src4_2; + __u =3D __extension__ ((void *) __u + 2); + __u->__c =3D __src6_1; + __u =3D __extension__ ((void *) __u + 1); + break; + case 8: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 4); + __u->__ui =3D __src4_4; + __u =3D __extension__ ((void *) __u + 4); + break; + } + return (void *) __u; +} + +#else + +__STRING_INLINE void * +__mempcpy_small (void *__dest, char __src1, + __STRING2_COPY_ARR2 __src2, __STRING2_COPY_ARR3 __src3, + __STRING2_COPY_ARR4 __src4, __STRING2_COPY_ARR5 __src5, + __STRING2_COPY_ARR6 __src6, __STRING2_COPY_ARR7 __src7, + __STRING2_COPY_ARR8 __src8, size_t __srclen) +{ + union { + char __c; + __STRING2_COPY_ARR2 __sca2; + __STRING2_COPY_ARR3 __sca3; + __STRING2_COPY_ARR4 __sca4; + __STRING2_COPY_ARR5 __sca5; + __STRING2_COPY_ARR6 __sca6; + __STRING2_COPY_ARR7 __sca7; + __STRING2_COPY_ARR8 __sca8; + } *__u =3D __dest; + switch ((unsigned int) __srclen) + { + case 1: + __u->__c =3D __src1; + break; + case 2: + __extension__ __u->__sca2 =3D __src2; + break; + case 3: + __extension__ __u->__sca3 =3D __src3; + break; + case 4: + __extension__ __u->__sca4 =3D __src4; + break; + case 5: + __extension__ __u->__sca5 =3D __src5; + break; + case 6: + __extension__ __u->__sca6 =3D __src6; + break; + case 7: + __extension__ __u->__sca7 =3D __src7; + break; + case 8: + __extension__ __u->__sca8 =3D __src8; + break; + } + return __extension__ ((void *) __u + __srclen); +} +#endif + +# if _STRING_ARCH_unaligned +__STRING_INLINE char * +__strcpy_small (char *__dest, + __uint16_t __src0_2, __uint16_t __src4_2, + __uint32_t __src0_4, __uint32_t __src4_4, + size_t __srclen) +{ + union { + __uint32_t __ui; + __uint16_t __usi; + unsigned char __uc; + } *__u =3D (void *) __dest; + switch ((unsigned int) __srclen) + { + case 1: + __u->__uc =3D '\0'; + break; + case 2: + __u->__usi =3D __src0_2; + break; + case 3: + __u->__usi =3D __src0_2; + __u =3D __extension__ ((void *) __u + 2); + __u->__uc =3D '\0'; + break; + case 4: + __u->__ui =3D __src0_4; + break; + case 5: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 4); + __u->__uc =3D '\0'; + break; + case 6: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 4); + __u->__usi =3D __src4_2; + break; + case 7: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 4); + __u->__usi =3D __src4_2; + __u =3D __extension__ ((void *) __u + 2); + __u->__uc =3D '\0'; + break; + case 8: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 4); + __u->__ui =3D __src4_4; + break; + } + return __dest; +} + +#else + +__STRING_INLINE char * +__strcpy_small (char *__dest, + __STRING2_COPY_ARR2 __src2, __STRING2_COPY_ARR3 __src3, + __STRING2_COPY_ARR4 __src4, __STRING2_COPY_ARR5 __src5, + __STRING2_COPY_ARR6 __src6, __STRING2_COPY_ARR7 __src7, + __STRING2_COPY_ARR8 __src8, size_t __srclen) +{ + union { + char __c; + __STRING2_COPY_ARR2 __sca2; + __STRING2_COPY_ARR3 __sca3; + __STRING2_COPY_ARR4 __sca4; + __STRING2_COPY_ARR5 __sca5; + __STRING2_COPY_ARR6 __sca6; + __STRING2_COPY_ARR7 __sca7; + __STRING2_COPY_ARR8 __sca8; + } *__u =3D (void *) __dest; + switch ((unsigned int) __srclen) + { + case 1: + __u->__c =3D '\0'; + break; + case 2: + __extension__ __u->__sca2 =3D __src2; + break; + case 3: + __extension__ __u->__sca3 =3D __src3; + break; + case 4: + __extension__ __u->__sca4 =3D __src4; + break; + case 5: + __extension__ __u->__sca5 =3D __src5; + break; + case 6: + __extension__ __u->__sca6 =3D __src6; + break; + case 7: + __extension__ __u->__sca7 =3D __src7; + break; + case 8: + __extension__ __u->__sca8 =3D __src8; + break; + } + return __dest; +} +#endif + + +#if _STRING_ARCH_unaligned +__STRING_INLINE char * +__stpcpy_small (char *__dest, + __uint16_t __src0_2, __uint16_t __src4_2, + __uint32_t __src0_4, __uint32_t __src4_4, + size_t __srclen) +{ + union { + unsigned int __ui; + unsigned short int __usi; + unsigned char __uc; + char __c; + } *__u =3D (void *) __dest; + switch ((unsigned int) __srclen) + { + case 1: + __u->__uc =3D '\0'; + break; + case 2: + __u->__usi =3D __src0_2; + __u =3D __extension__ ((void *) __u + 1); + break; + case 3: + __u->__usi =3D __src0_2; + __u =3D __extension__ ((void *) __u + 2); + __u->__uc =3D '\0'; + break; + case 4: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 3); + break; + case 5: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 4); + __u->__uc =3D '\0'; + break; + case 6: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 4); + __u->__usi =3D __src4_2; + __u =3D __extension__ ((void *) __u + 1); + break; + case 7: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 4); + __u->__usi =3D __src4_2; + __u =3D __extension__ ((void *) __u + 2); + __u->__uc =3D '\0'; + break; + case 8: + __u->__ui =3D __src0_4; + __u =3D __extension__ ((void *) __u + 4); + __u->__ui =3D __src4_4; + __u =3D __extension__ ((void *) __u + 3); + break; + } + return &__u->__c; +} + +#else + +__STRING_INLINE char * +__stpcpy_small (char *__dest, + __STRING2_COPY_ARR2 __src2, __STRING2_COPY_ARR3 __src3, + __STRING2_COPY_ARR4 __src4, __STRING2_COPY_ARR5 __src5, + __STRING2_COPY_ARR6 __src6, __STRING2_COPY_ARR7 __src7, + __STRING2_COPY_ARR8 __src8, size_t __srclen) +{ + union { + char __c; + __STRING2_COPY_ARR2 __sca2; + __STRING2_COPY_ARR3 __sca3; + __STRING2_COPY_ARR4 __sca4; + __STRING2_COPY_ARR5 __sca5; + __STRING2_COPY_ARR6 __sca6; + __STRING2_COPY_ARR7 __sca7; + __STRING2_COPY_ARR8 __sca8; + } *__u =3D (void *) __dest; + switch ((unsigned int) __srclen) + { + case 1: + __u->__c =3D '\0'; + break; + case 2: + __extension__ __u->__sca2 =3D __src2; + break; + case 3: + __extension__ __u->__sca3 =3D __src3; + break; + case 4: + __extension__ __u->__sca4 =3D __src4; + break; + case 5: + __extension__ __u->__sca5 =3D __src5; + break; + case 6: + __extension__ __u->__sca6 =3D __src6; + break; + case 7: + __extension__ __u->__sca7 =3D __src7; + break; + case 8: + __extension__ __u->__sca8 =3D __src8; + break; + } + return __dest + __srclen - 1; +} +#endif diff --git a/sysdeps/i386/string-inlines.c b/sysdeps/i386/string-inlines.c index 862a431..de1f71c 100644 --- a/sysdeps/i386/string-inlines.c +++ b/sysdeps/i386/string-inlines.c @@ -19,23 +19,11 @@ functions. These functions are declared additionally here if inlining is not possible. */ =20 -#undef __USE_STRING_INLINES -#define __USE_STRING_INLINES -#define _FORCE_INLINES -#define __STRING_INLINE /* empty */ -#define __NO_INLINE__ - /* This is to avoid PLT entries for the x86 version. */ #define __memcpy_g __memcpy_g_internal #define __strchr_g __strchr_g_internal =20 -#include -#undef index -#undef rindex - -#undef __NO_INLINE__ -#include -#include +#include =20 void * (__memcpy_c) (void *d, const void *s, size_t n) --=20 1.9.1 ------=_NextPart_000_000C_01D10521.20C31310--