This is the mail archive of the libc-alpha@sources.redhat.com mailing list for the glibc 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]

optimize Shift_JIS iconv converter



Here is an optimization of the Shift_JIS converter: Use a simple addition
instead of an array access.


2002-04-15  Bruno Haible  <bruno@clisp.org>

	* iconvdata/sjis.c (halfkana_to_ucs4): Remove array.
	(BODY for FROM_LOOP): Optimize the JISX0201:GR to Unicode conversion.

--- glibc-20020408/iconvdata/sjis.c.bak	2001-08-15 21:39:08.000000000 +0200
+++ glibc-20020408/iconvdata/sjis.c	2002-04-16 02:16:55.000000000 +0200
@@ -1,5 +1,5 @@
 /* Mapping tables for SJIS handling.
-   Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1997-1999, 2000-2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -22,18 +22,6 @@
 #include <stdint.h>
 #include <wchar.h>
 
-static const uint32_t halfkana_to_ucs4[] =
-{
-  0xff61, 0xff62, 0xff63, 0xff64, 0xff65, 0xff66, 0xff67, 0xff68,
-  0xff69, 0xff6a, 0xff6b, 0xff6c, 0xff6d, 0xff6e, 0xff6f, 0xff70,
-  0xff71, 0xff72, 0xff73, 0xff74, 0xff75, 0xff76, 0xff77, 0xff78,
-  0xff79, 0xff7a, 0xff7b, 0xff7c, 0xff7d, 0xff7e, 0xff7f, 0xff80,
-  0xff81, 0xff82, 0xff83, 0xff84, 0xff85, 0xff86, 0xff87, 0xff88,
-  0xff89, 0xff8a, 0xff8b, 0xff8c, 0xff8d, 0xff8e, 0xff8f, 0xff90,
-  0xff91, 0xff92, 0xff93, 0xff94, 0xff95, 0xff96, 0xff97, 0xff98,
-  0xff99, 0xff9a, 0xff9b, 0xff9c, 0xff9d, 0xff9e, 0xff9f
-};
-
 
 /* The following table can be generated from the file
 	unix/mappings/eastasia/jis/shiftjis.txt
@@ -4357,7 +4345,7 @@
       ++inptr;								      \
     else if (ch >= 0xa1 && ch <= 0xdf)					      \
       {									      \
-	ch = halfkana_to_ucs4[ch - 0xa1];				      \
+	ch += 0xfec0;							      \
 	++inptr;							      \
       }									      \
     else if (__builtin_expect (ch > 0xea, 0)				      \
@@ -4378,14 +4366,14 @@
       }									      \
     else								      \
       {									      \
-	/* Two-byte character.  First test whether the next character	      \
+	/* Two-byte character.  First test whether the next byte	      \
 	   is also available.  */					      \
 	uint32_t ch2;							      \
 	uint_fast32_t idx;						      \
 									      \
 	if (__builtin_expect (inptr + 1 >= inend, 0))			      \
 	  {								      \
-	    /* The second character is not available.  Store		      \
+	    /* The second byte is not available.  Store			      \
 	       the intermediate result.  */				      \
 	    result = __GCONV_INCOMPLETE_INPUT;				      \
 	    break;							      \


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