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}