code wiki / (root) / nx_fbench_t2b.nx

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}