nx_fbench_t3b.nx source
↩ module page · 121 lines · 2737 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_pdec(n: i64) -> i64 {
18 let buf: *u8 = sys_mmap(32) as *u8
19 if n == 0 {
20 fb_puts("0" as *u8)
21 return 0
22 }
23 var v: i64 = n
24 var i: i64 = 31
25 while v > 0 {
26 let q: i64 = v / 10
27 let d: i64 = v - q * 10
28 buf[i] = (48 + d) as u8
29 v = q
30 i = i - 1
31 }
32 let o: i64 = i + 1
33 let p: *u8 = buf + o
34 let len: i64 = 31 - i
35 sys_write(1, p, len)
36 return 0
37}
38
39func has_equals(s: *u8) -> i64 {
40 var i: i64 = 0
41 while s[i] != (0 as u8) {
42 if s[i] == (61 as u8) {
43 return 1
44 }
45 i = i + 1
46 }
47 return 0
48}
49
50func parse_value(s: *u8) -> i64 {
51 var result: i64 = 0
52 var i: i64 = 0
53 var found_eq: i64 = 0
54 while s[i] != (0 as u8) {
55 if s[i] == (61 as u8) {
56 found_eq = 1
57 } else {
58 if found_eq == 1 {
59 let digit: i64 = s[i] as i64
60 let digit_val: i64 = digit - 48
61 result = result * 10 + digit_val
62 }
63 }
64 i = i + 1
65 }
66 return result
67}
68
69func main(argc: i64, argv: *i64) -> i64 {
70 let data: *u8 = "k1=7;k2=21;bad;k3=14" as *u8
71 let buf: *u8 = sys_mmap(256) as *u8
72 var sum: i64 = 0
73 var bad_count: i64 = 0
74 var i: i64 = 0
75 var seg_start: i64 = 0
76 var seg_len: i64 = 0
77 while data[i] != (0 as u8) {
78 if data[i] == (59 as u8) {
79 var j: i64 = 0
80 while j < seg_len {
81 buf[j] = data[seg_start + j]
82 j = j + 1
83 }
84 buf[seg_len] = 0 as u8
85 let is_valid: i64 = has_equals(buf)
86 if is_valid == 1 {
87 let val: i64 = parse_value(buf)
88 sum = sum + val
89 } else {
90 bad_count = bad_count + 1
91 }
92 seg_start = i + 1
93 seg_len = 0
94 } else {
95 seg_len = seg_len + 1
96 }
97 i = i + 1
98 }
99 if seg_len > 0 {
100 var j: i64 = 0
101 while j < seg_len {
102 buf[j] = data[seg_start + j]
103 j = j + 1
104 }
105 buf[seg_len] = 0 as u8
106 let is_valid: i64 = has_equals(buf)
107 if is_valid == 1 {
108 let val: i64 = parse_value(buf)
109 sum = sum + val
110 } else {
111 bad_count = bad_count + 1
112 }
113 }
114 fb_puts("FBENCH-T3 sum=" as *u8)
115 fb_pdec(sum)
116 fb_puts(" bad=" as *u8)
117 fb_pdec(bad_count)
118 fb_puts("\n" as *u8)
119 sys_exit(0)
120 return 0
121}