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

Function genWriteBarrier

src/hx/cppia/Cppia.cpp:3865–3887  ·  view source on GitHub ↗

objVal - should not be sJitTemp1

Source from the content-addressed store, hash-verified

3863
3864// objVal - should not be sJitTemp1
3865void genWriteBarrier(CppiaCompiler *compiler, JitReg objVal, JitVal valuePtr)
3866{
3867
3868 // unsigned char mark = ((unsigned char *)(obj))[ HX_ENDIAN_MARK_ID_BYTE] != ctx->byteMarkId
3869 compiler->move(sJitTemp1, objVal.star(jtByte, HX_ENDIAN_MARK_ID_BYTE) );
3870 JumpId newMark = compiler->compare(cmpI_NOT_EQUAL,sJitTemp1,sJitCtx.star(jtInt, offsetof(hx::StackContext,byteMarkId)));
3871
3872 compiler->move(sJitTemp1, valuePtr );
3873
3874 // Value != 0
3875 JumpId nullValue = compiler->compare(cmpP_ZERO, sJitTemp1.as(jtPointer),0);
3876 compiler->move(sJitTemp1, sJitTemp1.star(jtByte, HX_ENDIAN_MARK_ID_BYTE) );
3877 JumpId notNursery = compiler->compare(cmpI_NOT_ZERO, sJitTemp1, 0);
3878
3879 // TODO - not use temp?
3880 JitTemp tmpObj(compiler, jtPointer);
3881 compiler->move(tmpObj, objVal);
3882 compiler->callNative( (void *)pushWriteBarrier, sJitCtx, tmpObj );
3883
3884 compiler->comeFrom(notNursery);
3885 compiler->comeFrom(nullValue);
3886 compiler->comeFrom(newMark);
3887}
3888
3889
3890#endif

Callers 4

genCodeMethod · 0.85
genCodeMethod · 0.85
genCodeMethod · 0.85
genCodeMethod · 0.85

Calls 6

moveMethod · 0.80
asMethod · 0.80
callNativeMethod · 0.80
comeFromMethod · 0.80
starMethod · 0.45
compareMethod · 0.45

Tested by

no test coverage detected