This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Reduce code size of _REENT_INIT_PTR()


Use one memset() to initialize everything to zero.  Set non-zero fields
in a second step.  There is only a small runtime overhead, but the code
size is greatly reduced.  This change assumes the NULL pointer and '\0'
are encoded as zero bits.

newlib/ChangeLog
2013-04-26  Sebastian Huber <sebastian.huber@embedded-brains.de>

	* libc/include/sys/reent.h (_REENT_INIT_PTR): Reduce code size.
---
 newlib/libc/include/sys/reent.h |   48 +--------------------------------------
 1 files changed, 1 insertions(+), 47 deletions(-)

diff --git a/newlib/libc/include/sys/reent.h b/newlib/libc/include/sys/reent.h
index 7e321e0..ff0242e 100644
--- a/newlib/libc/include/sys/reent.h
+++ b/newlib/libc/include/sys/reent.h
@@ -705,27 +705,11 @@ struct _reent
   }
 
 #define _REENT_INIT_PTR(var) \
-  { (var)->_errno = 0; \
+  { memset((var), 0, sizeof(*(var))); \
     (var)->_stdin = &(var)->__sf[0]; \
     (var)->_stdout = &(var)->__sf[1]; \
     (var)->_stderr = &(var)->__sf[2]; \
-    (var)->_inc = 0; \
-    memset(&(var)->_emergency, 0, sizeof((var)->_emergency)); \
-    (var)->_current_category = 0; \
     (var)->_current_locale = "C"; \
-    (var)->__sdidinit = 0; \
-    (var)->__cleanup = _NULL; \
-    (var)->_result = _NULL; \
-    (var)->_result_k = 0; \
-    (var)->_p5s = _NULL; \
-    (var)->_freelist = _NULL; \
-    (var)->_cvtlen = 0; \
-    (var)->_cvtbuf = _NULL; \
-    (var)->_new._reent._unused_rand = 0; \
-    (var)->_new._reent._strtok_last = _NULL; \
-    (var)->_new._reent._asctime_buf[0] = 0; \
-    memset(&(var)->_new._reent._localtime_buf, 0, sizeof((var)->_new._reent._localtime_buf)); \
-    (var)->_new._reent._gamma_signgam = 0; \
     (var)->_new._reent._rand_next = 1; \
     (var)->_new._reent._r48._seed[0] = _RAND48_SEED_0; \
     (var)->_new._reent._r48._seed[1] = _RAND48_SEED_1; \
@@ -734,36 +718,6 @@ struct _reent
     (var)->_new._reent._r48._mult[1] = _RAND48_MULT_1; \
     (var)->_new._reent._r48._mult[2] = _RAND48_MULT_2; \
     (var)->_new._reent._r48._add = _RAND48_ADD; \
-    (var)->_new._reent._mblen_state.__count = 0; \
-    (var)->_new._reent._mblen_state.__value.__wch = 0; \
-    (var)->_new._reent._mbtowc_state.__count = 0; \
-    (var)->_new._reent._mbtowc_state.__value.__wch = 0; \
-    (var)->_new._reent._wctomb_state.__count = 0; \
-    (var)->_new._reent._wctomb_state.__value.__wch = 0; \
-    (var)->_new._reent._mbrlen_state.__count = 0; \
-    (var)->_new._reent._mbrlen_state.__value.__wch = 0; \
-    (var)->_new._reent._mbrtowc_state.__count = 0; \
-    (var)->_new._reent._mbrtowc_state.__value.__wch = 0; \
-    (var)->_new._reent._mbsrtowcs_state.__count = 0; \
-    (var)->_new._reent._mbsrtowcs_state.__value.__wch = 0; \
-    (var)->_new._reent._wcrtomb_state.__count = 0; \
-    (var)->_new._reent._wcrtomb_state.__value.__wch = 0; \
-    (var)->_new._reent._wcsrtombs_state.__count = 0; \
-    (var)->_new._reent._wcsrtombs_state.__value.__wch = 0; \
-    (var)->_new._reent._l64a_buf[0] = '\0'; \
-    (var)->_new._reent._signal_buf[0] = '\0'; \
-    (var)->_new._reent._getdate_err = 0; \
-    (var)->_atexit = _NULL; \
-    (var)->_atexit0._next = _NULL; \
-    (var)->_atexit0._ind = 0; \
-    (var)->_atexit0._fns[0] = _NULL; \
-    (var)->_atexit0._on_exit_args._fntypes = 0; \
-    (var)->_atexit0._on_exit_args._fnargs[0] = _NULL; \
-    (var)->_sig_func = _NULL; \
-    (var)->__sglue._next = _NULL; \
-    (var)->__sglue._niobs = 0; \
-    (var)->__sglue._iobs = _NULL; \
-    memset(&(var)->__sf, 0, sizeof((var)->__sf)); \
   }
 
 #define _REENT_CHECK_RAND48(ptr)	/* nothing */
-- 
1.7.7


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]