v / vlib / v2 / gen / arm64 / tests / hash_pages_shape.v
45 lines · 41 sloc · 931 bytes · e7738c112c787d477501fa4a87edd0e1d72159bd
Raw
1module main
2
3const page_size = 64
4
5@[direct_array_access]
6fn fill_hash(data &u8, data_len int, out &u8) {
7 for i in 0 .. 32 {
8 unsafe {
9 out[i] = if i < data_len { data[i] + 1 } else { u8(i) }
10 }
11 }
12}
13
14fn hash_pages_shape(data &u8, mut hashes []u8, page_start int, page_end int, code_limit int) {
15 mut hash_buf := [32]u8{}
16 for page := page_start; page < page_end; page++ {
17 start := page * page_size
18 mut end := start + page_size
19 if end > code_limit {
20 end = code_limit
21 }
22 unsafe {
23 fill_hash(data + start, end - start, &hash_buf[0])
24 }
25 hash_offset := page * 32
26 for i in 0 .. 32 {
27 hashes[hash_offset + i] = hash_buf[i]
28 }
29 }
30}
31
32fn main() {
33 mut data := []u8{len: 150}
34 for i in 0 .. data.len {
35 data[i] = u8(i % 251)
36 }
37 mut hashes := []u8{len: 96}
38 unsafe {
39 hash_pages_shape(data.data, mut hashes, 0, 3, data.len)
40 }
41 println(hashes[0])
42 println(hashes[32])
43 println(hashes[64])
44 println(hashes[95])
45}
46