code wiki / (root) / nx_fbench_t2f.nx

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}