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

Method convert

src/hx/cppia/CppiaCompiler.cpp:826–997  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

824
825
826 void convert(const JitVal &inSrc, ExprType inSrcType, const JitVal &inTarget, ExprType inToType, bool asBool=false) HXCPP_OVERRIDE
827 {
828 if (!inTarget.valid())
829 return;
830
831 if (inSrcType==inToType)
832 {
833 JitType jt = getJitType(inSrcType);
834 getTarget(inSrc.as(jt));
835 getTarget(inTarget.as(jt));
836 move( inTarget.as(jt), inSrc.as(jt) );
837 }
838 else if (inToType==etObject)
839 {
840 switch(inSrcType)
841 {
842 case etInt:
843 if (asBool)
844 {
845 JumpId isFalse = compare( cmpI_ZERO, inSrc.as(jtInt), 0, 0);
846 move(inTarget.as(jtPointer), (void *)Dynamic(true).mPtr);
847 JumpId done = jump();
848 comeFrom(isFalse);
849 move(inTarget.as(jtPointer), (void *)Dynamic(false).mPtr);
850 comeFrom(done);
851 }
852 else
853 {
854 callNative( (void *)intToObj, inSrc.as(jtInt));
855 if (inTarget!=sJitReturnReg)
856 emit_op1(SLJIT_MOV_P, inTarget, sJitReturnReg.as(jtPointer));
857 }
858 break;
859
860 case etFloat:
861 callNative( (void *)floatToObj, inSrc.as(jtFloat));
862 if (inTarget!=sJitReturnReg)
863 emit_op1(SLJIT_MOV_P, inTarget, sJitReturnReg);
864 break;
865
866 case etObject:
867 move(inTarget.as(jtPointer), inSrc.as(jtPointer));
868 break;
869
870 case etString:
871 add( sJitArg0, inSrc.getReg().as(jtPointer), inSrc.offset );
872 callNative( (void *)strToObj, sJitArg0);
873 if (inTarget!=sJitReturnReg)
874 emit_op1(SLJIT_MOV_P, inTarget, sJitReturnReg.as(jtPointer));
875 break;
876
877 default:
878 move(inTarget, (void *)0);
879 }
880 }
881 else if (inToType==etString)
882 {
883 switch(inSrcType)

Callers 15

genCodeMethod · 0.80
genCodeMethod · 0.80
genCodeMethod · 0.80
genCodeMethod · 0.80
genCodeMethod · 0.80
genCodeMethod · 0.80
genCodeMethod · 0.80
genCodeMethod · 0.80
genCodeMethod · 0.80
genBitOpSetFunction · 0.80
genSetterFunction · 0.80
genCodeMethod · 0.80

Calls 9

getJitTypeFunction · 0.85
compareFunction · 0.85
isMemoryValFunction · 0.85
validMethod · 0.80
asMethod · 0.80
getRegMethod · 0.80
usesMethod · 0.80
DynamicClass · 0.50
StringClass · 0.50

Tested by

no test coverage detected