code wiki / (root) / nx_fbench_t3b.nx

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}