_self_host_simd_i32_test.nx source
↩ module page · 46 lines · 1854 B
1// _self_host_simd_i32_test.nx -- i32x8 set: 5 ops verified.
2//
3// Refactored 2026-05-17 to current parse.c SIMD intrinsic API:
4// __simd_vbroadcast_i32_x8(scalar) -> vec
5// __simd_vadd_i32_x8(a_vec, b_vec) -> vec
6// __simd_vsub_i32_x8(a_vec, b_vec) -> vec
7// __simd_vmul_i32_x8(a_vec, b_vec) -> vec
8// __simd_vstore_i32_x8(vec, ptr) -> 0 (writes 32 bytes)
9// __simd_vreduce_sum_i32_x8(vec) -> i64 sum across lanes
10
11import "nx_syscalls.nx"
12
13func main() -> i64 {
14 // Test 1: vbroadcast(7) -> 8 lanes of 7. vreduce_sum = 8*7 = 56.
15 let v1: i64 = __simd_vbroadcast_i32_x8(7)
16 let s1: i64 = __simd_vreduce_sum_i32_x8(v1)
17 if s1 != 56 { return 1 }
18
19 // Test 2: vbroadcast(-100000) -> sum = 8*(-100000) = -800000.
20 let v2: i64 = __simd_vbroadcast_i32_x8(0 - 100000)
21 let s2: i64 = __simd_vreduce_sum_i32_x8(v2)
22 if s2 != 0 - 800000 { return 2 }
23
24 // Test 3: vadd. a=[100]*8 + b=[50]*8 -> out=[150]*8. sum = 1200.
25 let v3a: i64 = __simd_vbroadcast_i32_x8(100)
26 let v3b: i64 = __simd_vbroadcast_i32_x8(50)
27 let v3: i64 = __simd_vadd_i32_x8(v3a, v3b)
28 let s3: i64 = __simd_vreduce_sum_i32_x8(v3)
29 if s3 != 1200 { return 3 }
30
31 // Test 4: vsub. a=[1000000]*8 - b=[999000]*8 = [1000]*8. sum = 8000.
32 let v4a: i64 = __simd_vbroadcast_i32_x8(1000000)
33 let v4b: i64 = __simd_vbroadcast_i32_x8(999000)
34 let v4: i64 = __simd_vsub_i32_x8(v4a, v4b)
35 let s4: i64 = __simd_vreduce_sum_i32_x8(v4)
36 if s4 != 8000 { return 4 }
37
38 // Test 5: vmul. a=[1000]*8 * b=[1000]*8 = [1000000]*8. sum = 8000000.
39 let v5a: i64 = __simd_vbroadcast_i32_x8(1000)
40 let v5b: i64 = __simd_vbroadcast_i32_x8(1000)
41 let v5: i64 = __simd_vmul_i32_x8(v5a, v5b)
42 let s5: i64 = __simd_vreduce_sum_i32_x8(v5)
43 if s5 != 8000000 { return 5 }
44
45 return 0
46}