nmarshall commited on
Commit
f3ff093
·
1 Parent(s): 1c08bd8

qvm: vector angle conversion

Browse files
docs/ASSET_PIPELINE_TODO.md CHANGED
@@ -658,3 +658,6 @@ Research progress: RE-659 [report](research/QVM_HISTORY_CALLERS.md); remaining n
658
 
659
 
660
  Research progress: RE-660 [report](research/QVM_POSE_CONTROLLERS.md); remaining native/content/runtime/platform scope stays open.
 
 
 
 
658
 
659
 
660
  Research progress: RE-660 [report](research/QVM_POSE_CONTROLLERS.md); remaining native/content/runtime/platform scope stays open.
661
+
662
+
663
+ Research progress: RE-661 [report](research/QVM_VECTOR_ANGLES.md); remaining native/content/runtime/platform scope stays open.
docs/FINDINGS.md CHANGED
@@ -1004,3 +1004,6 @@ Bounded qagame paths recover bomb-plant/inactivity correction requests, direct f
1004
 
1005
 
1006
  **RE-660 — Pose prefix with both actual swing controllers:** 32254 executes two33391 calls through caller-owned angle/flag pointers, then reloads both changed angles before animation branching. [Evidence](research/QVM_POSE_CONTROLLERS.md).
 
 
 
 
1004
 
1005
 
1006
  **RE-660 — Pose prefix with both actual swing controllers:** 32254 executes two33391 calls through caller-owned angle/flag pointers, then reloads both changed angles before animation branching. [Evidence](research/QVM_POSE_CONTROLLERS.md).
1007
+
1008
+
1009
+ **RE-661 — Complete vector-to-angle helper and alias behavior:** 62944 converts vectors through explicit quadrant/vertical branches and finite atan2/sqrt responses; the zero vector yields pitch−270 and yaw0. [Evidence](research/QVM_VECTOR_ANGLES.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -981,3 +981,6 @@ Research progress: RE-659 [report](research/QVM_HISTORY_CALLERS.md); remaining n
981
 
982
 
983
  Research progress: RE-660 [report](research/QVM_POSE_CONTROLLERS.md); remaining native/content/runtime/platform scope stays open.
 
 
 
 
981
 
982
 
983
  Research progress: RE-660 [report](research/QVM_POSE_CONTROLLERS.md); remaining native/content/runtime/platform scope stays open.
984
+
985
+
986
+ Research progress: RE-661 [report](research/QVM_VECTOR_ANGLES.md); remaining native/content/runtime/platform scope stays open.
docs/RESEARCH_LEDGER.md CHANGED
@@ -962,3 +962,8 @@ One direct append caller156173 and three direct reset callers174399/203011/21963
962
  ## 2026-10-20 — RE-660 Pose prefix with both actual swing controllers (separate task commit)
963
 
964
  32254 executes two33391 calls through caller-owned angle/flag pointers, then reloads both changed angles before animation branching. 36 fixtures independently compose float32 controllers, flag masks, pointer mutation, time forwarding and caller reloads. Full suite: 1105 tests pass. Report regenerates byte-identically (155837 bytes). Storage/filter, links and whitespace checks pass. No assets/Rust runtime/shared VM evaluator changed; native/reference/legal/full platform scope remains open.
 
 
 
 
 
 
962
  ## 2026-10-20 — RE-660 Pose prefix with both actual swing controllers (separate task commit)
963
 
964
  32254 executes two33391 calls through caller-owned angle/flag pointers, then reloads both changed angles before animation branching. 36 fixtures independently compose float32 controllers, flag masks, pointer mutation, time forwarding and caller reloads. Full suite: 1105 tests pass. Report regenerates byte-identically (155837 bytes). Storage/filter, links and whitespace checks pass. No assets/Rust runtime/shared VM evaluator changed; native/reference/legal/full platform scope remains open.
965
+
966
+
967
+ ## 2026-10-20 — RE-661 Complete vector-to-angle helper and alias behavior (separate task commit)
968
+
969
+ 62944 converts vectors through explicit quadrant/vertical branches and finite atan2/sqrt responses; the zero vector yields pitch−270 and yaw0. 24 axis/quadrant/zero/general fixtures check independent source-order float32 outputs, exact input/output aliasing and reached native call order. Full suite: 1109 tests pass. Report regenerates byte-identically (42673 bytes). Storage/filter, links and whitespace checks pass. No assets/Rust runtime/shared VM evaluator changed; native/reference/legal/full platform scope remains open.
docs/REVERSE_ENGINEERING_TODO.md CHANGED
@@ -1024,3 +1024,6 @@ Purpose: turn the supplied installation into an evidence-backed specification of
1024
 
1025
 
1026
  - [x] RE-660 Pose prefix with both actual swing controllers ([report](research/QVM_POSE_CONTROLLERS.md)).
 
 
 
 
1024
 
1025
 
1026
  - [x] RE-660 Pose prefix with both actual swing controllers ([report](research/QVM_POSE_CONTROLLERS.md)).
1027
+
1028
+
1029
+ - [x] RE-661 Complete vector-to-angle helper and alias behavior ([report](research/QVM_VECTOR_ANGLES.md)).
docs/research/QVM_VECTOR_ANGLES.md ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # Complete vector-to-angle helper and alias behavior
2
+
3
+ RE-661. Reproduce with `python3 scripts/analyze_qvm_vector_angles.py`; check with `python3 scripts/test_qvm_vector_angles.py`. The [machine report](qvm-vector-angles.json) retains source identity and bounded fixtures.
4
+
5
+ Complete62945–63119 writes negative pitch, yaw and zero roll. Zero horizontal input bypasses all native math and selects pitch90 for positive z, otherwise270; thus the zero vector writes−270, not a normalized zero angle. General input uses yaw atan2(y,x), a rounded horizontal length and pitch atan2(z,length), with single positive-turn corrections before negating pitch. Exact input/output alias works because the source completes input reads before publication. Finite math.atan2/sqrt are supplied native models and do not establish original library bit parity; partial overlaps and nonfinite domains remain open.
6
+
7
+ No original executable/full QVM/native collision/physics/rendering executes. Native responses and legal input domains are supplied or unverified where stated; full runtime/macOS/Linux Rust/Bevy/Solari gameplay remains open.
docs/research/README.md CHANGED
@@ -582,3 +582,6 @@ The extension collector adds five focused tests for native tail calls, command-r
582
 
583
 
584
  [RE-660: Pose prefix with both actual swing controllers](QVM_POSE_CONTROLLERS.md). Reproduce with `python3 scripts/analyze_qvm_pose_controllers.py`; check with `python3 scripts/test_qvm_pose_controllers.py`.
 
 
 
 
582
 
583
 
584
  [RE-660: Pose prefix with both actual swing controllers](QVM_POSE_CONTROLLERS.md). Reproduce with `python3 scripts/analyze_qvm_pose_controllers.py`; check with `python3 scripts/test_qvm_pose_controllers.py`.
585
+
586
+
587
+ [RE-661: Complete vector-to-angle helper and alias behavior](QVM_VECTOR_ANGLES.md). Reproduce with `python3 scripts/analyze_qvm_vector_angles.py`; check with `python3 scripts/test_qvm_vector_angles.py`.
docs/research/qvm-vector-angles.json ADDED
@@ -0,0 +1,1869 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "limits": "Actual62945\u201363119, finite math.atan2/sqrt responses rounded tofloat32. Native library bit parity, partial overlaps and live domain remain unverified. Zero input follows the source vertical fallback.",
3
+ "probes": [
4
+ {
5
+ "arguments": {
6
+ "8": 2014318592,
7
+ "12": 2014318608
8
+ },
9
+ "execution": {
10
+ "byte_writes": [],
11
+ "calls": [],
12
+ "children": [],
13
+ "return": null,
14
+ "trace": null,
15
+ "trace_length": 50,
16
+ "trace_sha256": "9bde076561def9cf7f5deb04f343c9c71d774f4488122a2ba2154b3b0655160b"
17
+ },
18
+ "input": [
19
+ 0,
20
+ 0,
21
+ 0
22
+ ],
23
+ "output": [
24
+ 3280404480,
25
+ 0,
26
+ 0
27
+ ]
28
+ },
29
+ {
30
+ "arguments": {
31
+ "8": 2014318592,
32
+ "12": 2014318592
33
+ },
34
+ "execution": {
35
+ "byte_writes": [],
36
+ "calls": [],
37
+ "children": [],
38
+ "return": null,
39
+ "trace": null,
40
+ "trace_length": 50,
41
+ "trace_sha256": "9bde076561def9cf7f5deb04f343c9c71d774f4488122a2ba2154b3b0655160b"
42
+ },
43
+ "input": [
44
+ 0,
45
+ 0,
46
+ 0
47
+ ],
48
+ "output": [
49
+ 3280404480,
50
+ 0,
51
+ 0
52
+ ]
53
+ },
54
+ {
55
+ "arguments": {
56
+ "8": 2014318592,
57
+ "12": 2014318608
58
+ },
59
+ "execution": {
60
+ "byte_writes": [],
61
+ "calls": [],
62
+ "children": [],
63
+ "return": null,
64
+ "trace": null,
65
+ "trace_length": 50,
66
+ "trace_sha256": "1f4a7358ee639a796640d99da2629c9eba18d7de20a056e656ba298a540f1e73"
67
+ },
68
+ "input": [
69
+ 0,
70
+ 0,
71
+ 1065353216
72
+ ],
73
+ "output": [
74
+ 3266576384,
75
+ 0,
76
+ 0
77
+ ]
78
+ },
79
+ {
80
+ "arguments": {
81
+ "8": 2014318592,
82
+ "12": 2014318592
83
+ },
84
+ "execution": {
85
+ "byte_writes": [],
86
+ "calls": [],
87
+ "children": [],
88
+ "return": null,
89
+ "trace": null,
90
+ "trace_length": 50,
91
+ "trace_sha256": "1f4a7358ee639a796640d99da2629c9eba18d7de20a056e656ba298a540f1e73"
92
+ },
93
+ "input": [
94
+ 0,
95
+ 0,
96
+ 1065353216
97
+ ],
98
+ "output": [
99
+ 3266576384,
100
+ 0,
101
+ 0
102
+ ]
103
+ },
104
+ {
105
+ "arguments": {
106
+ "8": 2014318592,
107
+ "12": 2014318608
108
+ },
109
+ "execution": {
110
+ "byte_writes": [],
111
+ "calls": [],
112
+ "children": [],
113
+ "return": null,
114
+ "trace": null,
115
+ "trace_length": 50,
116
+ "trace_sha256": "9bde076561def9cf7f5deb04f343c9c71d774f4488122a2ba2154b3b0655160b"
117
+ },
118
+ "input": [
119
+ 0,
120
+ 0,
121
+ 3212836864
122
+ ],
123
+ "output": [
124
+ 3280404480,
125
+ 0,
126
+ 0
127
+ ]
128
+ },
129
+ {
130
+ "arguments": {
131
+ "8": 2014318592,
132
+ "12": 2014318592
133
+ },
134
+ "execution": {
135
+ "byte_writes": [],
136
+ "calls": [],
137
+ "children": [],
138
+ "return": null,
139
+ "trace": null,
140
+ "trace_length": 50,
141
+ "trace_sha256": "9bde076561def9cf7f5deb04f343c9c71d774f4488122a2ba2154b3b0655160b"
142
+ },
143
+ "input": [
144
+ 0,
145
+ 0,
146
+ 3212836864
147
+ ],
148
+ "output": [
149
+ 3280404480,
150
+ 0,
151
+ 0
152
+ ]
153
+ },
154
+ {
155
+ "arguments": {
156
+ "8": 2014318592,
157
+ "12": 2014318608
158
+ },
159
+ "execution": {
160
+ "byte_writes": [],
161
+ "calls": [
162
+ {
163
+ "args": {
164
+ "8": 0,
165
+ "12": 1065353216
166
+ },
167
+ "instruction": 63002,
168
+ "target": -106
169
+ },
170
+ {
171
+ "args": {
172
+ "8": 1065353216
173
+ },
174
+ "instruction": 63066,
175
+ "target": -107
176
+ },
177
+ {
178
+ "args": {
179
+ "8": 0,
180
+ "12": 1065353216
181
+ },
182
+ "instruction": 63083,
183
+ "target": -106
184
+ }
185
+ ],
186
+ "children": [
187
+ {
188
+ "call": {
189
+ "args": {
190
+ "8": 0,
191
+ "12": 1065353216
192
+ },
193
+ "instruction": 63002,
194
+ "target": -106
195
+ },
196
+ "effect": {
197
+ "modeled_atan2": {
198
+ "8": 0,
199
+ "12": 1065353216
200
+ },
201
+ "original_native_executed": false,
202
+ "result": 0
203
+ }
204
+ },
205
+ {
206
+ "call": {
207
+ "args": {
208
+ "8": 1065353216
209
+ },
210
+ "instruction": 63066,
211
+ "target": -107
212
+ },
213
+ "effect": {
214
+ "input": 1065353216,
215
+ "root": 1065353216
216
+ }
217
+ },
218
+ {
219
+ "call": {
220
+ "args": {
221
+ "8": 0,
222
+ "12": 1065353216
223
+ },
224
+ "instruction": 63083,
225
+ "target": -106
226
+ },
227
+ "effect": {
228
+ "modeled_atan2": {
229
+ "8": 0,
230
+ "12": 1065353216
231
+ },
232
+ "original_native_executed": false,
233
+ "result": 0
234
+ }
235
+ }
236
+ ],
237
+ "return": null,
238
+ "trace": null,
239
+ "trace_length": 128,
240
+ "trace_sha256": "6b9b4949ad7f4aea3a4bfe284267c5980a010b55cafeef43c73e2702560c5f34"
241
+ },
242
+ "input": [
243
+ 1065353216,
244
+ 0,
245
+ 0
246
+ ],
247
+ "output": [
248
+ 2147483648,
249
+ 0,
250
+ 0
251
+ ]
252
+ },
253
+ {
254
+ "arguments": {
255
+ "8": 2014318592,
256
+ "12": 2014318592
257
+ },
258
+ "execution": {
259
+ "byte_writes": [],
260
+ "calls": [
261
+ {
262
+ "args": {
263
+ "8": 0,
264
+ "12": 1065353216
265
+ },
266
+ "instruction": 63002,
267
+ "target": -106
268
+ },
269
+ {
270
+ "args": {
271
+ "8": 1065353216
272
+ },
273
+ "instruction": 63066,
274
+ "target": -107
275
+ },
276
+ {
277
+ "args": {
278
+ "8": 0,
279
+ "12": 1065353216
280
+ },
281
+ "instruction": 63083,
282
+ "target": -106
283
+ }
284
+ ],
285
+ "children": [
286
+ {
287
+ "call": {
288
+ "args": {
289
+ "8": 0,
290
+ "12": 1065353216
291
+ },
292
+ "instruction": 63002,
293
+ "target": -106
294
+ },
295
+ "effect": {
296
+ "modeled_atan2": {
297
+ "8": 0,
298
+ "12": 1065353216
299
+ },
300
+ "original_native_executed": false,
301
+ "result": 0
302
+ }
303
+ },
304
+ {
305
+ "call": {
306
+ "args": {
307
+ "8": 1065353216
308
+ },
309
+ "instruction": 63066,
310
+ "target": -107
311
+ },
312
+ "effect": {
313
+ "input": 1065353216,
314
+ "root": 1065353216
315
+ }
316
+ },
317
+ {
318
+ "call": {
319
+ "args": {
320
+ "8": 0,
321
+ "12": 1065353216
322
+ },
323
+ "instruction": 63083,
324
+ "target": -106
325
+ },
326
+ "effect": {
327
+ "modeled_atan2": {
328
+ "8": 0,
329
+ "12": 1065353216
330
+ },
331
+ "original_native_executed": false,
332
+ "result": 0
333
+ }
334
+ }
335
+ ],
336
+ "return": null,
337
+ "trace": null,
338
+ "trace_length": 128,
339
+ "trace_sha256": "6b9b4949ad7f4aea3a4bfe284267c5980a010b55cafeef43c73e2702560c5f34"
340
+ },
341
+ "input": [
342
+ 1065353216,
343
+ 0,
344
+ 0
345
+ ],
346
+ "output": [
347
+ 2147483648,
348
+ 0,
349
+ 0
350
+ ]
351
+ },
352
+ {
353
+ "arguments": {
354
+ "8": 2014318592,
355
+ "12": 2014318608
356
+ },
357
+ "execution": {
358
+ "byte_writes": [],
359
+ "calls": [
360
+ {
361
+ "args": {
362
+ "8": 0,
363
+ "12": 3212836864
364
+ },
365
+ "instruction": 63002,
366
+ "target": -106
367
+ },
368
+ {
369
+ "args": {
370
+ "8": 1065353216
371
+ },
372
+ "instruction": 63066,
373
+ "target": -107
374
+ },
375
+ {
376
+ "args": {
377
+ "8": 0,
378
+ "12": 1065353216
379
+ },
380
+ "instruction": 63083,
381
+ "target": -106
382
+ }
383
+ ],
384
+ "children": [
385
+ {
386
+ "call": {
387
+ "args": {
388
+ "8": 0,
389
+ "12": 3212836864
390
+ },
391
+ "instruction": 63002,
392
+ "target": -106
393
+ },
394
+ "effect": {
395
+ "modeled_atan2": {
396
+ "8": 0,
397
+ "12": 3212836864
398
+ },
399
+ "original_native_executed": false,
400
+ "result": 1078530011
401
+ }
402
+ },
403
+ {
404
+ "call": {
405
+ "args": {
406
+ "8": 1065353216
407
+ },
408
+ "instruction": 63066,
409
+ "target": -107
410
+ },
411
+ "effect": {
412
+ "input": 1065353216,
413
+ "root": 1065353216
414
+ }
415
+ },
416
+ {
417
+ "call": {
418
+ "args": {
419
+ "8": 0,
420
+ "12": 1065353216
421
+ },
422
+ "instruction": 63083,
423
+ "target": -106
424
+ },
425
+ "effect": {
426
+ "modeled_atan2": {
427
+ "8": 0,
428
+ "12": 1065353216
429
+ },
430
+ "original_native_executed": false,
431
+ "result": 0
432
+ }
433
+ }
434
+ ],
435
+ "return": null,
436
+ "trace": null,
437
+ "trace_length": 128,
438
+ "trace_sha256": "6b9b4949ad7f4aea3a4bfe284267c5980a010b55cafeef43c73e2702560c5f34"
439
+ },
440
+ "input": [
441
+ 3212836864,
442
+ 0,
443
+ 0
444
+ ],
445
+ "output": [
446
+ 2147483648,
447
+ 1127481344,
448
+ 0
449
+ ]
450
+ },
451
+ {
452
+ "arguments": {
453
+ "8": 2014318592,
454
+ "12": 2014318592
455
+ },
456
+ "execution": {
457
+ "byte_writes": [],
458
+ "calls": [
459
+ {
460
+ "args": {
461
+ "8": 0,
462
+ "12": 3212836864
463
+ },
464
+ "instruction": 63002,
465
+ "target": -106
466
+ },
467
+ {
468
+ "args": {
469
+ "8": 1065353216
470
+ },
471
+ "instruction": 63066,
472
+ "target": -107
473
+ },
474
+ {
475
+ "args": {
476
+ "8": 0,
477
+ "12": 1065353216
478
+ },
479
+ "instruction": 63083,
480
+ "target": -106
481
+ }
482
+ ],
483
+ "children": [
484
+ {
485
+ "call": {
486
+ "args": {
487
+ "8": 0,
488
+ "12": 3212836864
489
+ },
490
+ "instruction": 63002,
491
+ "target": -106
492
+ },
493
+ "effect": {
494
+ "modeled_atan2": {
495
+ "8": 0,
496
+ "12": 3212836864
497
+ },
498
+ "original_native_executed": false,
499
+ "result": 1078530011
500
+ }
501
+ },
502
+ {
503
+ "call": {
504
+ "args": {
505
+ "8": 1065353216
506
+ },
507
+ "instruction": 63066,
508
+ "target": -107
509
+ },
510
+ "effect": {
511
+ "input": 1065353216,
512
+ "root": 1065353216
513
+ }
514
+ },
515
+ {
516
+ "call": {
517
+ "args": {
518
+ "8": 0,
519
+ "12": 1065353216
520
+ },
521
+ "instruction": 63083,
522
+ "target": -106
523
+ },
524
+ "effect": {
525
+ "modeled_atan2": {
526
+ "8": 0,
527
+ "12": 1065353216
528
+ },
529
+ "original_native_executed": false,
530
+ "result": 0
531
+ }
532
+ }
533
+ ],
534
+ "return": null,
535
+ "trace": null,
536
+ "trace_length": 128,
537
+ "trace_sha256": "6b9b4949ad7f4aea3a4bfe284267c5980a010b55cafeef43c73e2702560c5f34"
538
+ },
539
+ "input": [
540
+ 3212836864,
541
+ 0,
542
+ 0
543
+ ],
544
+ "output": [
545
+ 2147483648,
546
+ 1127481344,
547
+ 0
548
+ ]
549
+ },
550
+ {
551
+ "arguments": {
552
+ "8": 2014318592,
553
+ "12": 2014318608
554
+ },
555
+ "execution": {
556
+ "byte_writes": [],
557
+ "calls": [
558
+ {
559
+ "args": {
560
+ "8": 1065353216
561
+ },
562
+ "instruction": 63066,
563
+ "target": -107
564
+ },
565
+ {
566
+ "args": {
567
+ "8": 0,
568
+ "12": 1065353216
569
+ },
570
+ "instruction": 63083,
571
+ "target": -106
572
+ }
573
+ ],
574
+ "children": [
575
+ {
576
+ "call": {
577
+ "args": {
578
+ "8": 1065353216
579
+ },
580
+ "instruction": 63066,
581
+ "target": -107
582
+ },
583
+ "effect": {
584
+ "input": 1065353216,
585
+ "root": 1065353216
586
+ }
587
+ },
588
+ {
589
+ "call": {
590
+ "args": {
591
+ "8": 0,
592
+ "12": 1065353216
593
+ },
594
+ "instruction": 63083,
595
+ "target": -106
596
+ },
597
+ "effect": {
598
+ "modeled_atan2": {
599
+ "8": 0,
600
+ "12": 1065353216
601
+ },
602
+ "original_native_executed": false,
603
+ "result": 0
604
+ }
605
+ }
606
+ ],
607
+ "return": null,
608
+ "trace": null,
609
+ "trace_length": 109,
610
+ "trace_sha256": "680155eed18edbb90da902f29e2b467d36ea82e02312c01a4793b6d0b2e4b1d4"
611
+ },
612
+ "input": [
613
+ 0,
614
+ 1065353216,
615
+ 0
616
+ ],
617
+ "output": [
618
+ 2147483648,
619
+ 1119092736,
620
+ 0
621
+ ]
622
+ },
623
+ {
624
+ "arguments": {
625
+ "8": 2014318592,
626
+ "12": 2014318592
627
+ },
628
+ "execution": {
629
+ "byte_writes": [],
630
+ "calls": [
631
+ {
632
+ "args": {
633
+ "8": 1065353216
634
+ },
635
+ "instruction": 63066,
636
+ "target": -107
637
+ },
638
+ {
639
+ "args": {
640
+ "8": 0,
641
+ "12": 1065353216
642
+ },
643
+ "instruction": 63083,
644
+ "target": -106
645
+ }
646
+ ],
647
+ "children": [
648
+ {
649
+ "call": {
650
+ "args": {
651
+ "8": 1065353216
652
+ },
653
+ "instruction": 63066,
654
+ "target": -107
655
+ },
656
+ "effect": {
657
+ "input": 1065353216,
658
+ "root": 1065353216
659
+ }
660
+ },
661
+ {
662
+ "call": {
663
+ "args": {
664
+ "8": 0,
665
+ "12": 1065353216
666
+ },
667
+ "instruction": 63083,
668
+ "target": -106
669
+ },
670
+ "effect": {
671
+ "modeled_atan2": {
672
+ "8": 0,
673
+ "12": 1065353216
674
+ },
675
+ "original_native_executed": false,
676
+ "result": 0
677
+ }
678
+ }
679
+ ],
680
+ "return": null,
681
+ "trace": null,
682
+ "trace_length": 109,
683
+ "trace_sha256": "680155eed18edbb90da902f29e2b467d36ea82e02312c01a4793b6d0b2e4b1d4"
684
+ },
685
+ "input": [
686
+ 0,
687
+ 1065353216,
688
+ 0
689
+ ],
690
+ "output": [
691
+ 2147483648,
692
+ 1119092736,
693
+ 0
694
+ ]
695
+ },
696
+ {
697
+ "arguments": {
698
+ "8": 2014318592,
699
+ "12": 2014318608
700
+ },
701
+ "execution": {
702
+ "byte_writes": [],
703
+ "calls": [
704
+ {
705
+ "args": {
706
+ "8": 1065353216
707
+ },
708
+ "instruction": 63066,
709
+ "target": -107
710
+ },
711
+ {
712
+ "args": {
713
+ "8": 0,
714
+ "12": 1065353216
715
+ },
716
+ "instruction": 63083,
717
+ "target": -106
718
+ }
719
+ ],
720
+ "children": [
721
+ {
722
+ "call": {
723
+ "args": {
724
+ "8": 1065353216
725
+ },
726
+ "instruction": 63066,
727
+ "target": -107
728
+ },
729
+ "effect": {
730
+ "input": 1065353216,
731
+ "root": 1065353216
732
+ }
733
+ },
734
+ {
735
+ "call": {
736
+ "args": {
737
+ "8": 0,
738
+ "12": 1065353216
739
+ },
740
+ "instruction": 63083,
741
+ "target": -106
742
+ },
743
+ "effect": {
744
+ "modeled_atan2": {
745
+ "8": 0,
746
+ "12": 1065353216
747
+ },
748
+ "original_native_executed": false,
749
+ "result": 0
750
+ }
751
+ }
752
+ ],
753
+ "return": null,
754
+ "trace": null,
755
+ "trace_length": 107,
756
+ "trace_sha256": "93fceaaa85e0a5e4f28fbd9d0d49f15f1170b3c7cd5f4d9557e3160b84f957ce"
757
+ },
758
+ "input": [
759
+ 0,
760
+ 3212836864,
761
+ 0
762
+ ],
763
+ "output": [
764
+ 2147483648,
765
+ 1132920832,
766
+ 0
767
+ ]
768
+ },
769
+ {
770
+ "arguments": {
771
+ "8": 2014318592,
772
+ "12": 2014318592
773
+ },
774
+ "execution": {
775
+ "byte_writes": [],
776
+ "calls": [
777
+ {
778
+ "args": {
779
+ "8": 1065353216
780
+ },
781
+ "instruction": 63066,
782
+ "target": -107
783
+ },
784
+ {
785
+ "args": {
786
+ "8": 0,
787
+ "12": 1065353216
788
+ },
789
+ "instruction": 63083,
790
+ "target": -106
791
+ }
792
+ ],
793
+ "children": [
794
+ {
795
+ "call": {
796
+ "args": {
797
+ "8": 1065353216
798
+ },
799
+ "instruction": 63066,
800
+ "target": -107
801
+ },
802
+ "effect": {
803
+ "input": 1065353216,
804
+ "root": 1065353216
805
+ }
806
+ },
807
+ {
808
+ "call": {
809
+ "args": {
810
+ "8": 0,
811
+ "12": 1065353216
812
+ },
813
+ "instruction": 63083,
814
+ "target": -106
815
+ },
816
+ "effect": {
817
+ "modeled_atan2": {
818
+ "8": 0,
819
+ "12": 1065353216
820
+ },
821
+ "original_native_executed": false,
822
+ "result": 0
823
+ }
824
+ }
825
+ ],
826
+ "return": null,
827
+ "trace": null,
828
+ "trace_length": 107,
829
+ "trace_sha256": "93fceaaa85e0a5e4f28fbd9d0d49f15f1170b3c7cd5f4d9557e3160b84f957ce"
830
+ },
831
+ "input": [
832
+ 0,
833
+ 3212836864,
834
+ 0
835
+ ],
836
+ "output": [
837
+ 2147483648,
838
+ 1132920832,
839
+ 0
840
+ ]
841
+ },
842
+ {
843
+ "arguments": {
844
+ "8": 2014318592,
845
+ "12": 2014318608
846
+ },
847
+ "execution": {
848
+ "byte_writes": [],
849
+ "calls": [
850
+ {
851
+ "args": {
852
+ "8": 1065353216,
853
+ "12": 1065353216
854
+ },
855
+ "instruction": 63002,
856
+ "target": -106
857
+ },
858
+ {
859
+ "args": {
860
+ "8": 1073741824
861
+ },
862
+ "instruction": 63066,
863
+ "target": -107
864
+ },
865
+ {
866
+ "args": {
867
+ "8": 1065353216,
868
+ "12": 1068827891
869
+ },
870
+ "instruction": 63083,
871
+ "target": -106
872
+ }
873
+ ],
874
+ "children": [
875
+ {
876
+ "call": {
877
+ "args": {
878
+ "8": 1065353216,
879
+ "12": 1065353216
880
+ },
881
+ "instruction": 63002,
882
+ "target": -106
883
+ },
884
+ "effect": {
885
+ "modeled_atan2": {
886
+ "8": 1065353216,
887
+ "12": 1065353216
888
+ },
889
+ "original_native_executed": false,
890
+ "result": 1061752795
891
+ }
892
+ },
893
+ {
894
+ "call": {
895
+ "args": {
896
+ "8": 1073741824
897
+ },
898
+ "instruction": 63066,
899
+ "target": -107
900
+ },
901
+ "effect": {
902
+ "input": 1073741824,
903
+ "root": 1068827891
904
+ }
905
+ },
906
+ {
907
+ "call": {
908
+ "args": {
909
+ "8": 1065353216,
910
+ "12": 1068827891
911
+ },
912
+ "instruction": 63083,
913
+ "target": -106
914
+ },
915
+ "effect": {
916
+ "modeled_atan2": {
917
+ "8": 1065353216,
918
+ "12": 1068827891
919
+ },
920
+ "original_native_executed": false,
921
+ "result": 1058902036
922
+ }
923
+ }
924
+ ],
925
+ "return": null,
926
+ "trace": null,
927
+ "trace_length": 123,
928
+ "trace_sha256": "e698a0c54e63429542fb1913a069091e4914c61a17232ba8ea9988eb5c118c77"
929
+ },
930
+ "input": [
931
+ 1065353216,
932
+ 1065353216,
933
+ 1065353216
934
+ ],
935
+ "output": [
936
+ 3255635644,
937
+ 1110704128,
938
+ 0
939
+ ]
940
+ },
941
+ {
942
+ "arguments": {
943
+ "8": 2014318592,
944
+ "12": 2014318592
945
+ },
946
+ "execution": {
947
+ "byte_writes": [],
948
+ "calls": [
949
+ {
950
+ "args": {
951
+ "8": 1065353216,
952
+ "12": 1065353216
953
+ },
954
+ "instruction": 63002,
955
+ "target": -106
956
+ },
957
+ {
958
+ "args": {
959
+ "8": 1073741824
960
+ },
961
+ "instruction": 63066,
962
+ "target": -107
963
+ },
964
+ {
965
+ "args": {
966
+ "8": 1065353216,
967
+ "12": 1068827891
968
+ },
969
+ "instruction": 63083,
970
+ "target": -106
971
+ }
972
+ ],
973
+ "children": [
974
+ {
975
+ "call": {
976
+ "args": {
977
+ "8": 1065353216,
978
+ "12": 1065353216
979
+ },
980
+ "instruction": 63002,
981
+ "target": -106
982
+ },
983
+ "effect": {
984
+ "modeled_atan2": {
985
+ "8": 1065353216,
986
+ "12": 1065353216
987
+ },
988
+ "original_native_executed": false,
989
+ "result": 1061752795
990
+ }
991
+ },
992
+ {
993
+ "call": {
994
+ "args": {
995
+ "8": 1073741824
996
+ },
997
+ "instruction": 63066,
998
+ "target": -107
999
+ },
1000
+ "effect": {
1001
+ "input": 1073741824,
1002
+ "root": 1068827891
1003
+ }
1004
+ },
1005
+ {
1006
+ "call": {
1007
+ "args": {
1008
+ "8": 1065353216,
1009
+ "12": 1068827891
1010
+ },
1011
+ "instruction": 63083,
1012
+ "target": -106
1013
+ },
1014
+ "effect": {
1015
+ "modeled_atan2": {
1016
+ "8": 1065353216,
1017
+ "12": 1068827891
1018
+ },
1019
+ "original_native_executed": false,
1020
+ "result": 1058902036
1021
+ }
1022
+ }
1023
+ ],
1024
+ "return": null,
1025
+ "trace": null,
1026
+ "trace_length": 123,
1027
+ "trace_sha256": "e698a0c54e63429542fb1913a069091e4914c61a17232ba8ea9988eb5c118c77"
1028
+ },
1029
+ "input": [
1030
+ 1065353216,
1031
+ 1065353216,
1032
+ 1065353216
1033
+ ],
1034
+ "output": [
1035
+ 3255635644,
1036
+ 1110704128,
1037
+ 0
1038
+ ]
1039
+ },
1040
+ {
1041
+ "arguments": {
1042
+ "8": 2014318592,
1043
+ "12": 2014318608
1044
+ },
1045
+ "execution": {
1046
+ "byte_writes": [],
1047
+ "calls": [
1048
+ {
1049
+ "args": {
1050
+ "8": 1065353216,
1051
+ "12": 3212836864
1052
+ },
1053
+ "instruction": 63002,
1054
+ "target": -106
1055
+ },
1056
+ {
1057
+ "args": {
1058
+ "8": 1073741824
1059
+ },
1060
+ "instruction": 63066,
1061
+ "target": -107
1062
+ },
1063
+ {
1064
+ "args": {
1065
+ "8": 3212836864,
1066
+ "12": 1068827891
1067
+ },
1068
+ "instruction": 63083,
1069
+ "target": -106
1070
+ }
1071
+ ],
1072
+ "children": [
1073
+ {
1074
+ "call": {
1075
+ "args": {
1076
+ "8": 1065353216,
1077
+ "12": 3212836864
1078
+ },
1079
+ "instruction": 63002,
1080
+ "target": -106
1081
+ },
1082
+ "effect": {
1083
+ "modeled_atan2": {
1084
+ "8": 1065353216,
1085
+ "12": 3212836864
1086
+ },
1087
+ "original_native_executed": false,
1088
+ "result": 1075235812
1089
+ }
1090
+ },
1091
+ {
1092
+ "call": {
1093
+ "args": {
1094
+ "8": 1073741824
1095
+ },
1096
+ "instruction": 63066,
1097
+ "target": -107
1098
+ },
1099
+ "effect": {
1100
+ "input": 1073741824,
1101
+ "root": 1068827891
1102
+ }
1103
+ },
1104
+ {
1105
+ "call": {
1106
+ "args": {
1107
+ "8": 3212836864,
1108
+ "12": 1068827891
1109
+ },
1110
+ "instruction": 63083,
1111
+ "target": -106
1112
+ },
1113
+ "effect": {
1114
+ "modeled_atan2": {
1115
+ "8": 3212836864,
1116
+ "12": 1068827891
1117
+ },
1118
+ "original_native_executed": false,
1119
+ "result": 3206385684
1120
+ }
1121
+ }
1122
+ ],
1123
+ "return": null,
1124
+ "trace": null,
1125
+ "trace_length": 129,
1126
+ "trace_sha256": "a853e8227dba270a8a4a0c892b820e29079a7b6fb7538e738a37f665ffbc28db"
1127
+ },
1128
+ "input": [
1129
+ 3212836864,
1130
+ 1065353216,
1131
+ 3212836864
1132
+ ],
1133
+ "output": [
1134
+ 3282198056,
1135
+ 1124532224,
1136
+ 0
1137
+ ]
1138
+ },
1139
+ {
1140
+ "arguments": {
1141
+ "8": 2014318592,
1142
+ "12": 2014318592
1143
+ },
1144
+ "execution": {
1145
+ "byte_writes": [],
1146
+ "calls": [
1147
+ {
1148
+ "args": {
1149
+ "8": 1065353216,
1150
+ "12": 3212836864
1151
+ },
1152
+ "instruction": 63002,
1153
+ "target": -106
1154
+ },
1155
+ {
1156
+ "args": {
1157
+ "8": 1073741824
1158
+ },
1159
+ "instruction": 63066,
1160
+ "target": -107
1161
+ },
1162
+ {
1163
+ "args": {
1164
+ "8": 3212836864,
1165
+ "12": 1068827891
1166
+ },
1167
+ "instruction": 63083,
1168
+ "target": -106
1169
+ }
1170
+ ],
1171
+ "children": [
1172
+ {
1173
+ "call": {
1174
+ "args": {
1175
+ "8": 1065353216,
1176
+ "12": 3212836864
1177
+ },
1178
+ "instruction": 63002,
1179
+ "target": -106
1180
+ },
1181
+ "effect": {
1182
+ "modeled_atan2": {
1183
+ "8": 1065353216,
1184
+ "12": 3212836864
1185
+ },
1186
+ "original_native_executed": false,
1187
+ "result": 1075235812
1188
+ }
1189
+ },
1190
+ {
1191
+ "call": {
1192
+ "args": {
1193
+ "8": 1073741824
1194
+ },
1195
+ "instruction": 63066,
1196
+ "target": -107
1197
+ },
1198
+ "effect": {
1199
+ "input": 1073741824,
1200
+ "root": 1068827891
1201
+ }
1202
+ },
1203
+ {
1204
+ "call": {
1205
+ "args": {
1206
+ "8": 3212836864,
1207
+ "12": 1068827891
1208
+ },
1209
+ "instruction": 63083,
1210
+ "target": -106
1211
+ },
1212
+ "effect": {
1213
+ "modeled_atan2": {
1214
+ "8": 3212836864,
1215
+ "12": 1068827891
1216
+ },
1217
+ "original_native_executed": false,
1218
+ "result": 3206385684
1219
+ }
1220
+ }
1221
+ ],
1222
+ "return": null,
1223
+ "trace": null,
1224
+ "trace_length": 129,
1225
+ "trace_sha256": "a853e8227dba270a8a4a0c892b820e29079a7b6fb7538e738a37f665ffbc28db"
1226
+ },
1227
+ "input": [
1228
+ 3212836864,
1229
+ 1065353216,
1230
+ 3212836864
1231
+ ],
1232
+ "output": [
1233
+ 3282198056,
1234
+ 1124532224,
1235
+ 0
1236
+ ]
1237
+ },
1238
+ {
1239
+ "arguments": {
1240
+ "8": 2014318592,
1241
+ "12": 2014318608
1242
+ },
1243
+ "execution": {
1244
+ "byte_writes": [],
1245
+ "calls": [
1246
+ {
1247
+ "args": {
1248
+ "8": 3212836864,
1249
+ "12": 3212836864
1250
+ },
1251
+ "instruction": 63002,
1252
+ "target": -106
1253
+ },
1254
+ {
1255
+ "args": {
1256
+ "8": 1073741824
1257
+ },
1258
+ "instruction": 63066,
1259
+ "target": -107
1260
+ },
1261
+ {
1262
+ "args": {
1263
+ "8": 1073741824,
1264
+ "12": 1068827891
1265
+ },
1266
+ "instruction": 63083,
1267
+ "target": -106
1268
+ }
1269
+ ],
1270
+ "children": [
1271
+ {
1272
+ "call": {
1273
+ "args": {
1274
+ "8": 3212836864,
1275
+ "12": 3212836864
1276
+ },
1277
+ "instruction": 63002,
1278
+ "target": -106
1279
+ },
1280
+ "effect": {
1281
+ "modeled_atan2": {
1282
+ "8": 3212836864,
1283
+ "12": 3212836864
1284
+ },
1285
+ "original_native_executed": false,
1286
+ "result": 3222719460
1287
+ }
1288
+ },
1289
+ {
1290
+ "call": {
1291
+ "args": {
1292
+ "8": 1073741824
1293
+ },
1294
+ "instruction": 63066,
1295
+ "target": -107
1296
+ },
1297
+ "effect": {
1298
+ "input": 1073741824,
1299
+ "root": 1068827891
1300
+ }
1301
+ },
1302
+ {
1303
+ "call": {
1304
+ "args": {
1305
+ "8": 1073741824,
1306
+ "12": 1068827891
1307
+ },
1308
+ "instruction": 63083,
1309
+ "target": -106
1310
+ },
1311
+ "effect": {
1312
+ "modeled_atan2": {
1313
+ "8": 1073741824,
1314
+ "12": 1068827891
1315
+ },
1316
+ "original_native_executed": false,
1317
+ "result": 1064603553
1318
+ }
1319
+ }
1320
+ ],
1321
+ "return": null,
1322
+ "trace": null,
1323
+ "trace_length": 129,
1324
+ "trace_sha256": "7bba4bda416e354950733aa6d938e9e9d59feefd18c9df0510c5922b018201da"
1325
+ },
1326
+ "input": [
1327
+ 3212836864,
1328
+ 3212836864,
1329
+ 1073741824
1330
+ ],
1331
+ "output": [
1332
+ 3260739908,
1333
+ 1130430464,
1334
+ 0
1335
+ ]
1336
+ },
1337
+ {
1338
+ "arguments": {
1339
+ "8": 2014318592,
1340
+ "12": 2014318592
1341
+ },
1342
+ "execution": {
1343
+ "byte_writes": [],
1344
+ "calls": [
1345
+ {
1346
+ "args": {
1347
+ "8": 3212836864,
1348
+ "12": 3212836864
1349
+ },
1350
+ "instruction": 63002,
1351
+ "target": -106
1352
+ },
1353
+ {
1354
+ "args": {
1355
+ "8": 1073741824
1356
+ },
1357
+ "instruction": 63066,
1358
+ "target": -107
1359
+ },
1360
+ {
1361
+ "args": {
1362
+ "8": 1073741824,
1363
+ "12": 1068827891
1364
+ },
1365
+ "instruction": 63083,
1366
+ "target": -106
1367
+ }
1368
+ ],
1369
+ "children": [
1370
+ {
1371
+ "call": {
1372
+ "args": {
1373
+ "8": 3212836864,
1374
+ "12": 3212836864
1375
+ },
1376
+ "instruction": 63002,
1377
+ "target": -106
1378
+ },
1379
+ "effect": {
1380
+ "modeled_atan2": {
1381
+ "8": 3212836864,
1382
+ "12": 3212836864
1383
+ },
1384
+ "original_native_executed": false,
1385
+ "result": 3222719460
1386
+ }
1387
+ },
1388
+ {
1389
+ "call": {
1390
+ "args": {
1391
+ "8": 1073741824
1392
+ },
1393
+ "instruction": 63066,
1394
+ "target": -107
1395
+ },
1396
+ "effect": {
1397
+ "input": 1073741824,
1398
+ "root": 1068827891
1399
+ }
1400
+ },
1401
+ {
1402
+ "call": {
1403
+ "args": {
1404
+ "8": 1073741824,
1405
+ "12": 1068827891
1406
+ },
1407
+ "instruction": 63083,
1408
+ "target": -106
1409
+ },
1410
+ "effect": {
1411
+ "modeled_atan2": {
1412
+ "8": 1073741824,
1413
+ "12": 1068827891
1414
+ },
1415
+ "original_native_executed": false,
1416
+ "result": 1064603553
1417
+ }
1418
+ }
1419
+ ],
1420
+ "return": null,
1421
+ "trace": null,
1422
+ "trace_length": 129,
1423
+ "trace_sha256": "7bba4bda416e354950733aa6d938e9e9d59feefd18c9df0510c5922b018201da"
1424
+ },
1425
+ "input": [
1426
+ 3212836864,
1427
+ 3212836864,
1428
+ 1073741824
1429
+ ],
1430
+ "output": [
1431
+ 3260739908,
1432
+ 1130430464,
1433
+ 0
1434
+ ]
1435
+ },
1436
+ {
1437
+ "arguments": {
1438
+ "8": 2014318592,
1439
+ "12": 2014318608
1440
+ },
1441
+ "execution": {
1442
+ "byte_writes": [],
1443
+ "calls": [
1444
+ {
1445
+ "args": {
1446
+ "8": 3212836864,
1447
+ "12": 1065353216
1448
+ },
1449
+ "instruction": 63002,
1450
+ "target": -106
1451
+ },
1452
+ {
1453
+ "args": {
1454
+ "8": 1073741824
1455
+ },
1456
+ "instruction": 63066,
1457
+ "target": -107
1458
+ },
1459
+ {
1460
+ "args": {
1461
+ "8": 3221225472,
1462
+ "12": 1068827891
1463
+ },
1464
+ "instruction": 63083,
1465
+ "target": -106
1466
+ }
1467
+ ],
1468
+ "children": [
1469
+ {
1470
+ "call": {
1471
+ "args": {
1472
+ "8": 3212836864,
1473
+ "12": 1065353216
1474
+ },
1475
+ "instruction": 63002,
1476
+ "target": -106
1477
+ },
1478
+ "effect": {
1479
+ "modeled_atan2": {
1480
+ "8": 3212836864,
1481
+ "12": 1065353216
1482
+ },
1483
+ "original_native_executed": false,
1484
+ "result": 3209236443
1485
+ }
1486
+ },
1487
+ {
1488
+ "call": {
1489
+ "args": {
1490
+ "8": 1073741824
1491
+ },
1492
+ "instruction": 63066,
1493
+ "target": -107
1494
+ },
1495
+ "effect": {
1496
+ "input": 1073741824,
1497
+ "root": 1068827891
1498
+ }
1499
+ },
1500
+ {
1501
+ "call": {
1502
+ "args": {
1503
+ "8": 3221225472,
1504
+ "12": 1068827891
1505
+ },
1506
+ "instruction": 63083,
1507
+ "target": -106
1508
+ },
1509
+ "effect": {
1510
+ "modeled_atan2": {
1511
+ "8": 3221225472,
1512
+ "12": 1068827891
1513
+ },
1514
+ "original_native_executed": false,
1515
+ "result": 3212087201
1516
+ }
1517
+ }
1518
+ ],
1519
+ "return": null,
1520
+ "trace": null,
1521
+ "trace_length": 135,
1522
+ "trace_sha256": "138a8d4de536e2c73f90689c0cb2d004394034b86f898451127d4181f450aae5"
1523
+ },
1524
+ "input": [
1525
+ 1065353216,
1526
+ 3212836864,
1527
+ 3221225472
1528
+ ],
1529
+ "output": [
1530
+ 3281560024,
1531
+ 1134395392,
1532
+ 0
1533
+ ]
1534
+ },
1535
+ {
1536
+ "arguments": {
1537
+ "8": 2014318592,
1538
+ "12": 2014318592
1539
+ },
1540
+ "execution": {
1541
+ "byte_writes": [],
1542
+ "calls": [
1543
+ {
1544
+ "args": {
1545
+ "8": 3212836864,
1546
+ "12": 1065353216
1547
+ },
1548
+ "instruction": 63002,
1549
+ "target": -106
1550
+ },
1551
+ {
1552
+ "args": {
1553
+ "8": 1073741824
1554
+ },
1555
+ "instruction": 63066,
1556
+ "target": -107
1557
+ },
1558
+ {
1559
+ "args": {
1560
+ "8": 3221225472,
1561
+ "12": 1068827891
1562
+ },
1563
+ "instruction": 63083,
1564
+ "target": -106
1565
+ }
1566
+ ],
1567
+ "children": [
1568
+ {
1569
+ "call": {
1570
+ "args": {
1571
+ "8": 3212836864,
1572
+ "12": 1065353216
1573
+ },
1574
+ "instruction": 63002,
1575
+ "target": -106
1576
+ },
1577
+ "effect": {
1578
+ "modeled_atan2": {
1579
+ "8": 3212836864,
1580
+ "12": 1065353216
1581
+ },
1582
+ "original_native_executed": false,
1583
+ "result": 3209236443
1584
+ }
1585
+ },
1586
+ {
1587
+ "call": {
1588
+ "args": {
1589
+ "8": 1073741824
1590
+ },
1591
+ "instruction": 63066,
1592
+ "target": -107
1593
+ },
1594
+ "effect": {
1595
+ "input": 1073741824,
1596
+ "root": 1068827891
1597
+ }
1598
+ },
1599
+ {
1600
+ "call": {
1601
+ "args": {
1602
+ "8": 3221225472,
1603
+ "12": 1068827891
1604
+ },
1605
+ "instruction": 63083,
1606
+ "target": -106
1607
+ },
1608
+ "effect": {
1609
+ "modeled_atan2": {
1610
+ "8": 3221225472,
1611
+ "12": 1068827891
1612
+ },
1613
+ "original_native_executed": false,
1614
+ "result": 3212087201
1615
+ }
1616
+ }
1617
+ ],
1618
+ "return": null,
1619
+ "trace": null,
1620
+ "trace_length": 135,
1621
+ "trace_sha256": "138a8d4de536e2c73f90689c0cb2d004394034b86f898451127d4181f450aae5"
1622
+ },
1623
+ "input": [
1624
+ 1065353216,
1625
+ 3212836864,
1626
+ 3221225472
1627
+ ],
1628
+ "output": [
1629
+ 3281560024,
1630
+ 1134395392,
1631
+ 0
1632
+ ]
1633
+ },
1634
+ {
1635
+ "arguments": {
1636
+ "8": 2014318592,
1637
+ "12": 2014318608
1638
+ },
1639
+ "execution": {
1640
+ "byte_writes": [],
1641
+ "calls": [
1642
+ {
1643
+ "args": {
1644
+ "8": 3204448256,
1645
+ "12": 1048576000
1646
+ },
1647
+ "instruction": 63002,
1648
+ "target": -106
1649
+ },
1650
+ {
1651
+ "args": {
1652
+ "8": 1050673152
1653
+ },
1654
+ "instruction": 63066,
1655
+ "target": -107
1656
+ },
1657
+ {
1658
+ "args": {
1659
+ "8": 1092616192,
1660
+ "12": 1057954749
1661
+ },
1662
+ "instruction": 63083,
1663
+ "target": -106
1664
+ }
1665
+ ],
1666
+ "children": [
1667
+ {
1668
+ "call": {
1669
+ "args": {
1670
+ "8": 3204448256,
1671
+ "12": 1048576000
1672
+ },
1673
+ "instruction": 63002,
1674
+ "target": -106
1675
+ },
1676
+ "effect": {
1677
+ "modeled_atan2": {
1678
+ "8": 3204448256,
1679
+ "12": 1048576000
1680
+ },
1681
+ "original_native_executed": false,
1682
+ "result": 3213735693
1683
+ }
1684
+ },
1685
+ {
1686
+ "call": {
1687
+ "args": {
1688
+ "8": 1050673152
1689
+ },
1690
+ "instruction": 63066,
1691
+ "target": -107
1692
+ },
1693
+ "effect": {
1694
+ "input": 1050673152,
1695
+ "root": 1057954749
1696
+ }
1697
+ },
1698
+ {
1699
+ "call": {
1700
+ "args": {
1701
+ "8": 1092616192,
1702
+ "12": 1057954749
1703
+ },
1704
+ "instruction": 63083,
1705
+ "target": -106
1706
+ },
1707
+ "effect": {
1708
+ "modeled_atan2": {
1709
+ "8": 1092616192,
1710
+ "12": 1057954749
1711
+ },
1712
+ "original_native_executed": false,
1713
+ "result": 1069672953
1714
+ }
1715
+ }
1716
+ ],
1717
+ "return": null,
1718
+ "trace": null,
1719
+ "trace_length": 129,
1720
+ "trace_sha256": "7bba4bda416e354950733aa6d938e9e9d59feefd18c9df0510c5922b018201da"
1721
+ },
1722
+ "input": [
1723
+ 1048576000,
1724
+ 3204448256,
1725
+ 1092616192
1726
+ ],
1727
+ "output": [
1728
+ 3266157006,
1729
+ 1133791316,
1730
+ 0
1731
+ ]
1732
+ },
1733
+ {
1734
+ "arguments": {
1735
+ "8": 2014318592,
1736
+ "12": 2014318592
1737
+ },
1738
+ "execution": {
1739
+ "byte_writes": [],
1740
+ "calls": [
1741
+ {
1742
+ "args": {
1743
+ "8": 3204448256,
1744
+ "12": 1048576000
1745
+ },
1746
+ "instruction": 63002,
1747
+ "target": -106
1748
+ },
1749
+ {
1750
+ "args": {
1751
+ "8": 1050673152
1752
+ },
1753
+ "instruction": 63066,
1754
+ "target": -107
1755
+ },
1756
+ {
1757
+ "args": {
1758
+ "8": 1092616192,
1759
+ "12": 1057954749
1760
+ },
1761
+ "instruction": 63083,
1762
+ "target": -106
1763
+ }
1764
+ ],
1765
+ "children": [
1766
+ {
1767
+ "call": {
1768
+ "args": {
1769
+ "8": 3204448256,
1770
+ "12": 1048576000
1771
+ },
1772
+ "instruction": 63002,
1773
+ "target": -106
1774
+ },
1775
+ "effect": {
1776
+ "modeled_atan2": {
1777
+ "8": 3204448256,
1778
+ "12": 1048576000
1779
+ },
1780
+ "original_native_executed": false,
1781
+ "result": 3213735693
1782
+ }
1783
+ },
1784
+ {
1785
+ "call": {
1786
+ "args": {
1787
+ "8": 1050673152
1788
+ },
1789
+ "instruction": 63066,
1790
+ "target": -107
1791
+ },
1792
+ "effect": {
1793
+ "input": 1050673152,
1794
+ "root": 1057954749
1795
+ }
1796
+ },
1797
+ {
1798
+ "call": {
1799
+ "args": {
1800
+ "8": 1092616192,
1801
+ "12": 1057954749
1802
+ },
1803
+ "instruction": 63083,
1804
+ "target": -106
1805
+ },
1806
+ "effect": {
1807
+ "modeled_atan2": {
1808
+ "8": 1092616192,
1809
+ "12": 1057954749
1810
+ },
1811
+ "original_native_executed": false,
1812
+ "result": 1069672953
1813
+ }
1814
+ }
1815
+ ],
1816
+ "return": null,
1817
+ "trace": null,
1818
+ "trace_length": 129,
1819
+ "trace_sha256": "7bba4bda416e354950733aa6d938e9e9d59feefd18c9df0510c5922b018201da"
1820
+ },
1821
+ "input": [
1822
+ 1048576000,
1823
+ 3204448256,
1824
+ 1092616192
1825
+ ],
1826
+ "output": [
1827
+ 3266157006,
1828
+ 1133791316,
1829
+ 0
1830
+ ]
1831
+ }
1832
+ ],
1833
+ "sha256": "a589351dfe517470a1b121dd2164714987d9e4577bf00c6486e1540035d7a79d",
1834
+ "source": {
1835
+ "archive": "zUrT43_qvm.pk3",
1836
+ "archive_sha256": "b59bf0c5bedf11d50e0edd220da7eade96de40601e98ae14c54c819047df0796",
1837
+ "member": {
1838
+ "bytes": 983300,
1839
+ "comment_hex": "",
1840
+ "compressed_bytes": 246560,
1841
+ "compression": 8,
1842
+ "crc32": "98ea1768",
1843
+ "create_system": 0,
1844
+ "create_version": 63,
1845
+ "date_time": [
1846
+ 2018,
1847
+ 6,
1848
+ 18,
1849
+ 22,
1850
+ 11,
1851
+ 50
1852
+ ],
1853
+ "directory": false,
1854
+ "entry_index": 2,
1855
+ "external_attr": 32,
1856
+ "extra_hex": "0a0020000000000001001800d1e24e974007d40116dcbf962f1fd20116dcbf962f1fd201",
1857
+ "extract_version": 20,
1858
+ "flags": 0,
1859
+ "header_offset": 221309,
1860
+ "internal_attr": 0,
1861
+ "occurrence": 0,
1862
+ "output": "assets/extracted/zUrT43_qvm.pk3/members/000002/vm/qagame.qvm",
1863
+ "path": "vm/qagame.qvm",
1864
+ "sha256": "a589351dfe517470a1b121dd2164714987d9e4577bf00c6486e1540035d7a79d",
1865
+ "type": "member",
1866
+ "volume": 0
1867
+ }
1868
+ }
1869
+ }
scripts/analyze_qvm_vector_angles.py ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Complete62944 vector-to-angle helper with finite explicit atan2/sqrt models."""
3
+ import math,itertools
4
+ from pathlib import Path
5
+ from qvm_research_support import source,execute
6
+ from analyze_qvm_acceleration import word,number
7
+ from analyze_qvm_slide_prefix import vec
8
+ from analyze_qvm import write_json
9
+ LOCAL=0x78100000
10
+ INPUT=LOCAL+4096
11
+ OUTPUT=INPUT+16
12
+
13
+ def vector_angles(ins,m,args):
14
+ m=dict(m);before=vec(m,args[8])
15
+ for o,v in args.items():m[LOCAL+48+o]=v
16
+ def atan(i,m,a,c):
17
+ result=word(math.atan2(number(a[8]),number(a[12])));return m,c,result,{'modeled_atan2':a,'result':result,'original_native_executed':False}
18
+ m,_,e=execute(ins,62945,63120,m,(0,0,0),LOCAL,{-106:atan})
19
+ return m,{'arguments':args,'input':before,'output':vec(m,args[12]),'execution':e}
20
+
21
+ def main():
22
+ q,raw,h,ins=source();rows=[]
23
+ inputs=[(0,0,0),(0,0,1),(0,0,-1),(1,0,0),(-1,0,0),(0,1,0),(0,-1,0),(1,1,1),(-1,1,-1),(-1,-1,2),(1,-1,-2),(.25,-.5,10)]
24
+ for values,alias in itertools.product(inputs,[False,True]):
25
+ m={INPUT+4*j:word(v) for j,v in enumerate(values)};rows.append(vector_angles(ins,m,{8:INPUT,12:INPUT if alias else OUTPUT})[1])
26
+ write_json(Path('docs/research/qvm-vector-angles.json'),{'source':q['source'],'sha256':q['sha256'],'probes':rows,'limits':'Actual62945–63119, finite math.atan2/sqrt responses rounded tofloat32. Native library bit parity, partial overlaps and live domain remain unverified. Zero input follows the source vertical fallback.'})
27
+ if __name__=='__main__':main()
scripts/test_qvm_vector_angles.py ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json,unittest,math
2
+ from pathlib import Path
3
+ from test_qvm_ground import word,n,f
4
+
5
+ def expected(values):
6
+ x,y,z=map(n,values)
7
+ if x==0 and y==0:yaw=0;pitch=90 if z>0 else 270
8
+ else:
9
+ yaw=f(f(math.atan2(y,x))*n(1113927393)) if x else (90 if y>0 else 270)
10
+ if yaw<0:yaw=f(yaw+360)
11
+ length=f(math.sqrt(f(f(x*x)+f(y*y))));pitch=f(f(math.atan2(z,length))*n(1113927393))
12
+ if pitch<0:pitch=f(pitch+360)
13
+ return [word(-pitch),word(yaw),0]
14
+ class VectorAngleTests(unittest.TestCase):
15
+ @classmethod
16
+ def setUpClass(cls):cls.rows=json.loads(Path('docs/research/qvm-vector-angles.json').read_text())['probes']
17
+ def test_independent_float32_outputs(self):
18
+ self.assertEqual(len(self.rows),24)
19
+ for p in self.rows:self.assertEqual(p['output'],expected(p['input']))
20
+ def test_exact_alias_matches_distinct_output(self):
21
+ for a,b in zip(self.rows[::2],self.rows[1::2]):self.assertEqual(a['input'],b['input']);self.assertEqual(a['output'],b['output'])
22
+ def test_zero_vector_vertical_fallback(self):
23
+ for p in self.rows:
24
+ if p['input']==[0,0,0]:self.assertEqual(p['output'],[word(-270),0,0]);self.assertEqual(p['execution']['calls'],[])
25
+ def test_reached_native_order(self):
26
+ for p in self.rows:
27
+ x,y,z=map(n,p['input']);expected_calls=[] if not x and not y else (([-106] if x else [])+[-107,-106]);self.assertEqual([c['target'] for c in p['execution']['calls']],expected_calls)
28
+ if __name__=='__main__':unittest.main()