| 6742 | } |
| 6743 | #ifdef CPPIA_JIT |
| 6744 | void genCode(CppiaCompiler *compiler, const JitVal &inDest, ExprType destType) HXCPP_OVERRIDE |
| 6745 | { |
| 6746 | if (destType==etVoid) |
| 6747 | { |
| 6748 | left->genCode(compiler,JitVal(),etVoid); |
| 6749 | right->genCode(compiler,JitVal(),etVoid); |
| 6750 | } |
| 6751 | else if (destType==etInt || (left->getType()==etInt && right->getType()==etInt) ) |
| 6752 | { |
| 6753 | JitTemp lval(compiler,jtInt); |
| 6754 | left->genCode(compiler,lval,etInt); |
| 6755 | right->genCode(compiler,sJitTemp0.as(jtInt),etInt); |
| 6756 | if (destType==etInt) |
| 6757 | compiler->mult(inDest.as(jtInt),lval,sJitTemp0.as(jtInt),false); |
| 6758 | else |
| 6759 | { |
| 6760 | compiler->mult(sJitTemp1.as(jtInt),lval,sJitTemp0.as(jtInt),false); |
| 6761 | compiler->convert(sJitTemp1.as(jtInt),etInt, inDest, destType); |
| 6762 | } |
| 6763 | } |
| 6764 | else |
| 6765 | { |
| 6766 | JitTemp lval(compiler,jtFloat); |
| 6767 | left->genCode(compiler,lval,etFloat); |
| 6768 | right->genCode(compiler,sJitTempF0,etFloat); |
| 6769 | if (destType==etFloat && !isMemoryVal(inDest) ) |
| 6770 | { |
| 6771 | compiler->mult(inDest.as(jtFloat),lval,sJitTempF0,true); |
| 6772 | } |
| 6773 | else |
| 6774 | { |
| 6775 | compiler->mult(sJitTempF1,lval,sJitTempF0,true); |
| 6776 | compiler->convert(sJitTempF1,etFloat, inDest, destType); |
| 6777 | } |
| 6778 | } |
| 6779 | } |
| 6780 | #endif |
| 6781 | }; |
| 6782 | |