| 5100 | |
| 5101 | #ifdef CPPIA_JIT |
| 5102 | void genCode(CppiaCompiler *compiler, const JitVal &inDest, ExprType destType) HXCPP_OVERRIDE |
| 5103 | { |
| 5104 | int n = items.size(); |
| 5105 | switch(arrayType) |
| 5106 | { |
| 5107 | case arrBool: |
| 5108 | compiler->callNative( (void *)createArrayBool, n); |
| 5109 | break; |
| 5110 | case arrUnsignedChar: |
| 5111 | compiler->callNative( (void *)createArrayUChar, n); |
| 5112 | break; |
| 5113 | case arrInt: |
| 5114 | compiler->callNative( (void *)createArrayInt, n); |
| 5115 | break; |
| 5116 | case arrFloat: |
| 5117 | compiler->callNative( (void *)createArrayFloat, n); |
| 5118 | break; |
| 5119 | case arrFloat32: |
| 5120 | compiler->callNative( (void *)createArrayFloat32, n); |
| 5121 | break; |
| 5122 | case arrString: |
| 5123 | compiler->callNative( (void *)createArrayString, n); |
| 5124 | break; |
| 5125 | case arrAny: |
| 5126 | compiler->callNative( (void *)createArrayAny, n); |
| 5127 | break; |
| 5128 | case arrObject: |
| 5129 | compiler->callNative( (void *)createArrayObject, n); |
| 5130 | break; |
| 5131 | |
| 5132 | default: |
| 5133 | CPPIALOG("unknown array creation\n"); |
| 5134 | } |
| 5135 | JitTemp array(compiler, jtPointer); |
| 5136 | compiler->move( array, sJitReturnReg ); |
| 5137 | |
| 5138 | JitTemp arrayPtr(compiler, jtPointer); |
| 5139 | compiler->move( arrayPtr, sJitReturnReg.star() + hx::ArrayBase::baseOffset() ); |
| 5140 | for(int i=0;i<n;i++) |
| 5141 | { |
| 5142 | switch(arrayType) |
| 5143 | { |
| 5144 | case arrInt: |
| 5145 | items[i]->genCode(compiler, sJitTemp0, etInt ); |
| 5146 | compiler->move(sJitTemp1, arrayPtr); |
| 5147 | compiler->move(sJitTemp1.star(jtInt)+i*sizeof(int), sJitTemp0.as(jtInt)); |
| 5148 | break; |
| 5149 | case arrObject: |
| 5150 | items[i]->genCode(compiler, sJitTemp0, etObject ); |
| 5151 | compiler->move(sJitTemp1, arrayPtr); |
| 5152 | compiler->move(sJitTemp1.star(jtPointer)+i*sizeof(void *), sJitTemp0.as(jtPointer)); |
| 5153 | #ifdef HXCPP_GC_GENERATIONAL |
| 5154 | compiler->move(sJitTemp2, array); |
| 5155 | genWriteBarrier(compiler, sJitTemp2, sJitTemp0 ); |
| 5156 | #endif |
| 5157 | break; |
| 5158 | case arrBool: |
| 5159 | case arrUnsignedChar: |
nothing calls this directly
no test coverage detected