GNU bug report logs - #8751
24.0.50; CCL is broken

Previous Next

Package: emacs;

Reported by: Kazuhiro Ito <kzhr <at> d1.dion.ne.jp>

Date: Sat, 28 May 2011 12:51:02 UTC

Severity: normal

Found in version 24.0.50

Done: Paul Eggert <eggert <at> cs.ucla.edu>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Kazuhiro Ito <kzhr <at> d1.dion.ne.jp>
To: Stefan Monnier <monnier <at> iro.umontreal.ca>
Cc: Paul Eggert <eggert <at> cs.ucla.edu>, 8751 <at> debbugs.gnu.org
Subject: bug#8751: 24.0.50; CCL is broken
Date: Tue, 31 May 2011 08:26:24 +0900
> > The problem may be that ccl-compiler produce negative integer as CCL
> > code (at latest, since Emacs21).
> 
> The negative number is normal (it's due to the relative instruction
> address for the backward jump at the end of the loop).  The problem must
> be in the ccl.c code.

If that is right (and I think so, too), the comment of ccl.c should be
fixed.

> /* CCL code is a sequence of 28-bit non-negative integers (i.e. the
                                      ~~~~~~~~~~~~
>    MSB is always 0), each contains CCL command and/or arguments in the
>    following format:
>
> 	|----------------- integer (28-bit) ------------------|
> 	|------- 17-bit ------|- 3-bit --|- 3-bit --|- 5-bit -|
> 	|--constant argument--|-register-|-register-|-command-|
> 	   ccccccccccccccccc      RRR        rrr       XXXXX
>   or
> 	|------- relative address -------|-register-|-command-|
> 	       cccccccccccccccccccc          rrr       XXXXX
>   or
> 	|------------- constant or other args ----------------|
>                      cccccccccccccccccccccccccccc
>
>    where, `cc...c' is a non-negative integer indicating constant value
                          ~~~~~~~~~~~~
>    (the left most `c' is always 0) or an absolute jump address, `RRR'
>    and `rrr' are CCL register number, `XXXXX' is one of the following
>    CCL commands.  */


Here is a quick fix for actual code, but I don't check whether there
is other problems.

=== modified file 'src/ccl.c'
--- src/ccl.c	2011-05-27 21:24:11 +0000
+++ src/ccl.c	2011-05-30 22:19:52 +0000
@@ -100,6 +100,7 @@
    CCL commands.  */
 
 #define CCL_CODE_MAX ((1 << (28 - 1)) - 1)
+#define CCL_CODE_MIN (- CCL_CODE_MAX - 1)
 
 /* CCL commands
 
@@ -756,7 +757,7 @@
   while (0)
 
 #define GET_CCL_CODE(code, ccl_prog, ic)			\
-  GET_CCL_RANGE (code, ccl_prog, ic, 0, CCL_CODE_MAX)
+  GET_CCL_RANGE (code, ccl_prog, ic, CCL_CODE_MIN, CCL_CODE_MAX)
 
 #define GET_CCL_INT(var, ccl_prog, ic)				\
   GET_CCL_RANGE (var, ccl_prog, ic, INT_MIN, INT_MAX)


-- 
Kazuhiro Ito




This bug report was last modified 13 years and 358 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.