nx_fbench_t2f.nx source
↩ module page · 72 lines · 1651 B
1import "nx_syscalls.nx"
2
3func fb_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n }
4
5func fb_puts(s: *u8) -> i64 { let n: i64 = fb_slen(s); sys_write(1, s, n); return 0 }
6
7func fb_pdec(n: i64) -> i64 {
8 let buf: *u8 = sys_mmap(32) as *u8
9 if n == 0 { fb_puts("0" as *u8); return 0 }
10 var v: i64 = n
11 var i: i64 = 31
12 while v > 0 {
13 let q: i64 = v / 10
14 let d: i64 = v - q * 10
15 buf[i] = (48 + d) as u8
16 v = q
17 i = i - 1
18 }
19 let o: i64 = i + 1
20 let p: *u8 = buf + o
21 let len: i64 = 31 - i
22 sys_write(1, p, len)
23 return 0
24}
25
26func fb_rev(src: *u8, dst: *u8) -> i64 {
27 let n: i64 = fb_slen(src)
28 var i: i64 = 0
29 while i < n {
30 let j: i64 = n - 1 - i
31 dst[i] = src[j]
32 i = i + 1
33 }
34 dst[n] = 0 as u8
35 return 0
36}
37
38func fb_is_vowel(c: i64) -> i64 {
39 if c == 97 { return 1 }
40 if c == 101 { return 1 }
41 if c == 105 { return 1 }
42 if c == 111 { return 1 }
43 if c == 117 { return 1 }
44 return 0
45}
46
47func fb_count_vowels(s: *u8) -> i64 {
48 let n: i64 = fb_slen(s)
49 var cnt: i64 = 0
50 var i: i64 = 0
51 while i < n {
52 let c: i64 = s[i] as i64
53 let v: i64 = fb_is_vowel(c)
54 cnt = cnt + v
55 i = i + 1
56 }
57 return cnt
58}
59
60func main(argc: i64, argv: *i64) -> i64 {
61 let text: *u8 = "sovereign forge" as *u8
62 let rbuf: *u8 = sys_mmap(128) as *u8
63 fb_rev(text, rbuf)
64 fb_puts("FBENCH-T2 rev=" as *u8)
65 fb_puts(rbuf)
66 fb_puts(" vowels=" as *u8)
67 let vc: i64 = fb_count_vowels(text)
68 fb_pdec(vc)
69 fb_puts("\n" as *u8)
70 sys_exit(0)
71 return 0
72}