code wiki / (root) / _self_host_simd_i32_test.nx

_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}