| 7554 | } |
| 7555 | #ifdef CPPIA_JIT |
| 7556 | void genCode(CppiaCompiler *compiler, const JitVal &inDest, ExprType destType) HXCPP_OVERRIDE |
| 7557 | { |
| 7558 | if (destType==etVoid) |
| 7559 | { |
| 7560 | left->genCode(compiler,JitVal(),etVoid); |
| 7561 | right->genCode(compiler,JitVal(),etVoid); |
| 7562 | } |
| 7563 | else if (destType==etInt || (left->getType()==etInt && right->getType()==etInt && destType==etObject) ) |
| 7564 | { |
| 7565 | JitTemp temp(compiler,jtInt); |
| 7566 | left->genCode(compiler,temp,etInt); |
| 7567 | right->genCode(compiler,sJitTemp0,etInt); |
| 7568 | if (destType==etObject) |
| 7569 | { |
| 7570 | compiler->add( sJitTemp0.as(jtInt), temp, sJitTemp0.as(jtInt) ); |
| 7571 | compiler->convert(sJitTemp0, etInt, inDest, destType); |
| 7572 | } |
| 7573 | else |
| 7574 | { |
| 7575 | compiler->add( inDest, temp, sJitTemp0.as(jtInt) ); |
| 7576 | } |
| 7577 | } |
| 7578 | else |
| 7579 | { |
| 7580 | JitTemp temp(compiler,jtFloat); |
| 7581 | left->genCode(compiler,temp,etFloat); |
| 7582 | right->genCode(compiler,sJitTempF0,etFloat); |
| 7583 | if (destType==etObject || destType==etString) |
| 7584 | { |
| 7585 | compiler->add( sJitTempF0, temp, sJitTempF0 ); |
| 7586 | compiler->convert(sJitTempF0, etFloat, inDest, destType); |
| 7587 | } |
| 7588 | else |
| 7589 | { |
| 7590 | compiler->add( inDest, temp, sJitTempF0 ); |
| 7591 | } |
| 7592 | } |
| 7593 | } |
| 7594 | #endif |
| 7595 | }; |
| 7596 | |