[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#8751: 24.0.50; CCL is broken
From: |
Kazuhiro Ito |
Subject: |
bug#8751: 24.0.50; CCL is broken |
Date: |
Tue, 31 May 2011 08:26:24 +0900 |
User-agent: |
Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.6 (Maruoka) FLIM/1.14.9 (Gojō) APEL/10.8 EasyPG/1.0.0 Emacs/23.3.50 (i386-mingw-nt6.1.7601) MULE/6.0 (HANACHIRUSATO) |
> > 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
bug#8751: 24.0.50; CCL is broken, Stefan Monnier, 2011/05/30