[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]
[MD:873]CCL coding system on Meadow.
- X-ml-count: 873
- Subject: [MD:873]CCL coding system on Meadow.
- From: Tanaka Akira <akr@xxxxxxxxxxx>
- Date: Tue, 25 Aug 1998 23:37:15 +0900
- User-agent: Shoe-gnus/6.8.8 Emacs/20.2 MULE/3.0 (MOMIJINOGA)
In article <rsqaf4tba6u.fsf@xxxxxxxxxxxxxxxxxxxxx>,
Tanaka Akira <akr@xxxxxxxxxxx> writes:
> で、ew-ccl-decode-b-2 をもとにして次のように最適化を行なうと、30秒ほど
> で済むようになりました。
結局次のようにしました。変な文字を読み飛ばす機能も入ってます。
こうすると同条件で 16秒ほどになります。DL だと 10秒ほどなのでたかだか
6割増しくらいしかかかってません。
;; ただ... 20.2 は EOF の処理が怪しくて 文字列の最後の = を A に変えた
;; だけで倍近く時間がかかるようになります。
;; 20.3 ならそんなことはありませんが、全体的にひどく遅いです。だいたい
;; 20.2 の 4倍くらいの時間がかかります。
;;;; CCL の >> が算術シフト(符号拡張有り)とは思いませんでした。おかげ
;;;; でちょっと悩んでしまいました。
(eval-when-compile
(defun ew-ccl-decode-b-bit-ex (v)
(logior
(lsh (logand v (lsh 255 16)) -16)
(logand v (lsh 255 8))
(lsh (logand v 255) 16)))
(defconst ew-ccl-decode-b-0-table
(vconcat
(mapcar
(lambda (v)
(if (integerp v)
(ew-ccl-decode-b-bit-ex (lsh v 18))
(lsh 1 24)))
ew-ccl-256-to-64-table)))
(defconst ew-ccl-decode-b-1-table
(vconcat
(mapcar
(lambda (v)
(if (integerp v)
(ew-ccl-decode-b-bit-ex (lsh v 12))
(lsh 1 25)))
ew-ccl-256-to-64-table)))
(defconst ew-ccl-decode-b-2-table
(vconcat
(mapcar
(lambda (v)
(if (integerp v)
(ew-ccl-decode-b-bit-ex (lsh v 6))
(lsh 1 26)))
ew-ccl-256-to-64-table)))
(defconst ew-ccl-decode-b-3-table
(vconcat
(mapcar
(lambda (v)
(if (integerp v)
(ew-ccl-decode-b-bit-ex v)
(lsh 1 27)))
ew-ccl-256-to-64-table)))
)
(define-ccl-program ew-ccl-decode-b
`(1
(loop
(read r0 r1 r2 r3)
(r4 = r0 ,ew-ccl-decode-b-0-table)
(r5 = r1 ,ew-ccl-decode-b-1-table)
(r4 |= r5)
(r5 = r2 ,ew-ccl-decode-b-2-table)
(r4 |= r5)
(r5 = r3 ,ew-ccl-decode-b-3-table)
(r4 |= r5)
(if (r4 & ,(lognot (1- (lsh 1 24))))
((loop
(if (r4 & ,(lsh 1 24))
((r0 = r1) (r1 = r2) (r2 = r3) (read r3)
(r4 >>= 1) (r4 &= ,(logior (lsh 7 24)))
(r5 = r3 ,ew-ccl-decode-b-3-table)
(r4 |= r5)
(repeat))
(break)))
(loop
(if (r4 & ,(lsh 1 25))
((r1 = r2) (r2 = r3) (read r3)
(r4 >>= 1) (r4 &= ,(logior (lsh 7 24)))
(r5 = r3 ,ew-ccl-decode-b-3-table)
(r4 |= r5)
(repeat))
(break)))
(loop
(if (r2 != ?=)
(if (r4 & ,(lsh 1 26))
((r2 = r3) (read r3)
(r4 >>= 1) (r4 &= ,(logior (lsh 7 24)))
(r5 = r3 ,ew-ccl-decode-b-3-table)
(r4 |= r5)
(repeat))
((r6 = 0)
(break)))
((r6 = 1)
(break))))
(loop
(if (r3 != ?=)
(if (r4 & ,(lsh 1 27))
((read r3)
(r4 = r3 ,ew-ccl-decode-b-3-table)
(repeat))
(break))
((r6 |= 2)
(break))))
(r4 = r0 ,ew-ccl-decode-b-0-table)
(r5 = r1 ,ew-ccl-decode-b-1-table)
(r4 |= r5)
(branch
r6
;; BBBB
((r5 = r2 ,ew-ccl-decode-b-2-table)
(r4 |= r5)
(r5 = r3 ,ew-ccl-decode-b-3-table)
(r4 |= r5)
(r4 >8= 0)
(write r7)
(r4 >8= 0)
(write r7)
(r4 >8= 0)
(write-repeat r7))
;; error: BB=B
((r4 >8= 0)
(write r7)
(end))
;; BBB=
((r5 = r2 ,ew-ccl-decode-b-2-table)
(r4 |= r5)
(r4 >8= 0)
(write r7)
(r4 >8= 0)
(write r7)
(end))
;; BB==
((r4 >8= 0)
(write r7)
(end))))
((r4 >8= 0)
(write r7)
(r4 >8= 0)
(write r7)
(r4 >8= 0)
(write-repeat r7))))))
--
[田中 哲][たなか あきら][Tanaka Akira]