_offc_bitset_helper_probe.nx source
↩ module page · 39 lines · 1245 B
1// Verify bit-set helpers when called through indirection — same shape as
2// bit_word/bit_test/bit_set in regalloc.nx.
3
4import "syscalls.nx"
5
6func bit_word(buf: *i64, b: i64, words: i64, v: i64) -> *i64 {
7 let off: i64 = b * words + (v / 64)
8 let base: i64 = buf as i64
9 return (base + off * 8) as *i64
10}
11
12func bit_test(buf: *i64, b: i64, words: i64, v: i64) -> i64 {
13 let w: *i64 = bit_word(buf, b, words, v)
14 let mask: i64 = 1 << (v % 64)
15 if (w[0] & mask) != 0 { return 1 }
16 return 0
17}
18
19func bit_set(buf: *i64, b: i64, words: i64, v: i64) -> i64 {
20 let w: *i64 = bit_word(buf, b, words, v)
21 let mask: i64 = 1 << (v % 64)
22 w[0] = w[0] | mask
23 return 0
24}
25
26func main() -> i64 {
27 let raw: *u8 = sys_mmap(128)
28 let buf: *i64 = raw as *i64
29 bit_set(buf, 0, 2, 5)
30 bit_set(buf, 0, 2, 70)
31 bit_set(buf, 1, 2, 12)
32 var n: i64 = 0
33 if bit_test(buf, 0, 2, 5) != 0 { n = n + 1 }
34 if bit_test(buf, 0, 2, 70) != 0 { n = n + 2 }
35 if bit_test(buf, 1, 2, 12) != 0 { n = n + 4 }
36 if bit_test(buf, 0, 2, 4) != 0 { n = n + 8 } // should be 0
37 if bit_test(buf, 1, 2, 70) != 0 { n = n + 16 } // should be 0
38 return n // expect 7 (1+2+4)
39}