diff options
author | Ulrich Drepper <drepper@redhat.com> | 2000-03-31 04:10:36 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2000-03-31 04:10:36 +0000 |
commit | fdf6455589d64544330b708655073b6886d53dfc (patch) | |
tree | 5fbab9cb5fad1d45f4982697f59d09573d599dfd | |
parent | 99a7e0656c055080cac8d56a8af9df39609e4782 (diff) | |
download | glibc-fdf6455589d64544330b708655073b6886d53dfc.zip glibc-fdf6455589d64544330b708655073b6886d53dfc.tar.gz glibc-fdf6455589d64544330b708655073b6886d53dfc.tar.bz2 |
Update.
2000-03-30 Ulrich Drepper <drepper@redhat.com>
* iconv/skeleton.c: Avoid compiling unaligned versions in some
with size of dynamic sectionmore cases.
* iconv/loop.c: Likewise.
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | iconv/loop.c | 4 | ||||
-rw-r--r-- | iconv/skeleton.c | 18 |
3 files changed, 16 insertions, 12 deletions
@@ -1,3 +1,9 @@ +2000-03-30 Ulrich Drepper <drepper@redhat.com> + + * iconv/skeleton.c: Avoid compiling unaligned versions in some + with size of dynamic sectionmore cases. + * iconv/loop.c: Likewise. + 2000-03-29 Bruno Haible <haible@clisp.cons.org> * iconv/loop.c (put16): Remove __const. Fix access index. diff --git a/iconv/loop.c b/iconv/loop.c index 7ddeb3d..bf0ab48 100644 --- a/iconv/loop.c +++ b/iconv/loop.c @@ -268,7 +268,9 @@ FCTNAME (LOOPFCT) (const unsigned char **inptrp, const unsigned char *inend, /* Include the file a second time to define the function to define the function to handle unaligned access. */ -#if !defined _STRING_ARCH_unaligned && !defined DEFINE_UNALIGNED +#if !defined DEFINE_UNALIGNED && !defined _STRING_ARCH_unaligned \ + && MIN_NEEDED_FROM != 1 && MAX_NEEDED_FROM % MIN_NEEDED_FROM == 0 \ + && MIN_NEEDED_TO != 1 && MAX_NEEDED_TO % MIN_NEEDED_TO == 0 # define DEFINE_UNALIGNED # include "loop.c" # undef DEFINE_UNALIGNED diff --git a/iconv/skeleton.c b/iconv/skeleton.c index dfd067e..52c67a2 100644 --- a/iconv/skeleton.c +++ b/iconv/skeleton.c @@ -297,7 +297,9 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gconv_step_data *data, unsigned char *outbuf = data->__outbuf; unsigned char *outend = data->__outbufend; unsigned char *outstart; -#ifdef _STRING_ARCH_unaligned +#if defined _STRING_ARCH_unaligned \ + || MIN_NEEDED_FROM == 1 || MAX_NEEDED_FROM % MIN_NEEDED_FROM != 0 \ + || MIN_NEEDED_TO == 1 || MAX_NEEDED_TO % MIN_NEEDED_TO != 0 # define unaligned 0 #else /* The following assumes that encodings, which have a variable length @@ -308,19 +310,13 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gconv_step_data *data, int unaligned; unaligned = ((FROM_DIRECTION - && ((MIN_NEEDED_FROM > 1 - && MAX_NEEDED_FROM % MIN_NEEDED_FROM == 0 - && (uintptr_t) inptr % MIN_NEEDED_FROM != 0) - || (MIN_NEEDED_TO > 1 - && MAX_NEEDED_TO % MIN_NEEDED_TO == 0 + && ((uintptr_t) inptr % MIN_NEEDED_FROM != 0 + || (data->__is_last && (uintptr_t) outbuf % MIN_NEEDED_TO != 0))) || (!FROM_DIRECTION - && ((MIN_NEEDED_FROM > 1 - && MAX_NEEDED_FROM % MIN_NEEDED_FROM == 0 + && ((data->__is_last && (uintptr_t) outbuf % MIN_NEEDED_FROM != 0) - || (MIN_NEEDED_TO > 1 - && MAX_NEEDED_TO % MIN_NEEDED_TO == 0 - && (uintptr_t) inptr % MIN_NEEDED_TO != 0)))); + || (uintptr_t) inptr % MIN_NEEDED_TO != 0))); # define GEN_unaligned(name) GEN_unaligned2 (name) # define GEN_unaligned2(name) name##_unaligned #endif |