]> git.eshelyaron.com Git - emacs.git/commitdiff
(sub_char_table_set_range): Optimized for the case
authorKenichi Handa <handa@m17n.org>
Tue, 5 Mar 2002 00:08:31 +0000 (00:08 +0000)
committerKenichi Handa <handa@m17n.org>
Tue, 5 Mar 2002 00:08:31 +0000 (00:08 +0000)
DEPTH == 3.  Add workaround code for a GCC optimization bug.

src/chartab.c

index 5bf6d6e3550220c4897679a0a19bb955e2a2056b..8e942beaae8d6b36b03ecc477d1282d15a5ffc9a 100644 (file)
@@ -377,7 +377,7 @@ sub_char_table_set_range (table, depth, min_char, from, to, val)
 {
   int max_char = min_char + chartab_chars[depth] - 1;
 
-  if (from <= min_char && to >= max_char)
+  if (depth == 3 || from <= min_char && to >= max_char)
     *table = val;
   else
     {
@@ -390,12 +390,12 @@ sub_char_table_set_range (table, depth, min_char, from, to, val)
        from = min_char;
       if (to > max_char)
        to = max_char;
+      i = CHARTAB_IDX (from, depth, min_char);
       j = CHARTAB_IDX (to, depth, min_char);
-      for (i = CHARTAB_IDX (from, depth, min_char); i <= j; i++)
+      min_char += chartab_chars[depth] * i;
+      for (; i <= j; i++, min_char += chartab_chars[depth])
        sub_char_table_set_range (XSUB_CHAR_TABLE (*table)->contents + i,
-                                 depth,
-                                 min_char + chartab_chars[depth] * i,
-                                 from, to, val);
+                                 depth, min_char, from, to, val);
     }
 }