-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathfpoptimizer.cpp
11763 lines (11760 loc) · 145 KB
/
fpoptimizer.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/***************************************************************************\
|* Function Parser for C++ v4.5.2 *|
|*-------------------------------------------------------------------------*|
|* Function optimizer *|
|*-------------------------------------------------------------------------*|
|* Copyright: Joel Yliluoma *|
|* *|
|* This library is distributed under the terms of the *|
|* GNU Lesser General Public License version 3. *|
|* (See lgpl.txt and gpl.txt for the license text.) *|
\***************************************************************************/
/* NOTE:
This file contains generated code (from the optimizer sources) and is
not intended to be modified by hand. If you want to modify the optimizer,
download the development version of the library.
*/
#include "fpconfig.hh"
#ifdef FP_SUPPORT_OPTIMIZER
#include "fparser.hh"
#include "extrasrc/fptypes.hh"
#include "extrasrc/fpaux.hh"
#pragma GCC diagnostic ignored "-Wunused-variable"
#define tO3 ;typedef
#define tN3 (xP1 a)
#define tM3 :sim i61
#define tL3 },{{1,
#define tK3 :if(tO2
#define tJ3 xP1 a),
#define tI3 {data->
#define tH3 nW 0,
#define tG3 {tree.x6
#define tF3 "Found "
#define tE3 ;for lR1
#define tD3 stackpos
#define tC3 .GetOpcode
#define tB3 "dup(%u) "
#define tA3 "%d, cost "
#define t93 "PUSH " yR2
#define t83 ::cout<<eZ3
#define t73 "immed "<<
#define t63 mFuncParsers
#define t53 cV2{assert
#define t43 stderr
#define t33 sep2=" "
#define t23 FPHASH_CONST
#define t13 cache_needed[
#define t03 fprintf
#define eZ3 "Applying "
#define eY3 FUNCTIONPARSER_INSTANTIATE_OPTIMIZE
#define eX3 FUNCTIONPARSER_INSTANTIATE_EMPTY_OPTIMIZE
#define eW3 HANDLE_UNARY_CONST_FUNC
#define eV3 ,l1 0x7
#define eU3 within,
#define eT3 c_count
#define eS3 s_count
#define eR3 tI2 xT1
#define eQ3 2)lT 2*
#define eP3 );break
#define eO3 ].swap(
#define eN3 else{if(
#define eM3 b.Value)
#define eL3 b.Opcode
#define eK3 FP_GetOpcodeName
#define eJ3 =synth.
#define eI3 codes[b
#define eH3 whydump
#define eG3 nparams
#define eF3 450998,
#define eE3 cHypot,
#define eD3 cExp nW
#define eC3 cAbs nW
#define eB3 )&&p nV
#define eA3 eO;case
#define e93 :tree
#define e83 false;}
#define e73 l41 y6.
#define e63 cAbsIf)
#define e53 ){case
#define e43 tQ nF==
#define e33 =true;yH1
#define e23 =false;
#define e13 params
#define e03 ].first
#define cZ3 Ne_Mask
#define cY3 Gt_Mask
#define cX3 Lt_Mask
#define cW3 opcode,
#define cV3 public:
#define cU3 *xB lQ1
#define cT3 pclone
#define cS3 info.
#define cR3 --cU1.
#define cQ3 eK2 2,
#define cP3 eK2 1,
#define cO3 cOr,l6
#define cN3 switch nR1
#define cM3 xG p2;p2
#define cL3 if(op1==
#define cK3 (tree)!=
#define cJ3 TreeCountItem
#define cI3 ){if(
#define cH3 newpow
#define cG3 tX2 lU1
#define cF3 &&p e32
#define cE3 )))eO lI
#define cD3 if(xW)&&
#define cC3 xP1 2)
#define cB3 change
#define cA3 133,2,
#define c93 Needs
#define c83 byteCode
#define c73 nT2 a eF
#define c63 lP1 nF==
#define c53 factor_t
#define c43 y7 tmp2)
#define c33 value1
#define c23 a));if(!
#define c13 tM nD lD
#define c03 cAbsNot
#define yZ3 ::ByteCodeSynth yB
#define yY3 break;}
#define yX3 }switch
#define yW3 stackptr
#define yV3 cPow);lD
#define yU3 .empty()
#define yT3 cMul);xN
#define yS3 opcodes
#define yR3 did_muli
#define yQ3 c4 data.
#define yP3 &Value){
#define yO3 yK const
#define yN3 yY3}
#define yM3 used[b]
#define yL3 if(a>0){
#define yK3 :if((i42
#define yJ3 :{lW1 r=
#define yI3 sizeof(
#define yH3 cLess c9
#define yG3 ,cExp2 nW
#define yF3 lK 2},0,
#define yE3 ::string
#define yD3 return p
#define yC3 ;}return
#define yB3 Others
#define yA3 param.
#define y93 .first.
#define y83 (yA3
#define y73 break;yX3(
#define y63 ¶m=*
#define y53 );tmp2.n7
#define y43 nF==cLog2&&
#define y33 nF==cPow&&tU
#define y23 if(xW nR
#define y13 default:
#define y03 x83 size()
#define xZ3 ].data);
#define xY3 tL));x0
#define xX3 Ge0Lt1
#define xW3 Gt0Le1
#define xV3 =fp_pow(
#define xU3 ==cOr)l9
#define xT3 cAdd l02
#define xS3 x62 0;b<
#define xR3 iterator
#define xQ3 begin();
#define xP3 TreeSet
#define xO3 parent
#define xN3 insert(i
#define xM3 newrel
#define xL3 IsNever
#define xK3 b_needed
#define xJ3 cachepos
#define xI3 half&64)
#define xH3 half=
#define xG3 1 y8 lX1
#define xF3 FindPos(
#define xE3 src_pos
#define xD3 reserve(
#define xC3 tree.GetHash()
#define xB3 iT1 tree
#define xA3 ){pow.l41
#define x93 Params[a]
#define x83 Params.
#define x73 yD void
#define x63 treeptr
#define x53 .resize(
#define x43 yL1 xG>&
#define x33 t81 void
#define x23 ImmedTag
#define x13 yD class
#define x03 ),child);
#define nZ3 tmp.n7 0))
#define nY3 ));tmp c4
#define nX3 a,const
#define nW3 RefCount
#define nV3 Birth();
#define nU3 exponent
#define nT3 result
#define nS3 cost_t
#define nR3 fpdata
#define nQ3 middle
#define nP3 ifdata
#define nO3 };enum
#define nN3 );eE t71
#define nM3 cLog2by);
#define nL3 sqrt_cost
#define nK3 const int
#define nJ3 mul_count
#define nI3 maxValue1
#define nH3 minValue1
#define nG3 maxValue0
#define nF3 minValue0
#define nE3 ValueType
#define nD3 );}yD bool
#define nC3 xC lU 2,
#define nB3 const std::eQ
#define nA3 const char*
#define n93 x31 a-->0;)if(
#define n83 ContainsOtherCandidates
#define n73 ;if(half
#define n63 ;}void
#define n53 ,l62(1))){
#define n43 ,const e3&
#define n33 )n63
#define n23 1),l62(1));
#define n13 nT3 t6
#define n03 nT3 eY
#define lZ3 nT3 cT1
#define lY3 n03 e23 if(
#define lX3 nT3 nV
#define lW3 nT3 e32
#define lV3 yB nT3
#define lU3 yI n2 0),
#define lT3 abs_mul
#define lS3 l8 a));
#define lR3 pos_set
#define lQ3 e61);}if(
#define lP3 Rehash(iB
#define lO3 cM ifp2);
#define lN3 sim.x3 1,
#define lM3 [funcno].
#define lL3 eE1[++IP]
#define lK3 eE1[IP]==
#define lJ3 subtree
#define lI3 invtree
#define lH3 MakeHash(
#define lG3 rulenumit
#define lF3 (cond yY
#define lE3 ))break;l62
#define lD3 ;}static yE1
#define lC3 {std::cout<<
#define lB3 a<tree.xD
#define lA3 cAnd,l6
#define l93 if y83
#define l83 (tree nF)
#define l73 MakeEqual
#define l63 n61,l4::
#define l53 n61,{l4::
#define l43 newbase
#define l33 branch1op
#define l23 branch2op
#define l13 overlap
#define l03 truth_b
#define iZ2 truth_a
#define iY2 found_dup
#define iX2 cY1 xG&
#define iW2 nQ r;r c4
#define iV2 rangeutil
#define iU2 Plan_Has(
#define iT2 StackMax)
#define iS2 const nV2
#define iR2 namespace
#define iQ2 ::res,b8<
#define iP2 inverted
#define iO2 xL3:
#define iN2 .known&&
#define iM2 iftree
#define iL2 depcodes
#define iK2 explicit
#define iJ2 cPow,l2 0,2,
#define iI2 cPow,xK1
#define iH2 ,{ReplaceParams,
#define iG2 ,eB2 7168
#define iF2 cCosh nW
#define iE2 VarBegin
#define iD2 .Become(
#define iC2 begin(),
#define iB2 cond_add
#define iA2 cond_mul
#define i92 cond_and
#define i82 mulgroup
#define i72 leaf1
#define i62 );synth
#define i52 ,cEqual
#define i42 cU3.get()){
#define i32 )lT 3*3*
#define i22 Optimize()
#define i12 costree
#define i02 sintree
#define tZ2 leaf_count
#define tY2 sub_params
#define tX2 nT3.
#define tW2 printf(
#define tV2 swap(tmp);
#define tU2 cbrt_count
#define tT2 sqrt_count
#define tS2 PlusInf
#define tR2 Finite
#define tQ2 (lW3
#define tP2 tI2 n2 0),
#define tO2 xW)){l62 tmp=
#define tN2 l62(0.0 nR
#define tM2 p1 cM ifp1
#define tL2 pcall_tree
#define tK2 after_powi
#define tJ2 ))return
#define tI2 );m.max.
#define tH2 ;a<t7;++a)
#define tG2 else{xB=new
#define tF2 yS e83
#define tE2 e13)
#define tD2 grammar
#define tC2 ,cGreater
#define tB2 ,lB 0x12 nM
#define tA2 cLog nW
#define t92 0x12},{{3,
#define t82 cNeg,lU 1,
#define t72 ),0},{
#define t62 .data.get(
#define t52 data;data.
#define t42 MakeNEqual
#define t32 xP1 1)
#define t22 Dump(std::
#define t12 isInteger(
#define t02 Comparison
#define eZ2 ,bool abs)
#define eY2 needs_flip
#define eX2 (half&63)-1;
#define eW2 value]
#define eV2 x71 xR+1);
#define eU2 Rule&rule,
#define eT2 cM tree);
#define eS2 mul_item
#define eR2 innersub
#define eQ2 cbrt_cost
#define eP2 best_cost
#define eO2 condition
#define eN2 per_item
#define eM2 item_type
#define eL2 first2
#define eK2 ,l7 0,
#define eJ2 yI known
#define eI2 ,o);o<<"\n";
#define eH2 info=(*xB)[
#define eG2 cU3=r.specs;if(r.found){
#define eF2 cU3,info
#define eE2 *)start_at.get();
#define eD2 l3 18,1,
#define eC2 cIf,eV 3,
#define eB2 l0 2,
#define eA2 lK 1},0,
#define e92 .what nL1
#define e82 tree))cN
#define e72 ;std::vector<
#define e62 )x02.second
#define e52 );range.x22
#define e42 (lS,tM)nD lD
#define e32 .min.val
#define e22 Decision
#define e12 ;tree y7
#define e02 not_tree
#define cZ2 group_by
#define cY2 nU3=
#define cX2 (std::move(
#define cW2 ->second
#define cV2 xG&tree)
#define cU2 targetpos
#define cT2 eO true;}
#define cS2 ParamSpec
#define cR2 rhs.hash2;}
#define cQ2 rhs.hash1
#define cP2 struct
#define cO2 Forget()
#define cN2 &&cond eH))
#define cM2 source_tree
#define cL2 <tH,nS3>
#define cK2 p1_evenness
#define cJ2 isNegative(
#define cI2 (yI val
#define cH2 ,std::cout)
#define cG2 neg_set
#define cF2 cNop,cNop}}
#define cE2 cTanh,cNop,
#define cD2 >cP2 cG<
#define cC2 matches
#define cB2 .match_tree
#define cA2 (rule,tree,info
#define c92 cY1 void*)&
#define c82 cGreater c9
#define c72 l5 0,1,
#define c62 ,cTan nW
#define c52 .xU 2)xX cPow)
#define c42 cCos nW
#define c32 {data xE lO
#define c22 +=1 eO n21;
#define c12 negated
#define c02 iC,1,iZ+1);
#define yZ2 Specializer
#define yY2 coshtree
#define yX2 sinhtree
#define yW2 best_score
#define yV2 mulvalue
#define yU2 pow_item
#define yT2 );t9=!t9;}
#define yS2 .push_back(
#define yR2 ;DumpTree(
#define yQ2 eB[c i1
#define yP2 .IsImmed(
#define yO2 1)yP2)
#define yN2 PowiResult
#define yM2 maxValue
#define yL2 minValue
#define yK2 fp_min(yH,
#define yJ2 yI set(fp_floor
#define yI2 fp_max(yH)
#define yH2 div_tree
#define yG2 pow_tree
#define yF2 preserve
#define yE2 xP1 a).xE1
#define yD2 cLog);sim.xU
#define yC2 PullResult()
#define yB2 dup_or_fetch
#define yA2 nominator]
#define y92 test_order
#define y82 TopLevel)
#define y72 ].info=info;
#define y62 ):start_at()
#define y52 .param_count
#define y42 minimum_need
#define y32 shift(index)
#define y22 ,tree xA
#define y12 rulenumber
#define y02 cLessOrEq c9
#define xZ2 cTan l3 2,1,
#define xY2 cLog l3 2,1,
#define xX2 cTanh nW
#define xW2 ,cSinh nW
#define xV2 cInv,lU 1,
#define xU2 constraints=
#define xT2 GetDepth()
#define xS2 factor_immed
#define xR2 changes
#define xQ2 n11 cM y6 l8
#define xP2 cM cond l8
#define xO2 ,cGreaterOrEq
#define xN2 l8 0));
#define xM2 y7 mul);
#define xL2 for(typename
#define xK2 exp_diff
#define xJ2 ExponentInfo
#define xI2 lower_bound(
#define xH2 factor
#define xG2 is_logical
#define xF2 newrel_and
#define xE2 ;iC.Remember(
#define xD2 eO Unknown;}
#define xC2 res_stackpos
#define xB2 half_pos
#define xA2 ){half&=127;
#define x92 {e3 start_at;
#define x82 i52,eB2
#define x72 (size_t
#define x62 for x72 b=
#define x52 >>1)):(
#define x42 CodeTreeData
#define x32 nU3)
#define x22 multiply(
#define x12 var_trees
#define x02 parampair
#define nZ2 ,cPow,l2 2,2,
#define nY2 ,nM2 2,1,
#define nX2 std::vector<xG>
#define nW2 nE OPCODE
#define nV2 CodeTree&
#define nU2 parent_opcode
#define nT2 =GetParam(
#define nS2 changed=true;
#define nR2 log2_exponent
#define nQ2 tmp y7 tree);
#define nP2 nQ tmp;tmp c4
#define nO2 dup_fetch_pos
#define nN2 xL3 c5 lD
#define nM2 cPow l3
#define nL2 cSin nW
#define nK2 Value_EvenInt
#define nJ2 MakeFalse,{l4
#define nI2 if(y2 l8 a)xI
#define nH2 AddCollection
#define nG2 ConditionType
#define nF2 DUP_ONE(apos)
#define nE2 ,0,0x4 tL3
#define nD2 (unsigned
#define nC2 cY|nD2)
#define nB2 SpecialOpcode
#define nA2 sim.Eat(1,
#define n92 ;sim.Push(
#define n82 c4 tree nF);
#define n72 for x72 a=
#define n62 .UseGetNeeded(
#define n52 ));TriTruthValue
#define n42 synth.AddOperation(
#define n32 ,eR,synth);
#define n22 =i cW2.
#define n12 IsDefined()
#define n02 .GetHash().
#define lZ2 assimilated
#define lY2 );sim.x3 2,
#define lX2 denominator
#define lW2 fraction
#define lV2 DUP_BOTH();
#define lU2 template lM
#define lT2 -1-offset].
#define lS2 if(synth.Find(
#define lR2 IsDescendantOf
#define lQ2 TreeCounts
#define lP2 ;tree.DelParam(
#define lO2 IsImmed()cI3
#define lN2 bool t9 e23
#define lM2 SetOpcode(
#define lL2 found_log2
#define lK2 div_params
#define lJ2 immed_sum
#define lI2 OPCODE(opcode)
#define lH2 break;nT3*=
#define lG2 FactorStack yB
#define lF2 Rehash(false);
#define lE2 IsAlways c5 lD
#define lD2 282870 x9
#define lC2 cNotNot nW
#define lB2 replacing_slot
#define lA2 RefParams
#define l92 if_always[
#define l82 WhatDoWhenCase
#define l72 exponent_immed
#define l62 Value_t
#define l52 );x0 l4::
#define l42 GetOpcode())
#define l32 );goto do_return;
#define l22 {if(GetOpcode()
#define l12 CollectionSet yB
#define l02 ||op1==
#define iZ1 yF DelParams()
#define iY1 .SetParamsMove(
#define iX1 data[a].second
#define iW1 if(newrel_or==
#define iV1 eA 2,131,
#define iU1 Immed.size());
#define iT1 const xG&
#define iS1 OptimizedUsing
#define iR1 Var_or_Funcno
#define iQ1 iR1;
#define iP1 GetParams(
#define iO1 crc32_t
#define iN1 signed_chain
#define iM1 MinusInf
#define iL1 n_immeds
#define iK1 stack.size()
#define iJ1 std::cout<<"POP "
#define iI1 FindClone(xN
#define iH1 needs_rehash
#define iG1 AnyWhere_Rec
#define iF1 ~unsigned(0)
#define iE1 41,42,43,44,
#define iD1 p1_logical_b
#define iC1 p0_logical_b
#define iB1 p1_logical_a
#define iA1 p0_logical_a
#define i91 divgroup
#define i81 else if(
#define i71 {case IsAlways:
#define i61 .xU l62(
#define i51 ,l5 2,1,
#define i41 ,1,2,1,4,1,2,
#define i31 }break cT1
#define i21 tree nF==
#define i11 func(val);nJ1
#define i01 *const func)
#define tZ1 synth.DoDup(
#define tY1 cache_needed
#define tX1 eA 2,1,eA 2,
#define tW1 [nP3.ofs+
#define tV1 treelist
#define tU1 has_bad_balance
#define tT1 c53 xH2
#define tS1 fp_abs(max.val))
#define tR1 )eO m cT1
#define tQ1 fp_abs(min.val)
#define tP1 cNEqual
#define tO1 tP 2},0,0x0},{{
#define tN1 Oneness_NotOne|
#define tM1 Value_IsInteger
#define tL1 Constness_Const
#define tK1 DumpHashesFrom(
#define tJ1 iS1(
#define tI1 reltype
#define tH1 SequenceOpcodes
#define tG1 sep_list[
#define tF1 ,l1 0x0},{{3,
#define tE1 fpExponentIsTooLarge(
#define tD1 l62(0
#define tC1 goto fail;}
#define tB1 ,cNot nW
#define tA1 l1 0x4 nM
#define t91 template<
#define t81 lA2);
#define t71 subgroup
#define t61 lQ2.erase(cs_it);
#define t51 yL1 unsigned>&eE1,size_t&IP,size_t limit,size_t y4
#define t41 tJ2 true
#define t31 TreeCountType yB
#define t21 xG tmp;tmp c4
#define t11 ;nU3
#define t01 Value(Value::
#define eZ1 >(l62(1),
#define eY1 0.5))xX yV3
#define eX1 stack[iK1-
#define eW1 stack yS2
#define eV1 synth.PushImmed(
#define eU1 MaxChildDepth
#define eT1 std::pair<It,It>
#define eS1 cPow,lB
#define eR1 Sign_Negative
#define eQ1 Value_Logical
#define eP1 new_factor_immed
#define eO1 base_immed
#define eN1 public e9,public std::vector<
#define eM1 .Rehash();
#define eL1 );y6 eM1 xG
#define eK1 occurance_pos
#define eJ1 exponent_hash
#define eI1 exponent_list
#define eH1 CollectMulGroup(
#define eG1 source_set
#define eF1 nU3,xP3
#define eE1 ByteCode
#define eD1 operator
#define eC1 FindAndDup(tree);
#define eB1 .yJ l62(2)));
#define eA1 back().thenbranch
#define e91 grammar_rules[*r]
#define e81 ;flipped=!flipped;}
#define e71 DelParam(a);}
#define e61 tree.DelParam(a
#define e51 synth.xH 1
#define e41 ,iC n32
#define e31 =comp.AddItem(atree
#define e21 (long double)
#define e11 yB())xX cMul);lD
#define e01 tree yP2)c5
#define cZ1 ;synth.StackTopIs(
#define cY1 (const
#define cX1 cY1 l62&
#define cW1 >=tD1)
#define cV1 iR2 FPoptimizer_Optimize
#define cU1 NeedList
#define cT1 ;}case
#define cS1 ,lI2);
#define cR1 ParamSpec_Extract
#define cQ1 retry_anyparams_3
#define cP1 retry_anyparams_2
#define cO1 needlist_cached_t
#define cN1 lK 2}nE2
#define cM1 lK 1}nE2
#define cL1 CodeTreeImmed yB(
#define cK1 by_float_exponent
#define cJ1 fp_equal(nU3
#define cI1 new_exp
#define cH1 end()&&i->first==
#define cG1 return BecomeZero;
#define cF1 return BecomeOne;
#define cE1 if(lR.size()<=n0)
#define cD1 addgroup
#define cC1 ,PowiCache&iC,
#define cB1 NewHash.hash1
#define cA1 ;NewHash.hash2+=
#define c91 ;eE i82);
#define c81 found_log2by
#define c71 nF==c03)
#define c61 ParsePowiMuli(
#define c51 iR1)
#define c41 MakeNotP1,l4::
#define c31 MakeNotP0,l4::
#define c21 new_base_immed
#define c11 branch1_backup
#define c01 branch2_backup
#define yZ1 exponent_map
#define yY1 plain_set
#define yX1 LightWeight(
#define yW1 if(value
#define yV1 goto do_return;}lD
#define yU1 .GetParamCount()==
#define yT1 should_regenerate=true;
#define yS1 should_regenerate,
#define yR1 Collection
#define yQ1 RelationshipResult
#define yP1 Subdivide_Combine(
#define yO1 long value
#define yN1 ):e9(),std::vector<
#define yM1 ByteCodeSynth yB&synth)
#define yL1 const std::vector<
#define yK1 )const yS
#define yJ1 rhs yK1 hash1
#define yI1 best_sep_factor
#define yH1 i81!nT3
#define yG1 &&p nV<l62(
#define yF1 needlist_cached
#define yE1 inline unsigned
#define yD1 cW3 bool pad
#define yC1 MakesInteger(
#define yB1 const l62&value
#define yA1 best_sep_cost
#define y91 MultiplicationRange
#define y81 pihalf_limits
#define y71 n_stacked
#define y61 AnyParams_Rec
#define y51 ;tree.SetParam(
#define y41 continue;
#define y31 Become(value l8 0))
#define y21 PositionalParams,0}
#define y11 always_sincostan
#define y01 Recheck_RefCount_Div
#define xZ1 Recheck_RefCount_Mul
#define xY1 i82.
#define xX1 i82;i82 c4
#define xW1 MultiplyAndMakeLong(
#define xV1 cMul);nZ3;tmp
#define xU1 covers_plus1
#define xT1 template set_if<
#define xS1 if(synth.FindAndDup(
#define xR1 SynthesizeParam(
#define xQ1 xP1 a)yP2))
#define xP1 tree l8
#define xO1 ;std::cout<<
#define xN1 grammar_func
#define xM1 252421 x9 24830,
#define xL1 cA 529654 x9
#define xK1 l2 0,2,165888 x9
#define xJ1 1)?(poly^(
#define xI1 cCos l3 2,1,
#define xH1 l1 0x12 nM
#define xG1 Modulo_Radians},
#define xF1 c4 cLog);tree c4 cMul);
#define xE1 GetImmed()
#define xD1 PositionType
#define xC1 CollectionResult
#define xB1 const_offset
#define xA1 inline TriTruthValue
#define x91 stacktop_desired
#define x81 int mStackPtr=0;
#define x71 SetStackTop(
#define x61 }inline
#define x51 FPoptimizer_ByteCode
#define x41 );n41 0,x32;DelParam(1);
#define x31 GetParamCount();
#define x21 xI leaf2 l8
#define x11 cond_type
#define x01 fphash_value_t
#define nZ1 Recheck_RefCount_RDiv
#define nY1 fpEstimatePrecision(
#define nX1 SwapLastTwoInStack();
#define nW1 CollectMulGroup_Item(
#define nV1 pair<l62,xP3>
#define nU1 Rehash()e12 r);}
#define nT1 nN x71 xR-1);
#define nS1 covers_full_cycle
#define nR1 (GetLogicalValue(
#define nQ1 AssembleSequence(
#define nP1 252180 x9 281854,
#define nO1 {DataP slot_holder(y3[
#define nN1 <<std::dec<<")";}
#define nM1 :yD3 e32
#define nL1 !=xK)if(TestCase(
#define nK1 &&IsLogicalValue(
#define nJ1 else*this=model;}
#define nI1 std::pair<T1,T2>&
#define nH1 t91 typename
#define nG1 has_good_balance_found
#define nF1 n_occurrences
#define nE1 found_log2_on_exponent
#define nD1 covers_minus1
#define nC1 needs_resynth
#define nB1 immed_product
#define nA1 y73 bitmask&
#define n91 Sign_Positive
#define n81 {l4::MakeNotNotP1,l4::
#define n71 {l4::MakeNotNotP0,l4::
#define n61 ::MakeTrue
#define n51 matched_params
#define n41 SetParamMove(
#define n31 CodeTreeImmed(l62(
#define n21 Suboptimal
#define n11 changed_if
#define n01 n_as_tanh_param
#define lZ1 opposite=
#define lY1 x01(
#define lX1 eE1.size()
#define lW1 MatchResultType
#define lV1 needs_sincos
#define lU1 resulting_exponent
#define lT1 ;p1 eM1 tree y7 p1);
#define lS1 Unknown:y13;}
#define lR1 nD2 a=0;a<c2;++a)
#define lQ1 )[a].start_at
#define lP1 GetParam(a)
#define lO1 inverse_nominator]
#define lN1 cSin l3 2,1,
#define lM1 (xP1 yO2&&
#define lL1 ,typename xG::
#define lK1 IsImmed()){l62
#define lJ1 AddFunctionOpcode(
#define lI1 void FunctionParserBase
#define lH1 SetParams(iP1));
#define lG1 o<<"("<<std::hex<<data.
#define lF1 IfBalanceGood(
#define lE1 n_as_tan_param
#define lD1 changed_exponent
#define lC1 inverse_denominator
#define lB1 unsigned index
#define lA1 7168 x9 401798
#define l91 yB(rule.repl_param_list,
#define l81 retry_positionalparams_2
#define l71 situation_flags&
#define l61 518 x9 400412,
#define l51 data.subfunc_opcode
#define l41 CopyOnWrite();
#define l31 PlanNtimesCache(
#define l21 FPoptimizer_Grammar
#define l11 static inline xG
#define l01 GetPositivityInfo cK3
#define iZ recursioncount
#define iY ParamSpec_SubFunctionData
#define iX ,cPow xZ
#define iW xO1 std::endl;DumpHashes(
#define iV ,2,1 i62.xT if(found[data.
#define iU AddOperation(cInv,1,1 i62.xT}
#define iT ]);n42
#define iS ~size_t(0)){synth.yV
#define iR PositionalParams_Rec
#define iQ DumpTreeWithIndent(*this);
#define iP switch(type e53 cond_or:
#define iO CalculateResultBoundaries(
#define iN t91 unsigned Compare>
#define iM yF3 0x0 tL3
#define iL edited_powgroup
#define iK has_unknown_max
#define iJ has_unknown_min
#define iI static const range yB
#define iH if(keep_powi
#define iG synthed_tree
#define iF SelectedParams,0},0,0x0},{{
#define iE by_exponent
#define iD collections
#define iC cache
#define iB )e12 p2);tree c4 iM2 nF);cN}
#define iA goto ReplaceTreeWithOne;case
#define i9 xB3,std::ostream&o
#define i8 y7 comp.yY1[a].value);
#define i7 !=xK)return l92
#define i6 cK1.data
#define i5 iK2 x42(
#define i4 needs_sinhcosh
#define i3 t72 l62(
#define i2 MakeFalse,l4::
#define i1 ].relationship
#define i0 ,eE1,IP,limit,y4,stack);
#define tZ 408964 x9 24963,
#define tY 528504 x9 24713,
#define tX AnyParams,0}}iH2
#define tW [n0 e03=true;lR[n0].second
#define tV l21::Grammar*
#define tU powgroup l8
#define tT }},{ProduceNewTree,2,1,
#define tS ,l7 2,1,
#define tR ~size_t(0)&&found[data.
#define tQ xP1 0)
#define tP xC AnyParams,
#define tO iO xP1
#define tN =tO 0));range yB
#define tM t32.GetImmed(
#define tL (tM))
#define tK n31(
#define tJ has_mulgroups_remaining
#define tI Rehash();tY2 yS2
#define tH int_exponent_t
#define tG best_factor
#define tF RootPowerTable yB::RootPowers[
#define tE :goto ReplaceTreeWithZero;case
#define tD MatchPositionSpec_AnyParams yB
#define tC iR2 FPoptimizer_CodeTree
#define tB n_as_sinh_param
#define tA n_as_cosh_param
#define t9 is_signed
#define t8 nS l62(-n23
#define t7 tree.GetParamCount()
#define t6 .max.known
#define t5 eM1 tree c4 i72 nF);tree.
#define t4 iP1));xY1 Rehash();
#define t3 result_positivity
#define t2 biggest_minimum
#define t1 124024 x9 139399,
#define t0 142456 x9 141449,
#define eZ valueType
#define eY .min.known
#define eX x72 a=0 tH2 if(remaining[a])
#define eW ,cIf,l0 3,
#define eV lB 0x4},{{
#define eU cond_tree
#define eT else_tree
#define eS then_tree
#define eR sequencing
#define eQ string eK3(
#define eP const iY
#define eO ;return
#define eN if_stack
#define eM .max.set(fp_ceil tR1
#define eL n_as_sin_param
#define eK n_as_cos_param
#define eJ PowiResolver::
#define eI cIf l3 0,1,
#define eH .BalanceGood
#define eG {if(needs_cow){l41 goto
#define eF );bool needs_cow=GetRefCount()>1;
#define eE AddParamMove(
#define eD back().endif_location
#define eC x01 key
#define eB relationships
#define eA 130,1,
#define e9 MatchPositionSpecBase
#define e8 iK2 CodeTree(
#define e7 smallest_maximum
#define e6 }PACKED_GRAMMAR_ATTRIBUTE;
#define e5 ReplaceTreeWithParam0;
#define e4 factor_needs_rehashing
#define e3 MatchPositionSpecBaseP
#define e2 typename t31::xR3
#define e1 fp_cosh cI2);m nV=fp_cosh(m nV);
#define e0 {AdoptChildrenWithSameOpcode(tree);
#define cZ cR1 yB(nT.param_list,
#define cY );eE1 yS2 0x80000000u
#define cX for(lG3 r=range.first;r!=range.second;++r){
#define cW 243,244,245,246,249,250,251,253,255,256,257,258,259}};}
#define cV ];};extern"C"{
#define cU i9=std::cout
#define cT 79,122,123,160,161,163,164,165,166,167,168,169,178,179,180,200,204,212,216,224,236,237,239,240,
#define cS 27,28,29,30,31,32,33,35,36,
#define cR const ParamSpec_SubFunction
#define cQ const ParamSpec_ParamHolder
#define cP }if(list y93 xE1==l62(
#define cO otherhalf
#define cN goto redo;
#define cM .AddParam(
#define cL StackState
#define cK min iN2 p0 e32>=l62(0.0))
#define cJ max.known e23
#define cI l62(1.5)*fp_const_pi yB()
#define cH CalculatePowiFactorCost(
#define cG ImmedHashGenerator
#define cF ::map<fphash_t,std::set<std yE3> >
#define cE T1,typename T2>inline bool eD1()(
#define cD has_nonlogical_values
#define cC from_logical_context)
#define cB AnyParams,0}},{ProduceNewTree,
#define cA ,l2 18,2,
#define c9 ,l2 16,2,
#define c8 max iN2 p0 nV<=fp_const_negativezero yB())
#define c7 x72 a=t7;a-->0;)
#define c6 x72 a=0 tH2{
#define c5 )return false;
#define c4 .lM2
#define c3 n72 y2.x31 a-->0;)
#define c2 nT y52
#define c1 POWI_CACHE_SIZE
#define c0 ++IP;y41}if(lK3 yS3.
#define yZ },{l4::xK,l4::Never},{l4::xK,l4::Never}}
#define yY .FoundChild
#define yX BalanceResultType
#define yW n42 GetOpcode(),
#define yV DoDup(found[data.
#define yU nW3(0),Opcode(
#define yT );void lJ1 unsigned cW3 yZ2<
#define yS {return
#define yR const yS data->
#define yQ +=fp_const_twopi yB();
#define yP n72 0;a<x31++a cI3
#define yO MatchPositionSpec_AnyWhere
#define yN l93 data.match_type==
#define yM void OutFloatHex(std::ostream&o,
#define yL paramholder_matches