code wiki / (root) / nx_x86_basic_test.nx

nx_x86_basic_test.nx source

↩ module page · 70 lines · 1763 B

1// nx_x86_basic_test.nx -- minimal syscall-free smoke for x86_64. 2// 3// Tests basic i64 arithmetic + control flow + the codegen patterns 4// our AI primitives rely on (loops, bitwise ops, comparisons). No 5// sys_mmap, no sys_write, no syscalls -- so it runs identically on 6// any target the x86_64 / RV64 / etc. backend supports. 7// 8// PASS criterion: main() returns 0. Any non-zero return = assertion 9// failure encoded in the return code. 10 11func _abs(x: i64) -> i64 { 12 if x < 0 { return 0 - x } 13 return x 14} 15 16func _imul(a: i64, b: i64) -> i64 { 17 return a * b 18} 19 20func main() -> i64 { 21 // ----- Arithmetic ----- 22 if _abs(5) != 5 { return 1 } 23 if _abs(0 - 5) != 5 { return 2 } 24 if _abs(0) != 0 { return 3 } 25 26 // ----- Mul ----- 27 if _imul(7, 11) != 77 { return 10 } 28 if _imul(0 - 7, 11) != (0 - 77) { return 11 } 29 if _imul(1000000, 1000000) != 1000000000000 { return 12 } 30 31 // ----- Bitwise ----- 32 if (0xFF & 0x0F) != 0x0F { return 20 } 33 if (0xF0 | 0x0F) != 0xFF { return 21 } 34 if (1 << 8) != 256 { return 22 } 35 if (0xF00 >> 4) != 0xF0 { return 23 } 36 37 // ----- Loop accumulation ----- 38 var sum: i64 = 0 39 var i: i64 = 0 40 while i < 100 { 41 sum = sum + i 42 i = i + 1 43 } 44 if sum != 4950 { return 30 } 45 46 // ----- Nested loop ----- 47 var grid_sum: i64 = 0 48 var r: i64 = 0 49 while r < 10 { 50 var c: i64 = 0 51 while c < 10 { 52 grid_sum = grid_sum + r * c 53 c = c + 1 54 } 55 r = r + 1 56 } 57 if grid_sum != 2025 { return 40 } 58 59 // ----- Compare chain ----- 60 if 5 > 4 { 61 if 3 < 7 { 62 if 10 != 11 { 63 if 9 >= 9 { 64 return 0 65 } 66 } 67 } 68 } 69 return 99 70}