Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions pkg/test/assembly_util_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,3 +69,7 @@ func Test_AsmUtil_SetByte(t *testing.T) {
func Test_AsmUtil_Signextend(t *testing.T) {
util.CheckWithFields(t, false, "asm/util/signextend", util.ASM_MAX_PADDING, field.BLS12_377, field.KOALABEAR_16)
}

func Test_AsmUtil_Padding(t *testing.T) {
util.CheckWithFields(t, false, "asm/util/padding", util.ASM_MAX_PADDING, field.BLS12_377, field.KOALABEAR_16)
}
14 changes: 7 additions & 7 deletions testdata/asm/util/bit_shr.zkasm
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ fn bit_shr256(word u256, n u8) -> (res u256) {
var m u7
var msw u128
var lsw u128
;; decompoise shift
;; decompose shift
b,m = n
;;
if b!=0 goto apply
Expand All @@ -23,7 +23,7 @@ fn bit_shr256_u7(word u256, n u7) -> (res u256) {
var m u6
var msw u192
var lsw u64
;; decompoise shift
;; decompose shift
b,m = n
;;
if b!=0 goto apply
Expand All @@ -40,7 +40,7 @@ fn bit_shr256_u6(word u256, n u6) -> (res u256) {
var m u5
var msw u224
var lsw u32
;; decompoise shift
;; decompose shift
b,m = n
;;
if b!=0 goto apply
Expand All @@ -57,7 +57,7 @@ fn bit_shr256_u5(word u256, n u5) -> (res u256) {
var m u4
var msw u240
var lsw u16
;; decompoise shift
;; decompose shift
b,m = n
;;
if b!=0 goto apply
Expand All @@ -74,7 +74,7 @@ fn bit_shr256_u4(word u256, n u4) -> (res u256) {
var m u3
var msw u248
var lsw u8
;; decompoise shift
;; decompose shift
b,m = n
;;
if b!=0 goto apply
Expand All @@ -91,7 +91,7 @@ fn bit_shr256_u3(word u256, n u3) -> (res u256) {
var m u2
var msw u252
var lsw u4
;; decompoise shift
;; decompose shift
b,m = n
;;
if b!=0 goto apply
Expand All @@ -108,7 +108,7 @@ fn bit_shr256_u2(word u256, n u2) -> (res u256) {
var m u1
var msw u254
var lsw u2
;; decompoise shift
;; decompose shift
b,m = n
;;
if b!=0 goto apply
Expand Down
153 changes: 153 additions & 0 deletions testdata/asm/util/padding.accepts
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
{"rpad_128": { "input": [1208925819614629174771712], "res": [1329227995784915872975864654318272512] }}
{"rpad_128": { "input": [5192296858534827628531595840847872], "res": [1329227995784915872904088535257055232] }}
{"rpad_128": { "input": [5212579268138479298954443580506112], "res": [1334420292643450700532337556609564672] }}
{"rpad_128": { "input": [65536], "res": [1329227995784915872903807060280344576] }}
{"rpad_128": { "input": [18446745173221179392], "res": [1329228075013078387168144653824294912] }}
{"rpad_128": { "input": [20282719088661491769015976067072], "res": [1329248278194519524574231007531630592] }}
{"rpad_128": { "input": [256], "res": [1329227995784915872903807060280344576] }}
{"rpad_128": { "input": [79229371440083952222718656512], "res": [1329248278194519524574231007531630592] }}
{"rpad_128": { "input": [5192296858534827700588090367148032], "res": [1329227995784915891350551133989896192] }}
{"rpad_128": { "input": [33554432], "res": [2658455991569831745807614120560689152] }}
{"rpad_128": { "input": [1213648186097498819919872], "res": [1334420292643450700532337556609564672] }}
{"rpad_128": { "input": [20282409603651670423947251286016], "res": [1329227995784915872903807060280344576] }}
{"rpad_128": { "input": [1329227995784915872903807060297121792], "res": [1329227995784915872903807060297121792] }}
{"rpad_128": { "input": [5192296859743753448145125503926272], "res": [1329227996094400882725152129005125632] }}
{"rpad_128": { "input": [4311744512], "res": [1334420292643450700532337556609564672] }}
{"rpad_128": { "input": [65537], "res": [1329248278194519524574231007531630592] }}
{"rpad_128": { "input": [72339069014638592], "res": [1334420292643450700532337556609564672] }}
{"rpad_128": { "input": [5192296858534846075274570038771712], "res": [1329227995784920595270289929925558272] }}
{"rpad_128": { "input": [0], "res": [0] }}
{"rpad_128": { "input": [5192296858534827628530496329220097], "res": [1329227995784915872903807060280344832] }}
{"rpad_128": { "input": [79228162532711081667253501952], "res": [1329227996094400882725152129005125632] }}
{"rpad_128": { "input": [1099511628032], "res": [1329227996094400882725152129005125632] }}
{"rpad_128": { "input": [309485009821345068741558272], "res": [1329227995784915872975864654318272512] }}
{"rpad_128": { "input": [20282410812577490038576425992192], "res": [1329228075013078387168144653824294912] }}
{"rpad_128": { "input": [18446744078004518912], "res": [1329227996094400882725152129005125632] }}
{"rpad_128": { "input": [1329248278194519524574231007531630592], "res": [1329248278194519524574231007531630592] }}
{"rpad_128": { "input": [4294967552], "res": [1329228075013078387168144653824294912] }}
{"rpad_128": { "input": [79537647524085682662268731392], "res": [1334420292643450700532337556609564672] }}
{"rpad_128": { "input": [1329227995784915872903808159791972352], "res": [1329227995784915872903808159791972352] }}
{"rpad_128": { "input": [1334420292643450700532337556609564672], "res": [1334420292643450700532337556609564672] }}
{"rpad_128": { "input": [309485028268089142434332672], "res": [1329228075013078387168144653824294912] }}
{"rpad_128": { "input": [79228162514264337597838917632], "res": [1329227995784915872975864654318272512] }}
{"rpad_128": { "input": [5192296858534827628530496329285632], "res": [1329227995784915872903807060297121792] }}
{"rpad_128": { "input": [5192296858534827628530496329220352], "res": [1329227995784915872903807060280410112] }}
{"rpad_128": { "input": [4722366764344621924352], "res": [1329228075013078387168144653824294912] }}
{"rpad_128": { "input": [1208925819896104151416832], "res": [1329227996094400882725152129005125632] }}
{"rpad_128": { "input": [281474993487872], "res": [1329228075013078387168144653824294912] }}
{"rpad_128": { "input": [5192296858534827628530500624187392], "res": [1329227995784915872903808159791972352] }}
{"rpad_128": { "input": [1208925819614633469673472], "res": [1329227995784920595270289929925558272] }}
{"rpad_128": { "input": [79228162514264619068520660992], "res": [1329227995784920595270289929925558272] }}
{"rpad_128": { "input": [4722438540463683141632], "res": [1329248278194519524574231007531630592] }}
{"rpad_128": { "input": [1099511693312], "res": [1329228075013078387168144653824294912] }}
{"rpad_128": { "input": [1329227995784915872903807060280344576], "res": [1329227995784915872903807060280344576] }}
{"rpad_128": { "input": [282574488338432], "res": [1334420292643450700532337556609564672] }}
{"rpad_128": { "input": [16777217], "res": [1329228075013078387168144653824294912] }}
{"rpad_128": { "input": [4294967296], "res": [1329227995784915872903807060280344576] }}
{"rpad_128": { "input": [8589934592], "res": [2658455991569831745807614120560689152] }}
{"rpad_128": { "input": [1208925819614629174706432], "res": [1329227995784915872904088535257055232] }}
{"rpad_128": { "input": [4740813226943354765312], "res": [1334420292643450700532337556609564672] }}
{"rpad_128": { "input": [79228162514264337593543950337], "res": [1329227995784915872903807060297121792] }}
{"rpad_128": { "input": [4722366483969156841472], "res": [1329227996094400882725152129005125632] }}
{"rpad_128": { "input": [72057594037993472], "res": [1329227995786124798723421689455050752] }}
{"rpad_128": { "input": [5192376086697341892868089873170432], "res": [1329248278194519524574231007531630592] }}
{"rpad_128": { "input": [18446744073709551616], "res": [1329227995784915872903807060280344576] }}
{"rpad_128": { "input": [36893488147419103232], "res": [2658455991569831745807614120560689152] }}
{"rpad_128": { "input": [1329227995784915872904088535257055232], "res": [1329227995784915872904088535257055232] }}
{"rpad_128": { "input": [1099528404992], "res": [1329248278194519524574231007531630592] }}
{"rpad_128": { "input": [79228162514264338693055578112], "res": [1329227995784915891350551133989896192] }}
{"rpad_128": { "input": [18446744073709551872], "res": [1329227995784915891350551133989896192] }}
{"rpad_128": { "input": [309485009821345073019748352], "res": [1329227995784915891350551133989896192] }}
{"rpad_128": { "input": [1329227995786124798723421689455050752], "res": [1329227995786124798723421689455050752] }}
{"rpad_128": { "input": [618970019642690137449562112], "res": [2658455991569831745807614120560689152] }}
{"rpad_128": { "input": [1099511627776], "res": [1329227995784915872903807060280344576] }}
{"rpad_128": { "input": [310693935640959697899487232], "res": [1334420292643450700532337556609564672] }}
{"rpad_128": { "input": [2199023255552], "res": [2658455991569831745807614120560689152] }}
{"rpad_128": { "input": [16777472], "res": [1329248278194519524574231007531630592] }}
{"rpad_128": { "input": [1208925819614629174706176], "res": [1329227995784915872903807060280344576] }}
{"rpad_128": { "input": [309485009821345068724781057], "res": [1329227995784915872903807064575311872] }}
{"rpad_128": { "input": [1208925819614629191483392], "res": [1329227995784915891350551133989896192] }}
{"rpad_128": { "input": [72058693549555712], "res": [1329248278194519524574231007531630592] }}
{"rpad_128": { "input": [309485009821626543701491712], "res": [1329227995786124798723421689455050752] }}
{"rpad_128": { "input": [18518801667747479552], "res": [1334420292643450700532337556609564672] }}
{"rpad_128": { "input": [4722366482869645213697], "res": [1329227995784915872904088535257055232] }}
{"rpad_128": { "input": [512], "res": [2658455991569831745807614120560689152] }}
{"rpad_128": { "input": [72057594054705152], "res": [1329227996094400882725152129005125632] }}
{"rpad_128": { "input": [281474976710657], "res": [1329227995784920595270289929925558272] }}
{"rpad_128": { "input": [158456325028528675187087900672], "res": [2658455991569831745807614120560689152] }}
{"rpad_128": { "input": [20282409603651670423947251351552], "res": [1329227995784915872903807064575311872] }}
{"rpad_128": { "input": [309485009821345068724781056], "res": [1329227995784915872903807060280344576] }}
{"rpad_128": { "input": [1], "res": [1329227995784915872903807060280344576] }}
{"rpad_128": { "input": [1208925819615728686333952], "res": [1329227995786124798723421689455050752] }}
{"rpad_128": { "input": [20282409603670117168020960837632], "res": [1329227995786124798723421689455050752] }}
{"rpad_128": { "input": [309485009821345068724781312], "res": [1329227995784915872903808159791972352] }}
{"rpad_128": { "input": [4295032832], "res": [1329248278194519524574231007531630592] }}
{"rpad_128": { "input": [4722366482873940180992], "res": [1329227995786124798723421689455050752] }}
{"rpad_128": { "input": [309485009821346168236408832], "res": [1329227995784920595270289929925558272] }}
{"rpad_128": { "input": [1329227995784915872903807064575311872], "res": [1329227995784915872903807064575311872] }}
{"rpad_128": { "input": [131072], "res": [2658455991569831745807614120560689152] }}
{"rpad_128": { "input": [1329227995784915872903807060280410112], "res": [1329227995784915872903807060280410112] }}
{"rpad_128": { "input": [20282409603651742481541289213952], "res": [1329227995784920595270289929925558272] }}
{"rpad_128": { "input": [79228162514264337593543950336], "res": [1329227995784915872903807060280344576] }}
{"rpad_128": { "input": [20282409608374036906816896499712], "res": [1329227996094400882725152129005125632] }}
{"rpad_128": { "input": [309485009893402662762708992], "res": [1329227996094400882725152129005125632] }}
{"rpad_128": { "input": [281474976710656], "res": [1329227995784915872903807060280344576] }}
{"rpad_128": { "input": [79228162514264337593543950592], "res": [1329227995784915872903807064575311872] }}
{"rpad_128": { "input": [4294967297], "res": [1329227996094400882725152129005125632] }}
{"rpad_128": { "input": [65792], "res": [1334420292643450700532337556609564672] }}
{"rpad_128": { "input": [1208925891672223212634112], "res": [1329228075013078387168144653824294912] }}
{"rpad_128": { "input": [4722366482869645213952], "res": [1329227995784915872975864654318272512] }}
{"rpad_128": { "input": [281474976776192], "res": [1329227996094400882725152129005125632] }}
{"rpad_128": { "input": [5192297168019837449875565054001152], "res": [1329228075013078387168144653824294912] }}
{"rpad_128": { "input": [18446744073726328832], "res": [1329227995786124798723421689455050752] }}
{"rpad_128": { "input": [18447025548686262272], "res": [1329248278194519524574231007531630592] }}
{"rpad_128": { "input": [79228162514336395187581878272], "res": [1329227995786124798723421689455050752] }}
{"rpad_128": { "input": [1208944266358702884257792], "res": [1329248278194519524574231007531630592] }}
{"rpad_128": { "input": [10384593717069655257060992658440192], "res": [2658455991569831745807614120560689152] }}
{"rpad_128": { "input": [1329227995784915872903807060280344832], "res": [1329227995784915872903807060280344832] }}
{"rpad_128": { "input": [257], "res": [1334420292643450700532337556609564672] }}
{"rpad_128": { "input": [16842752], "res": [1334420292643450700532337556609564672] }}
{"rpad_128": { "input": [281474976710912], "res": [1329227995786124798723421689455050752] }}
{"rpad_128": { "input": [4722366482869645279232], "res": [1329227995784915891350551133989896192] }}
{"rpad_128": { "input": [20282409603651670423951546253312], "res": [1329227995784915872904088535257055232] }}
{"rpad_128": { "input": [1329227996094400882725152129005125632], "res": [1329227996094400882725152129005125632] }}
{"rpad_128": { "input": [18446744073709551617], "res": [1329227995784915872975864654318272512] }}
{"rpad_128": { "input": [40564819207303340847894502572032], "res": [2658455991569831745807614120560689152] }}
{"rpad_128": { "input": [2], "res": [2658455991569831745807614120560689152] }}
{"rpad_128": { "input": [309489732187827938369994752], "res": [1329248278194519524574231007531630592] }}
{"rpad_128": { "input": [4722366482869661990912], "res": [1329227995784920595270289929925558272] }}
{"rpad_128": { "input": [4722366482869645213696], "res": [1329227995784915872903807060280344576] }}
{"rpad_128": { "input": [79228162514264337593560727552], "res": [1329227995784915872904088535257055232] }}
{"rpad_128": { "input": [72057594037927937], "res": [1329227995784915891350551133989896192] }}
{"rpad_128": { "input": [18446744073709617152], "res": [1329227995784920595270289929925558272] }}
{"rpad_128": { "input": [79228162514264337593544015872], "res": [1329227995784915872903808159791972352] }}
{"rpad_128": { "input": [5192296858534827628811971305930752], "res": [1329227995784915872975864654318272512] }}
{"rpad_128": { "input": [2417851639229258349412352], "res": [2658455991569831745807614120560689152] }}
{"rpad_128": { "input": [20282409603651670425046762913792], "res": [1329227995784915872975864654318272512] }}
{"rpad_128": { "input": [2658455991569831745807614120560689152], "res": [2658455991569831745807614120560689152] }}
{"rpad_128": { "input": [72057594037928192], "res": [1329227995784920595270289929925558272] }}
{"rpad_128": { "input": [16777216], "res": [1329227995784915872903807060280344576] }}
{"rpad_128": { "input": [1329227995784915872975864654318272512], "res": [1329227995784915872975864654318272512] }}
{"rpad_128": { "input": [20361637766165934761540795236352], "res": [1334420292643450700532337556609564672] }}
{"rpad_128": { "input": [1329228075013078387168144653824294912], "res": [1329228075013078387168144653824294912] }}
{"rpad_128": { "input": [5192296858539549995013365974433792], "res": [1329227995786124798723421689455050752] }}
{"rpad_128": { "input": [281479271677952], "res": [1329248278194519524574231007531630592] }}
{"rpad_128": { "input": [20282409603651670423947251286017], "res": [1329227995784915872903807060280410112] }}
{"rpad_128": { "input": [1329227995784920595270289929925558272], "res": [1329227995784920595270289929925558272] }}
{"rpad_128": { "input": [1208925819614629174706177], "res": [1329227995784915872903808159791972352] }}
{"rpad_128": { "input": [20282409603651670423947251286272], "res": [1329227995784915872903807060297121792] }}
{"rpad_128": { "input": [72057594037927936], "res": [1329227995784915872903807060280344576] }}
{"rpad_128": { "input": [72057598332895232], "res": [1329228075013078387168144653824294912] }}
{"rpad_128": { "input": [1329227995784915891350551133989896192], "res": [1329227995784915891350551133989896192] }}
{"rpad_128": { "input": [144115188075855872], "res": [2658455991569831745807614120560689152] }}
{"rpad_128": { "input": [20282409603651670705422227996672], "res": [1329227995784915891350551133989896192] }}
{"rpad_128": { "input": [562949953421312], "res": [2658455991569831745807614120560689152] }}
{"rpad_128": { "input": [9444732965739290427392], "res": [2658455991569831745807614120560689152] }}
{"rpad_128": { "input": [1099511627777], "res": [1329227995786124798723421689455050752] }}
{"rpad_128": { "input": [1329227995784915872903807060280344577], "res": [1329227995784915872903807060280344577] }}
{"rpad_128": { "input": [5192296858534827628530496345997312], "res": [1329227995784915872903807064575311872] }}
{"rpad_128": { "input": [20282409603651670423947268063232], "res": [1329227995784915872903808159791972352] }}
{"rpad_128": { "input": [5192296858534827628530496329220096], "res": [1329227995784915872903807060280344576] }}
{"rpad_128": { "input": [309485009821345068724846592], "res": [1329227995784915872904088535257055232] }}
{"rpad_128": { "input": [79228167236630820463189164032], "res": [1329228075013078387168144653824294912] }}
{"rpad_128": { "input": [1103806595072], "res": [1334420292643450700532337556609564672] }}
49 changes: 49 additions & 0 deletions testdata/asm/util/padding.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package main

import (
"fmt"
"math/big"
"strings"
)

/**
// generate padding.accepts
go run testdata/asm/util/padding.go > byte_counts_test.accepts
cat byte_counts_test.accepts | shuf | tail -n 5000 > testdata/asm/util/padding.accepts
*/

func main() {
for i := uint(0); i <= 16; i++ {
for j := uint(0); j <= i; j++ {
printInstance(i, j)
}
}
}

func printInstance(i uint, j uint) {
var (
builder strings.Builder
input big.Int
res big.Int
)

// input = 256^(i-1) + 256^(j-1)
var a, b big.Int
if i != 0 {
a.SetBit(&a, int(8*(i-1)), 1)
}
if j != 0 {
b.SetBit(&b, int(8*(j-1)), 1)
}
input.Add(&a, &b)

// res = input >> (16 - i)
res.Lsh(&input, 8*uint(16-i))

builder.WriteString("{\"rpad_128\": { ")
builder.WriteString(fmt.Sprintf("\"input\": [%s]", input.String()))
builder.WriteString(fmt.Sprintf(", \"res\": [%s]", res.String()))
builder.WriteString(" }}")
fmt.Println(builder.String())

}
46 changes: 46 additions & 0 deletions testdata/asm/util/padding.zkasm
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
;; Right or Left Pad an input to a given size.


;; right pad u128
fn rpad_128(input u128) -> (res u128) {
var leading_zeroes u8
var remaining u120
leading_zeroes, remaining = input
if leading_zeroes != 0 goto exit_no_change
if remaining != 0 goto exit_shift
goto exit_no_change
exit_shift:
res = rpad_128(256 * remaining)
return
exit_no_change:
res = input
return
}

;; right pad u128 into a u120. Note that it will fail if the u128 input is > u120 (ie first byte non-zero)
fn rpad_128_120(input u128) -> (res u120) {
var leading_zeroes u8
var remaining u120
leading_zeroes, remaining = input
if leading_zeroes != 0 goto exit_fail
res = rpad_120(remaining)
return
exit_fail:
fail
}

;; right pad u120
fn rpad_120(input u120) -> (res u120) {
var leading_zeroes u8
var remaining u112
leading_zeroes, remaining = input
if leading_zeroes != 0 goto exit_no_change
if remaining != 0 goto exit_shift
goto exit_no_change
exit_shift:
res = rpad_120(256 * remaining)
return
exit_no_change:
res = input
return
}