1 /* Function Parser for C++ v4.3
4 Do not include this file in your project. The fparser.cc file #includes
5 this file internally and thus you don't need to do anything (other than keep
6 this file in the same directory as fparser.cc).
8 This file contains generated code and is thus not intended to be to
9 be modified by hand. It was generated by util/bytecoderules_parser, which
10 is available in the development package.
12 #define FP_TRACE_BYTECODE_OPTIMIZATION(srcline,from,to,with) \
13 /*std::cout << "Changing \"" from "\"\t(line " #srcline ")\n" \
14 " into \"" to "\"\n" with << std::flush*/
15 #define FP_TRACE_OPCODENAME(op) \
17 ? FP_GetOpcodeName(OPCODE(op)) \
18 : findName(data->namePtrs,op,NameData<Value_t>::VARIABLE))
19 #define FP_TRACE_BYTECODE_ADD(opcode) \
20 /*std::cout << "Adding opcode: " << FP_TRACE_OPCODENAME(opcode) \
21 << ", bytecode length " << data->ByteCode.size() \
22 << ", pointer is " << (void*)ByteCodePtr \
23 << ", code is " << (data->ByteCode.empty() \
25 : (void*)&data->ByteCode[0]) \
30 #define q61 <<", C "oY
32 #define q41 q21 wS q21 aF
36 #define q01 "B[B>=VarBegin] "
59 #define mD mT qG d1 g1
84 #define aO "A[A>=VarBegin]"
87 #define aL " "wJ"cInv"
91 #define aH "cLessOrEq"
97 #define aB "cRDiv"wB w2
100 #define a8 =g8 oK qX oW
101 #define a7 =g8 oK gK oW
108 #define a0 "cGreaterOrEq"
112 #define wW ==gF){h1 qC oW
120 #define wO "B[B==A] "
123 #define wL "x[x!=Value_t(0)] "
124 #define wK "B[B>=VarBegin] cSub"wB wG
126 #define wI "x[isInteger(x)]"aA
127 #define wH "x[x>Value_t(0)]"
129 #define wF wB"A[IsComparisonOpcode(A)]"
131 #define wD "B[IsNeverNegativeValueOpcode(B)] "
132 #define wC "x[x==Value_t(1)] "
136 #define w8 "B[IsBinaryOpcode(B)&&!HasInvalidRangesOpcode(B)] "oZ
137 #define w7 "A[IsNeverNegativeValueOpcode(A)] "
140 #define w4 "A[A>=VarBegin&&mData->mByteCode.size()>2] "
141 #define w3 "x[x==Value_t(0)] "
143 #define w1 FP_TRACE_BYTECODE_ADD
144 #define w0 mH mZ y wA
145 #define oZ "A[IsBinaryOpcode(A)&&!HasInvalidRangesOpcode(A)] "w3 w2
146 #define oY mZ FP_TRACE_OPCODENAME
147 #define oX " with"wS<<
148 #define oW FP_TRACE_BYTECODE_OPTIMIZATION
159 #define oL incStackPtr();g4
202 #define dE cGreaterOrEq
223 #define hT Default4;h7
224 #define hS pop_back();
237 #define hF TailCall_cTan
238 #define hE TailCall_cSub
239 #define hD TailCall_cNeg
241 #define hB q9 2;oB 0;)
242 #define hA q9 o3 q0-=2;
246 #define h6 ,y gU Lba;
249 #define h3 >=VarBegin
250 #define h2 isEvenInteger(
256 #define gW fp_const_deg_to_rad<hP>()){
257 #define gV fp_const_rad_to_deg<hP>()){
261 #define gR h7 gF:qN 1 gS>qY
266 #define gM gQ){qP h4 gN
267 #define gL DegreesToRadians(x);
268 #define gK IsLogicalOpcode(A)){
271 #define gH IsUnaryOpcode(
272 #define gG IsAlwaysIntegerOpcode(A)){
279 #define g9 IsNeverNegativeValueOpcode(B)){
284 #define g4 --mStackPtr;q5
285 #define g3 &&!HasInvalidRangesOpcode(
286 #define g2 hR mByteCode
289 #define qZ FP_ReDefinePointers();
291 #define qX IsNeverNegativeValueOpcode(A)){
302 #define qM if(!q0){q4
303 #define qL AddFunctionOpcode(
304 #define qK q5 Default0;
306 #define qI g2.push_back(
307 #define qH hR dH.push_back(
312 #define qC ==q7){x=q2[0];
313 #define qB h7 q7:x=q2[0];
314 #define qA hQ q0[0]){h7
315 #define q9 for(hC tmp=
316 #define q8 g2 q6 q0-=1;
320 #define q4 q5 Laa;}h7
324 #define q0 ByteCodePtr
326 #define FP_ReDefinePointers() q0=!g2.empty()?&g2[0]+g2 dO-1:0;q2=!hR dH.empty()?&hR dH[0]+hR dH dO-1:0;
329 #if(!FP_FLOAT_VERSION)
337 opcode){TailCall_cAbs:qM
462 wG,"[DO_STACKPLUS1] A "
471 wG,"[DO_STACKPLUS1] A "
497 cSin:mK(428,wO"cSin "
518 hH==cSin){mK(430,wO"cSin "
557 a7(335,"A[IsLogicalOpcode(A)] "
602 TailCall_cGreaterOrEq:qM
617 a0,"[fp_lessOrEq(x,y)]"
622 cSqrt:oW(75,m4" cInv"
658 TailCall_cLessOrEq:qM
674 aH,"[fp_lessOrEq(y,x)]"
804 w8,aQ,q31(A)q51(B)q21
811 mF(142,"C[C>=VarBegin] "
812 w8,aQ,q31(A)q51(B)q61(C)wA);q5
815 C)mF(143,"C[IsUnaryOpcode(C)&&!HasInvalidRangesOpcode(C)] "
817 aQ,q31(A)q51(B)q61(C)wA);q5
824 wE,q31(A)q51(B)wA);q5
827 B)mF(139,"B[IsUnaryOpcode(B)&&!HasInvalidRangesOpcode(B)] "
828 oZ,aQ,q31(A)q51(B)wA);q5
838 A)mF(137,"A[IsUnaryOpcode(A)&&!HasInvalidRangesOpcode(A)] "
887 if(y*mR(192,"y[y*x==Value_t(1)]"
926 2)mF(146,"x[x==Value_t(2)]"
929 Ldn;gX-1)mF(184,"x[x==Value_t(-1)]"
948 Default4:;mK(388,"B[B==A]"
984 mF(408,"D[D==B] C[C==A]"
985 w5"B[B>=VarBegin&&mData->mByteCode.size()>1] A[IsUnaryOpcode(A)]"
988 wE,aE(A)q51(B)q61(C)<<", D "
998 a7(336,"A[IsLogicalOpcode(A)] "
1005 wN,"[fp_nequal(y,x)]"
1049 a7(303,"A[IsLogicalOpcode(A)] "
1056 mF(304,"A[A!=cImmed] "
1063 cAbsNotNot:oW(299,"cAbsNotNot"
1141 hX:oW(437,"cSinCos cRDiv"
1164 cCos:mK(431,wO"cCos "
1167 aL,aE(A)q51(B)wA);q5
1169 cSin:mK(429,wO"cSin "
1179 hH==cCsc){mK(433,wO"cCsc "
1182 aL,aE(A)q51(B)wA);q5
1197 cSqrt:gZ]==cAdd){hH==hK){A=gE;qV){qN
1211 aM"B[IsUnaryOpcode(B)] "
1257 ,"[DO_STACKPLUS1] A cSub "
1265 hH==cCot){mK(435,wO"cCot "
1268 aL,aE(A)q51(B)wA);q5
1274 IsComparisonOpcode(A)){d7
1285 wF,mJ"{OppositeComparisonOpcode(A)}"
1297 mF(406,wO"A[A>=VarBegin&&mData->mByteCode.size()>0]"
1299 mM,aE(A)q51(B)wA);q5
1311 mF(407,"D[D==B] C[C==A] B[B>=VarBegin&&mData->mByteCode.size()>1] A[IsUnaryOpcode(A)]"
1313 mM,aE(A)q51(B)q61(C)<<", D "
1326 TailCall_cAbs;Lac:gB
1333 TailCall_cMul;Lae:q9
1342 cSub;Lgd:w1(cSub);q5
1347 TailCall_cAdd;Lai:hG
1353 TailCall_cRSub;Laj:gA
1388 dB;Lgl:w1(cNotNot);q5
1389 TailCall_cNotNot;Lbc:g5
1395 cInv;Lgm:w1(cInv);q5
1396 TailCall_cInv;Lbe:qQ
1412 TailCall_cDiv;Lbi:g5
1421 TailCall_cEqual;Lbl:qT
1427 TailCall_cNot;Lbm:qS
1465 TailCall_cSqr;Lck:qQ
1569 TailCall_cNEqual;Lec:gA
1591 TailCall_cLessOrEq;Lek:a6
1593 TailCall_cLess;Lel:a6
1594 dE;w1(cGreaterOrEq);q5
1595 TailCall_cGreaterOrEq;Lem:a6
1597 TailCall_cGreater;Leo:gB
1607 TailCall_cCot;Lfc:qT
1657 OppositeComparisonOpcode(A)mV
1681 #if(FP_FLOAT_VERSION)
1689 opcode){TailCall_cAbs:qM
1707 mF(52,"x[x>=Value_t(-1)&&x<=Value_t(1)] cAcos"
1713 mF(49,"x[x>=Value_t(1)] cAcosh"
1735 wG,w2" [Value_t(4)]"
1825 wG,"[DO_STACKPLUS1] A "
1834 wG,"[DO_STACKPLUS1] A "
1851 mF(53,"x[x>=Value_t(-1)&&x<=Value_t(1)] cAsin"
1877 mF(51,"x[x>Value_t(-1)&&x<Value_t(1)] cAtanh"
1900 oW(310,"A[IsAlwaysIntegerOpcode(A)] "
1926 aL,aE(A)q51(B)wA);q5
1928 cSin:mK(428,wO"cSin "
1940 cAsinh:oW(365,"cAsinh "
1941 aP,"[DO_STACKPLUS1] "
1962 aL,aE(A)q51(B)wA);q5
1969 hH==cSin){mK(430,wO"cSin "
1972 aL,aE(A)q51(B)wA);q5
1978 ,"[RadiansToDegrees(x)]"
2029 hX:oW(436,"cSinCos "
2046 oW(207,"y[(y/x)==fp_const_rad_to_deg<Value_t>()]"
2050 oW(208,"y[(y/x)==fp_const_deg_to_rad<Value_t>()]"
2076 wP,"[DO_STACKPLUS1] "
2079 aY,aE(A)q51(B)wA);oL
2093 oW(96,"B[B>=VarBegin] cRDiv "
2117 wZ,"[fp_equal(y,x)]"
2144 a1,a1" [fp_exp2(x)]"
2157 oW(410,a1,"[DO_STACKPLUS1] [fp_log(Value_t(2))]"
2160 Ldp;TailCall_cFloor:qM
2172 oW(309,"A[IsAlwaysIntegerOpcode(A)] "
2176 TailCall_cGreater:qM
2182 oW(345,"x[x==Value_t(-0.5)] "
2186 TailCall_cGreaterOrEq:qM
2191 a0,"[Value_t(0.5)/x]"
2197 a0,"[fp_lessOrEq(x,y)]"
2201 oW(344,"x[x==Value_t(0.5)] "
2207 q7:x=q2[0];oW(62,"x cInt"
2212 oW(311,"A[IsAlwaysIntegerOpcode(A)] cInt"
2218 cCos:oW(374,"cCos cInv"
2222 cCot:oW(378,"cCot cInv"
2226 cCsc:oW(376,"cCsc cInv"
2237 cSec:oW(377,mO"cInv"
2241 cSin:oW(373,"cSin cInv"
2245 cSqrt:oW(75,m4" cInv"
2272 m3,"[Value_t(0.5)/x]"
2282 oW(343,"x[x==Value_t(0.5)] "
2285 TailCall_cLessOrEq:qM
2288 aH,"[fp_lessOrEq(y,x)]"
2291 oW(346,"x[x==Value_t(-0.5)] "
2302 aS,aS" [fp_log(x)] "
2319 a4,"[DO_STACKPLUS1] [fp_log10(fp_const_e<Value_t>())]"
2324 a4,a4" [fp_log10(x)] "
2341 a2,"[DO_STACKPLUS1] [fp_log2(fp_const_e<Value_t>())]"
2349 a2,a2" [fp_log2(x)] "
2378 mM,aE(A)q51(B)wA);oM
2384 aZ,aE(A)q51(B)wA);oN}
2401 mM,aE(A)q51(B)wA);oM
2407 m0,aE(A)q51(B)wA);oN}
2440 a9,aE(A)q51(B)wA);q5
2485 w8,aQ,q31(A)q51(B)q21
2492 mF(142,"C[C>=VarBegin] "
2493 w8,aQ,q31(A)q51(B)q61(C)wA);q5
2496 C)mF(143,"C[IsUnaryOpcode(C)&&!HasInvalidRangesOpcode(C)] "
2498 aQ,q31(A)q51(B)q61(C)wA);q5
2505 wE,q31(A)q51(B)wA);q5
2508 B)mF(139,"B[IsUnaryOpcode(B)&&!HasInvalidRangesOpcode(B)] "
2509 oZ,aQ,q31(A)q51(B)wA);q5
2519 A)mF(137,"A[IsUnaryOpcode(A)&&!HasInvalidRangesOpcode(A)] "
2530 dM+mR(202,"cDup[x+x==Value_t(1)] "
2563 w2,"[RadiansToDegrees(x)]"
2604 dM+mR(204,"cDup[x+x==Value_t(1)] "
2615 oW(189,"y[(y*x)==fp_const_rad_to_deg<Value_t>()]"
2619 oW(190,"y[(y*x)==fp_const_deg_to_rad<Value_t>()]"
2623 y*mR(192,"y[y*x==Value_t(1)]"
2654 w2,"[DegreesToRadians(x)]"
2684 2)mF(146,"x[x==Value_t(2)]"
2689 oW(147,"x[x==fp_const_rad_to_deg<Value_t>()]"
2694 oW(148,"x[x==fp_const_deg_to_rad<Value_t>()]"
2697 Lib;gX-1)mF(184,"x[x==Value_t(-1)]"
2706 aN,"[DO_STACKPLUS1] A"
2709 aY,aE(A)q51(B)wA);oL
2722 a9,aE(A)q51(B)wA);q5
2726 dK:;mK(388,"B[B==A]"
2730 wE,aE(A)q51(B)wA);q5
2740 a9,aE(A)q51(B)wA);q5
2748 aN,"[DO_STACKPLUS1] A "
2756 aN,"[DO_STACKPLUS1] A"
2763 wT,aE(A)q51(B)wA);q5
2778 mF(408,"D[D==B] C[C==A]"
2779 w5"B[B>=VarBegin&&mData->mByteCode.size()>1] A[IsUnaryOpcode(A)]"
2782 wE,aE(A)q51(B)q61(C)<<", D "
2805 wN,"[fp_nequal(y,x)]"
2864 a7(303,"A[IsLogicalOpcode(A)] "
2870 mF(304,"A[A!=cImmed] "
2877 cAbsNotNot:oW(299,"cAbsNotNot"
2942 mF(22,m2"x[!isEvenInteger(x+x)]"
2959 oI!isInteger(y)mF(42,"y[!isInteger(y)]"
2974 oW(348,aG" x[isEvenInteger(x)]"
2980 w5"x[isEvenInteger(x)]"
2993 oW(223,"x[x==Value_t(0.5)]"
2997 3)mF(224,"x[x==Value_t(1)/Value_t(3)]"
3001 1)/qD-3)mF(225,"x[x==Value_t(1)/Value_t(-3)]"
3005 oW(226,"x[x==Value_t(-0.5)]"
3008 Lkf;gX-1)mF(227,"x[x==Value_t(-1)]"
3017 x*y)mF(21,"y[isEvenInteger(y)&&!isEvenInteger(x*y)]"
3036 oW(92,"y[y!=Value_t(0)||x>=Value_t(0)]"
3044 TryCompilePowi(x))g6}
3049 hX:oW(437,"cSinCos cRDiv"
3071 ,"[DegreesToRadians(x)]"
3076 ,"[DegreesToRadians(x)]"
3085 cCos:mK(431,wO"cCos "
3088 aL,aE(A)q51(B)wA);q5
3090 cSin:mK(429,wO"cSin "
3108 hH==cCsc){mK(433,wO"cCsc "
3111 aL,aE(A)q51(B)wA);q5
3118 cAcosh:oW(364,"cAcosh cSinh"
3123 cAsinh:oW(240,"cAsinh cSinh"
3169 aM"B[IsUnaryOpcode(B)] "
3183 oW(68,"x[x>=Value_t(0)] "
3223 ,"[DO_STACKPLUS1] A cSub "
3229 cAtan2:oW(245,"cAtan2 cTan"
3242 hH==cCot){mK(435,wO"cCot "
3245 aL,aE(A)q51(B)wA);q5
3264 q7:x=q2[0];oW(72,"x cTrunc"
3269 oW(308,"A[IsAlwaysIntegerOpcode(A)] cTrunc"
3276 IsComparisonOpcode(A)){d7
3286 cAtan:if(d8<fp_const_pi<hP>()*qD
3288 oW(286,"cAtan[fp_abs(x)<fp_const_pi<Value_t>()*Value_t(0.5)]"
3294 cExp:mE(276,"cExp[x>Value_t(0)]"
3300 dC:mE(277,"cExp2[x>Value_t(0)]"
3310 wF,wQ"[fp_exp(x)] A"
3319 wF,wQ"[fp_pow(Value_t(10),x)] A"
3328 wF,wQ"[fp_exp2(x)] A"
3336 oW(272,"y[y>Value_t(0)]"
3337 w5"x A[IsComparisonOpcode(A)]"
3342 oW(273,"y[y<Value_t(0)]"
3343 w5"x A[IsComparisonOpcode(A)]"
3344 ,"[x/y] {OppositeComparisonOpcode(A)}"
3349 wF,mJ"{OppositeComparisonOpcode(A)}"
3358 oW(274,"y[y>Value_t(0)] cPow[x>Value_t(0)]"
3359 wF,"[fp_pow(x,1/y)] A"
3366 wF,"[fp_asinh(x)] A"
3371 hK:mE(275,"cSqr[x>Value_t(0)]"
3372 wF,aG" [fp_sqrt(x)] A"
3379 mF(288,"cTanh[fp_abs(x)<Value_t(1)]"
3380 wF,"[fp_atanh(x)] A"
3392 mF(406,wO"A[A>=VarBegin&&mData->mByteCode.size()>0]"
3394 mM,aE(A)q51(B)wA);q5
3406 mF(407,"D[D==B] C[C==A] B[B>=VarBegin&&mData->mByteCode.size()>1] A[IsUnaryOpcode(A)]"
3408 mM,aE(A)q51(B)q61(C)<<", D "
3421 TailCall_cAbs;Lac:gB
3434 TailCall_cMul;Lag:q9
3443 cSub;Lne:w1(cSub);q5
3448 TailCall_cAdd;Lak:hG
3454 TailCall_cRSub;Lal:gA
3489 dB;Lnm:w1(cNotNot);q5
3490 TailCall_cNotNot;Lbe:g5
3520 TailCall_cCos;Lbo:gB
3526 cInv;Lnp:w1(cInv);q5
3527 TailCall_cInv;Lbq:qQ
3532 TailCall_cCosh;Lcb:qG
3539 TailCall_cSqrt;Lcc:gB
3590 TailCall_cDeg;Lda:dY;qJ
3594 TailCall_cRad;Ldb:g5
3602 TailCall_cDiv;Ldd:g5
3621 TailCall_cRDiv;Ldh:q9
3632 TailCall_cEqual;Ldj:g5
3658 TailCall_cExp;Ldq:qG
3691 TailCall_cSec;Lei:a6
3692 cSin;Lon:w1(cSin);q5
3693 TailCall_cSin;Lej:qG
3697 TailCall_cPow;Lek:a6
3701 TailCall_cCsc;Lem:qG
3706 TailCall_cCot;Leo:gB
3713 TailCall_cNot;Lfa:g5
3742 fp_const_e<hP>()));Lpb:q0[0]=q7;q5
3785 TailCall_cSqr;Lgc:a6
3950 TailCall_cNEqual;Lij:g5
3963 TailCall_cSinh;Lin:gA
3971 TailCall_cTanh;Lip:gA
3979 TailCall_cLessOrEq;Lje:a6
3981 TailCall_cLess;Ljf:a6
3982 dE;w1(cGreaterOrEq);q5
3983 TailCall_cGreaterOrEq;Ljg:a6
3985 TailCall_cGreater;Ljh:a6
4003 TailCall_cExp2;Ljo:g5
4034 TailCall_cCbrt;Lke:qT
4158 OppositeComparisonOpcode(A)mV
4212 #undef FP_ReDefinePointers
4213 #undef FP_TRACE_BYTECODE_OPTIMIZATION
4214 #undef FP_TRACE_OPCODENAME