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