Skip to content

Commit 34d1232

Browse files
committed
rsecprime: Align with rsecbinary
1 parent cf0d049 commit 34d1232

1 file changed

Lines changed: 18 additions & 9 deletions

File tree

src/rsecprime.ps.src

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ begin
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

0 commit comments

Comments
 (0)