MCPcopy Create free account
hub / github.com/HaxeFoundation/hxcpp / genCode

Method genCode

src/hx/cppia/Cppia.cpp:4269–4419  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4267
4268 #ifdef CPPIA_JIT
4269 void genCode(CppiaCompiler *compiler, const JitVal &inDest,ExprType destType) HXCPP_OVERRIDE
4270 {
4271 CrementOp op = (CrementOp)CREMENT::OP;
4272 int diff = op==coPostDec || op==coPreDec ? -1 : 1;
4273
4274 JitVal ioPtr;
4275
4276 switch(REFMODE)
4277 {
4278 case locObj:
4279 object->genCode(compiler, sJitTemp0.as(jtPointer), etObject);
4280 genNullReferenceExceptionCheck(compiler, sJitTemp0);
4281 ioPtr = sJitTemp0.star() + offset;
4282 break;
4283
4284 case locThis:
4285 ioPtr = sJitThis.star() + offset;
4286 break;
4287
4288 case locAbsolute:
4289 compiler->move( sJitTemp0, JitVal( (void *)pointer ) );
4290 ioPtr = sJitTemp0.star();
4291 break;
4292
4293 case locStack:
4294 ioPtr = JitFramePos(offset,jtInt);
4295 break;
4296 }
4297
4298 switch(getType())
4299 {
4300 case etInt:
4301 ioPtr.type = jtInt;
4302 if ( inDest.type==jtVoid)
4303 {
4304 compiler->move( sJitTemp1.as(jtInt), ioPtr );
4305 compiler->add( ioPtr, sJitTemp1.as(jtInt), diff );
4306 }
4307 else if (op==coPostInc || op==coPostDec)
4308 {
4309 if (destType==etInt)
4310 {
4311 compiler->move( sJitTemp1.as(jtInt), ioPtr );
4312 compiler->add( ioPtr, sJitTemp1.as(jtInt), diff );
4313 compiler->move( inDest, sJitTemp1.as(jtInt) );
4314 }
4315 else
4316 {
4317 JitTemp result(compiler, jtInt);
4318 compiler->move( result, ioPtr );
4319 compiler->add( ioPtr, ioPtr, diff );
4320 compiler->convert( result, etInt, inDest, destType );
4321 }
4322 }
4323 else
4324 {
4325 if (destType==etInt)
4326 {

Callers

nothing calls this directly

Calls 12

JitValClass · 0.85
JitFramePosClass · 0.85
asMethod · 0.80
moveMethod · 0.80
convertMethod · 0.80
callNativeMethod · 0.80
convertReturnRegMethod · 0.80
traceMethod · 0.80
genCodeMethod · 0.45
starMethod · 0.45
addMethod · 0.45

Tested by

no test coverage detected