Skip to content

Commit 3666fb4

Browse files
authored
feat: update zkasm modules to latest versions (#827)
1 parent bfe9b12 commit 3666fb4

File tree

6 files changed

+26
-105
lines changed

6 files changed

+26
-105
lines changed

exp/exp.zkasm

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ pub fn exp(INST=0xEE0A u16, ARG u256, CDS u6, EBS u6) -> (RES=0 u128)
2525
{
2626
var s, b u1
2727
var tmp u5
28-
var log_word, zero, shift u8
28+
var shift u8
2929
var shifted_word, filled_word u256
3030
;;
3131
if INST == EXP_INST_EXPLOG goto explog
@@ -43,8 +43,7 @@ explog2:
4343
return
4444
modexplog:
4545
;; fill as necessary
46-
zero = 0
47-
filled_word = fill_bytes_between(ARG, CDS, EBS, zero)
46+
filled_word = fill_bytes_between(ARG, CDS, EBS, 0)
4847
;; determine shift amount (in bits)
4948
s, b, shift = (32 - EBS) * 8
5049
;; check precondition
@@ -53,9 +52,7 @@ modexplog:
5352
;; shift right
5453
shifted_word = bit_shr256(filled_word,shift)
5554
;; compute log
56-
log_word = log2(shifted_word)
57-
;; cast
58-
RES = log_word
55+
RES = log2(shifted_word)
5956
;;
6057
return
6158
failed_pre:

util/bit_shift.zkasm

Lines changed: 0 additions & 66 deletions
This file was deleted.

util/bit_shl.zkasm

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
;; implementation performs a decomposition on the shift, starting with
33
;; the most significant bit.
44
fn bit_shl256(word u256, n u8) -> (res u256) {
5-
var nword u256
65
var lsw u128
76
var msw u128
87
var b u1
@@ -15,13 +14,11 @@ fn bit_shl256(word u256, n u8) -> (res u256) {
1514
return
1615
apply:
1716
msw, lsw = word
18-
nword = lsw * 2^128
19-
res = bit_shl256_u7(nword,m)
17+
res = bit_shl256_u7(lsw * 2^128, m)
2018
return
2119
}
2220

2321
fn bit_shl256_u7(word u256, n u7) -> (res u256) {
24-
var nword u256
2522
var lsw u192
2623
var msw u64
2724
var b u1
@@ -34,13 +31,11 @@ fn bit_shl256_u7(word u256, n u7) -> (res u256) {
3431
return
3532
apply:
3633
msw, lsw = word
37-
nword = lsw * 2^64
38-
res = bit_shl256_u6(nword,m)
34+
res = bit_shl256_u6(lsw * 2^64, m)
3935
return
4036
}
4137

4238
fn bit_shl256_u6(word u256, n u6) -> (res u256) {
43-
var nword u256
4439
var lsw u224
4540
var msw u32
4641
var b u1
@@ -53,13 +48,11 @@ fn bit_shl256_u6(word u256, n u6) -> (res u256) {
5348
return
5449
apply:
5550
msw, lsw = word
56-
nword = lsw * 2^32
57-
res = bit_shl256_u5(nword,m)
51+
res = bit_shl256_u5(lsw * 2^32, m)
5852
return
5953
}
6054

6155
fn bit_shl256_u5(word u256, n u5) -> (res u256) {
62-
var nword u256
6356
var lsw u240
6457
var msw u16
6558
var b u1
@@ -72,13 +65,11 @@ fn bit_shl256_u5(word u256, n u5) -> (res u256) {
7265
return
7366
apply:
7467
msw, lsw = word
75-
nword = lsw * 2^16
76-
res = bit_shl256_u4(nword,m)
68+
res = bit_shl256_u4(lsw * 2^16, m)
7769
return
7870
}
7971

8072
fn bit_shl256_u4(word u256, n u4) -> (res u256) {
81-
var nword u256
8273
var lsw u248
8374
var msw u8
8475
var b u1
@@ -91,13 +82,11 @@ fn bit_shl256_u4(word u256, n u4) -> (res u256) {
9182
return
9283
apply:
9384
msw, lsw = word
94-
nword = lsw * 2^8
95-
res = bit_shl256_u3(nword,m)
85+
res = bit_shl256_u3(lsw * 2^8, m)
9686
return
9787
}
9888

9989
fn bit_shl256_u3(word u256, n u3) -> (res u256) {
100-
var nword u256
10190
var lsw u252
10291
var msw u4
10392
var b u1
@@ -110,13 +99,11 @@ fn bit_shl256_u3(word u256, n u3) -> (res u256) {
11099
return
111100
apply:
112101
msw, lsw = word
113-
nword = lsw * 2^4
114-
res = bit_shl256_u2(nword,m)
102+
res = bit_shl256_u2(lsw * 2^4, m)
115103
return
116104
}
117105

118106
fn bit_shl256_u2(word u256, n u2) -> (res u256) {
119-
var nword u256
120107
var lsw u254
121108
var msw u2
122109
var b u1
@@ -129,8 +116,7 @@ fn bit_shl256_u2(word u256, n u2) -> (res u256) {
129116
return
130117
apply:
131118
msw, lsw = word
132-
nword = lsw * 2^2
133-
res = bit_shl256_u1(nword,m)
119+
res = bit_shl256_u1(lsw * 2^2, m)
134120
return
135121
}
136122

util/bit_xoan.zkasm

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
;; Bit_xoan is doing intermediate functions calls to split a u256 down to u1
1+
;; Bit_xoan is doing intermediate functions calls to split a u256 down
2+
;; to u1.
3+
;;
24
;; bit_xoan_u2 has the logic to discriminate between the instructions
3-
;; Used for Xor, Or, And, Not
5+
;; XOR, OR, AND, NOT
46

57
const BIT_XOR = 0
68
const BIT_OR = 1

util/fill_bytes.zkasm

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ include "set_byte.zkasm"
1818
;; end. The key is that all other bytes remain unchanged.
1919
fn fill_bytes_between(word u256, start u6, end u6, value u8) -> (res u256) {
2020
var nword u256
21-
var noffset u6
2221
var offset u5
2322
var s u1
2423
;; check termination
@@ -29,10 +28,8 @@ fn fill_bytes_between(word u256, start u6, end u6, value u8) -> (res u256) {
2928
if s == 1 goto exit
3029
;; set given byte
3130
nword = set_byte256(word, offset, value)
32-
;; increment offset
33-
noffset = offset + 1
3431
;; recurse
35-
res = fill_bytes_between(nword, noffset, end, value)
32+
res = fill_bytes_between(nword, offset+1, end, value)
3633
;; done
3734
return
3835
exit:

util/signextend.zkasm

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,20 @@
22
;;
33
;; n = ( 31 - size )
44
;; Extend the sign of the nth byte on the range [0:n[ with n excluded
5-
;; if size == 0, sign of the 31th byte is extended from byte 0 to 30
5+
;; if size == 0, sign of the 31st byte is extended from byte 0 to 30
66
;; if size == 31, word stays unchanged
77
;;
88
;; Examples :
9-
;; size = 0, word = 0x80FF, res = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff (byte 30 is overridden)
10-
;; size = 1, word = 0x80FF, res = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80ff
11-
;; size = 2, word = 0x80FF, res = 0x80FF
12-
;;
13-
;; note : this function does not handle the case where size > 31, as it's handled at the module level
9+
;; (1)
10+
;; size = 0, word = 0x80FF
11+
;; res = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
12+
;; note : (byte 30 is overridden)
13+
;; (2)
14+
;; size = 1, word = 0x80FF
15+
;; res = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80ff
16+
;; (3)
17+
;; size = 2, word = 0x80FF
18+
;; res = 0x80FF
1419

1520
include "byte.zkasm"
1621
include "fill_bytes.zkasm"

0 commit comments

Comments
 (0)