code wiki / _hdl_build / _loopsynth_maxbyte.nx
_loopsynth_maxbyte.nx source
↩ module page · 59 lines · 1937 B
1// SYNTHESIZED BY THE NISHI TEAM (fold schema, _loop_synth_authored): the loop skeleton
2// is the sketch; INIT+STEP were derived from oracle queries and held-out-verified.
3import "nx_syscalls.nx"
4func _c_le(a: i64, b: i64) -> i64 { if a <= b { return 1 } return 0 }
5func _c_add(a: i64, b: i64) -> i64 { return a + b }
6func _c_max(a: i64, b: i64) -> i64 { if a > b { return a } return b }
7func _c_min(a: i64, b: i64) -> i64 { if a < b { return a } return b }
8func _c_mul(a: i64, b: i64) -> i64 { return a * b }
9func _c_and(a: i64, b: i64) -> i64 { return a & b }
10func _c_shr(a: i64, b: i64) -> i64 { return a >> (b & 63) }
11func _c_sub(a: i64, b: i64) -> i64 { return a - b }
12func _c_shl(a: i64, b: i64) -> i64 { return a << (b & 63) }
13func _c_div(a: i64, b: i64) -> i64 { if b == 0 { return 0 } return a / b }
14func _c_mod(a: i64, b: i64) -> i64 { if b == 0 { return 0 } return a % b }
15func _c_abs(a: i64) -> i64 { if a < 0 { return 0 - a } return a }
16func step(a: i64, b: i64) -> i64 { return _c_max(a, b) }
17func synth(buf: *u8, n: i64) -> i64 {
18 var acc: i64 = 0
19 var i: i64 = 0
20 while i < n { acc = step(acc, buf[i] as i64); i = i + 1 }
21 return acc
22}
23func _g_byte(seed: i64, i: i64) -> i64 {
24 if (seed + i) % 3 == 0 { return 0 }
25 return (seed * 131 + i * 37) & 255
26}
27func main() -> i64 {
28 let s: *i64 = sys_mmap(64) as *i64
29 let l: *i64 = sys_mmap(64) as *i64
30 let e: *i64 = sys_mmap(64) as *i64
31 s[0] = 1
32 l[0] = 0
33 e[0] = 0
34 s[1] = 5
35 l[1] = 0
36 e[1] = 0
37 s[2] = 1
38 l[2] = 7
39 e[2] = 242
40 s[3] = 5
41 l[3] = 7
42 e[3] = 254
43 s[4] = 1
44 l[4] = 11
45 e[4] = 245
46 s[5] = 5
47 l[5] = 11
48 e[5] = 254
49 let buf: *u8 = sys_mmap(64)
50 var t: i64 = 0
51 while t < 6 {
52 var j: i64 = 0
53 while j < l[t] { buf[j] = _g_byte(s[t], j) as u8; j = j + 1 }
54 if synth(buf, l[t]) != e[t] { sys_exit(1) }
55 t = t + 1
56 }
57 sys_exit(0)
58 return 0
59}