[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

[MD:862]CCL coding system on Meadow.



Miyashita Hisashi(宮下 尚:HIMI) <himi@xxxxxxxxxxxxxxxxxxxxxxxxx> writes:

> ところで、ew-ccl-bって、まだまだ最適化できそうですね。
> 
> うーん。CCLの演算子を作った方が良いのかなぁ。
> 
> # ExCCLの命令を使えば、まだかなり速くなると思います。

ExCCLはまだ使ってないけど、(あれはもうちょっとmucs-cclを改良しないと
使いにくい;_;) こんなサボったもの作ってみました。どうでしょうか

とりあえず、decoderだけ。

でも、まだまだ最適化できる。

あ、ちなみに、=のpaddingがないと、途中で切れます。^^;;;

(defconst ccl-b64-array 
  '[ -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1
     -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1
     -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  62  -1  -1  -1  63
     52  53  54  55  56  57  58  59  60  61  -1  -1  -1  -2  -1  -1
     -1   0   1   2   3   4   5   6   7   8   9  10  11  12  13  14
     15  16  17  18  19  20  21  22  23  24  25  -1  -1  -1  -1  -1
     -1  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40
     41  42  43  44  45  46  47  48  49  50  51  -1  -1  -1  -1  -1
     -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1
     -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1
     -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1
     -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1
     -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1
     -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1
     -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1
     -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1])

(define-ccl-program ew-ccl-decode-b-2
  `(1
    (loop
     (read r1 r2 r3 r4)
     (r0 = r1 ,ccl-b64-array)
     (r0 = (r0 << 6))
     (r1 = r2 ,ccl-b64-array)
     (r0 = ((r1 | r0) << 6))
     (r1 = r3 ,ccl-b64-array)
     (r0 = ((r1 | r0) << 6))
     (r1 = r4 ,ccl-b64-array)
     (r0 = (r4 | r0))
     (write (r0 >> 16))
     (if (r3 == -2)
	 ((end))
       ((write ((r0 >> 8) & ?\xff))
	(if (r3 == -2)
	    ((end))
	 ((r1 = (r0 & ?\xff))
	  (write-repeat r1))))))))

from himi