code wiki / _hdl_build / nx_math_gate_demo.nx
nx_math_gate_demo.nx source
↩ module page · 108 lines · 4240 B
1// nx_math_gate_demo.nx -- the TEAM authoring the ATAN live-oracle ULP gate from
2// DATA (no Claude gate logic). Edges + bands are the data rows; helpers are
3// the emitter's proven templates. Emits _f64_atan_gate_emitted.nx.
4import "nx_math_gate_emit.nx"
5import "nx_syscalls.nx"
6const K_MAGIC_1026: i64 = 1026
7const K_MAGIC_1033: i64 = 1033
8
9func mgd_w(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
10
11func main() -> i64 {
12 let strs: *i64 = sys_mmap(8 * 16) as *i64
13 strs[0] = "runtime/_hdl_build/_f64_atan_gate_emitted.nx" as *u8 as i64
14 strs[1] = "ATAN" as *u8 as i64
15 strs[2] = "nx_f64_atan" as *u8 as i64
16 strs[3] = "bf_atan_f64" as *u8 as i64
17 strs[4] = "nx_bigfloat120.nx" as *u8 as i64
18 strs[5] = "nx_bigfloat120_div.nx" as *u8 as i64
19 strs[6] = "nx_bigfloat120_trig.nx" as *u8 as i64
20 strs[7] = "nx_bigfloat120_atan.nx" as *u8 as i64
21 strs[8] = "_pe_f64atan.nx" as *u8 as i64
22 let nums: *i64 = sys_mmap(8 * 64) as *i64
23 nums[0] = 5 // imports
24 nums[1] = 16180339887498948482 // seed
25 nums[2] = 300 // banded points
26 nums[3] = 1 // random signs
27 nums[4] = 22 // edges
28 nums[5] = 0x7FF8000000000000
29 nums[6] = 0x7FF0000000000000
30 nums[7] = 0xFFF0000000000000
31 nums[8] = 0
32 nums[9] = 1 << 63
33 nums[10] = 1
34 nums[11] = 0x000FFFFFFFFFFFFF
35 nums[12] = 0x0010000000000000
36 nums[13] = 0x7FEFFFFFFFFFFFFF
37 nums[14] = 0x3FF0000000000000
38 nums[15] = 0xBFF0000000000000
39 nums[16] = 0x3FEFFFFFFFFFFFFF
40 nums[17] = 0x3FF0000000000001
41 nums[18] = 0x4004800000000000
42 nums[19] = 0x40047FFFFFFFFFFF
43 nums[20] = 0x4004800000000001
44 nums[21] = 0x3FC0000000000000
45 nums[22] = 0x3FB0000000000000
46 nums[23] = 0x3FD8000000000000
47 nums[24] = 0x4000000000000000
48 nums[25] = 0xC003000000000000
49 nums[26] = 0x3E50000000000000
50 nums[27] = 1021; nums[28] = 3 // bands: seam region
51 nums[29] = 1015; nums[30] = 15 // 2^-8 .. 2^8
52 nums[31] = 960; nums[32] = 63 // small
53 nums[33] = K_MAGIC_1026; nums[34] = 511 // fold path, large
54 let a: i64 = mge_author(strs, nums)
55 // ---- TAN gate from data (same emitter, second data block) ----
56 let strs2: *i64 = sys_mmap(8 * 16) as *i64
57 strs2[0] = "runtime/_hdl_build/_f64_tan_gate_emitted.nx" as *u8 as i64
58 strs2[1] = "TAN" as *u8 as i64
59 strs2[2] = "nx_f64_tan" as *u8 as i64
60 strs2[3] = "bf_tan_f64" as *u8 as i64
61 strs2[4] = "nx_bigfloat120.nx" as *u8 as i64
62 strs2[5] = "nx_bigfloat120_div.nx" as *u8 as i64
63 strs2[6] = "nx_bigfloat120_trig.nx" as *u8 as i64
64 strs2[7] = "nx_bigfloat120_tan.nx" as *u8 as i64
65 strs2[8] = "_pe_f64tan.nx" as *u8 as i64
66 let nums2: *i64 = sys_mmap(8 * 64) as *i64
67 nums2[0] = 5
68 nums2[1] = 11235813213455891442
69 nums2[2] = 320
70 nums2[3] = 1
71 nums2[4] = 22
72 nums2[5] = 0x7FF8000000000000
73 nums2[6] = 0x7FF0000000000000
74 nums2[7] = 0
75 nums2[8] = 1 << 63
76 nums2[9] = 1
77 nums2[10] = 0x4140000000000000
78 nums2[11] = 0x3FF921FB54442D18
79 nums2[12] = 0x3FF921FB54442D19
80 nums2[13] = 0x3FF921FB54442D17
81 nums2[14] = 0x4012D97C7F3321D2
82 nums2[15] = 0x401F6A7A2955385E
83 nums2[16] = 0x400921FB54442D18
84 nums2[17] = 0x401921FB54442D18
85 nums2[18] = 0x3FE921FB54442D18
86 nums2[19] = 0xBFE921FB54442D18
87 nums2[20] = 0x3FC0000000000000
88 nums2[21] = 0x3FB0000000000000
89 nums2[22] = 0x3FE8000000000000
90 nums2[23] = 0x3FF0000000000000
91 nums2[24] = 0x4000000000000000
92 nums2[25] = 0x3E50000000000000
93 nums2[26] = 0x40F869F000000000
94 nums2[27] = 1015; nums2[28] = 7
95 nums2[29] = 1023; nums2[30] = 15
96 nums2[31] = 950; nums2[32] = 63
97 nums2[33] = K_MAGIC_1033; nums2[34] = 7
98 let b: i64 = mge_author(strs2, nums2)
99 if a == 1 {
100 if b == 1 {
101 mgd_w("TEAM AUTHORED GATES: _f64_atan_gate_emitted + _f64_tan_gate_emitted (MATH_GATE, data-spec) -- Engineer verify next\n" as *u8)
102 sys_exit(0)
103 }
104 }
105 mgd_w("author failed\n" as *u8)
106 sys_exit(1)
107 return 1
108}