Skip to content

Commit 97e85e4

Browse files
committed
dotcode: Optimise ECC
1 parent 6e3e596 commit 97e85e4

1 file changed

Lines changed: 25 additions & 9 deletions

File tree

‎src/dotcode.ps.src‎

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -195,11 +195,14 @@ begin
195195
/dotcode.gencoeffs {
196196
/coeffs [ 1 NC {0} repeat ] def
197197
1 1 NC {
198-
/i exch def
199198
NC -1 1 {
200-
/j exch def
201-
coeffs j coeffs j get 113 add rsalog i get coeffs j 1 sub get mul 113 mod sub 113 mod put
199+
coeffs 1 index 2 copy get 113 add % ... coeffs j coeffs[j]+113
200+
rsalog 5 index get % ... rsalog[i]
201+
coeffs 6 -1 roll 1 sub get % ... coeffs[j-1]
202+
mul 113 mod % p = (rsalog[i] * coeffs[j-1]) mod 113
203+
sub 113 mod put % coeffs[j] = ((coeffs[j]+113) - p) mod 113
202204
} for
205+
pop % i
203206
} for
204207
coeffs
205208
} bind def
@@ -1107,14 +1110,27 @@ begin
11071110
/NW nw 1 add start sub step add 1 sub step idiv def
11081111
/NC NW ND sub def
11091112
/coeffs NC //dotcode.coeffscachefetch exec def
1110-
0 1 ND 1 sub {
1111-
/t exch rscws exch offset get rscws ND offset get add 113 mod def
1112-
0 1 NC 2 sub {
1113-
/j exch def
1114-
rscws ND j add offset rscws ND j add 1 add offset get 113 add t coeffs j 1 add get mul 113 mod sub 113 mod put
1113+
1114+
0 1 ND 1 sub { % i
1115+
rscws exch offset get % ... rscws[offset(i)]
1116+
rscws ND offset get % ... rscws[offset(ND)]
1117+
add 113 mod % t = (rscws[offset(i)] + rscws[offset(ND)]) mod 113
1118+
0 1 NC 2 sub { % j
1119+
rscws ND 2 index add 2 copy 1 add offset get 113 add % ... rscws ND+j rscws[offset[ND+j+1]]+113
1120+
4 index % ... t
1121+
coeffs 6 -1 roll 1 add get % ... coeffs[j+1]
1122+
mul 113 mod % p = (t * coeffs[j+1]) mod 113
1123+
sub 113 mod put % rscws[offset(ND+j)] = (rscws[offset(ND+j+1)]+113 - p) mod 113
11151124
} for
1116-
rscws ND NC add 1 sub offset 113 t coeffs NC get mul 113 mod sub 113 mod put
1125+
rscws ND NC add 1 sub offset % ... rscws offset(ND+NC-1)
1126+
113 % ... 113
1127+
3 index % ... t
1128+
coeffs NC get % ... coeffs[NC]
1129+
mul 113 mod % p = (t * coeffs[NC]) mod 113
1130+
sub 113 mod put % rscws[offset(ND+NC-1)] = (113 - p) mod 113
1131+
pop % t
11171132
} for
1133+
11181134
ND 1 NW 1 sub { dup rscws exch offset 113 rscws 5 -1 roll offset get sub 113 mod put } for
11191135
} for
11201136

0 commit comments

Comments
 (0)