File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 5050%
5151/rsecprime {
5252
53- 7 dict begin
53+ 8 dict begin
5454
5555 /p exch def % Prime modulus
5656 /lfsr exch def % Workspace of length at least nc
@@ -59,21 +59,30 @@ begin
5959 /nd exch def % Number of data codewords
6060 /getdata exch def % Implements fetching nth codeword
6161
62- 0 1 nc 1 sub {lfsr exch 0 put} for
62+ 0 1 nc 1 sub {lfsr exch 0 put} for % Zero LFSR
63+
64+ %
65+ % Reverse coeffs to simplify the inner loop
66+ %
67+ /coeffsrev nc array def
68+ 0 1 nc 1 sub {
69+ /j exch def
70+ coeffsrev j coeffs nc 1 sub j sub get put
71+ } for
6372
6473 0 1 nd 1 sub { % m
6574 getdata exec lfsr 0 get sub p add p mod % fb = (data[m] - S[0]) mod p
6675 0 1 nc 2 sub { % j
67- lfsr exch dup 1 add % ... lfsr j j+1
68- 2 index exch get % ... lfsr j S[j+1]
69- coeffs nc 3 index sub 1 sub get % ... coeffs[nc-1- j]
76+ lfsr exch dup 1 add % ... fb lfsr j j+1
77+ 2 index exch get % ... fb lfsr j S[j+1]
78+ coeffsrev 2 index get % ... fb lfsr j S[j+1] coeffsrev[ j]
7079 4 index % ... fb
71- mul p mod % prod = (coeffs[nc-1- j] * fb) mod p
80+ mul p mod % prod = (coeffsrev[ j] * fb) mod p
7281 add p mod put % S[j] = (S[j+1] + prod) mod p
7382 } for
74- lfsr nc 1 sub coeffs 0 get 3 index % S[nc-1] = (coeffs[0] * fb) mod p
75- mul p mod put
76- pop % fb
83+ lfsr exch nc 1 sub exch % ... lfsr nc-1 fb
84+ coeffsrev nc 1 sub get % ... lfsr nc-1 fb coeffsrev[nc-1]
85+ mul p mod put % S[nc-1] = (coeffsrev[nc-1] * fb) mod p
7786 } for
7887
7988 end
You can’t perform that action at this time.
0 commit comments