• Home
  • Raw
  • Download

Lines Matching refs:mir

47 static bool genConversionCall(CompilationUnit *cUnit, MIR *mir, void *funct,  in genConversionCall()  argument
58 rlSrc = dvmCompilerGetSrc(cUnit, mir, 0); in genConversionCall()
61 rlSrc = dvmCompilerGetSrcWide(cUnit, mir, 0, 1); in genConversionCall()
69 rlDest = dvmCompilerGetDest(cUnit, mir, 0); in genConversionCall()
74 rlDest = dvmCompilerGetDestWide(cUnit, mir, 0, 1); in genConversionCall()
81 static bool genArithOpFloatPortable(CompilationUnit *cUnit, MIR *mir, in genArithOpFloatPortable() argument
88 switch (mir->dalvikInsn.opcode) { in genArithOpFloatPortable()
127 static bool genArithOpDoublePortable(CompilationUnit *cUnit, MIR *mir, in genArithOpDoublePortable() argument
134 switch (mir->dalvikInsn.opcode) { in genArithOpDoublePortable()
176 static bool genConversionPortable(CompilationUnit *cUnit, MIR *mir) in genConversionPortable() argument
178 Opcode opcode = mir->dalvikInsn.opcode; in genConversionPortable()
182 return genConversionCall(cUnit, mir, (void*)__aeabi_i2f, 1, 1); in genConversionPortable()
184 return genConversionCall(cUnit, mir, (void*)__aeabi_f2iz, 1, 1); in genConversionPortable()
186 return genConversionCall(cUnit, mir, (void*)__aeabi_d2f, 2, 1); in genConversionPortable()
188 return genConversionCall(cUnit, mir, (void*)__aeabi_f2d, 1, 2); in genConversionPortable()
190 return genConversionCall(cUnit, mir, (void*)__aeabi_i2d, 1, 2); in genConversionPortable()
192 return genConversionCall(cUnit, mir, (void*)__aeabi_d2iz, 2, 1); in genConversionPortable()
194 return genConversionCall(cUnit, mir, (void*)dvmJitf2l, 1, 2); in genConversionPortable()
196 return genConversionCall(cUnit, mir, (void*)__aeabi_l2f, 2, 1); in genConversionPortable()
198 return genConversionCall(cUnit, mir, (void*)dvmJitd2l, 2, 2); in genConversionPortable()
200 return genConversionCall(cUnit, mir, (void*)__aeabi_l2d, 2, 2); in genConversionPortable()
301 static void genIGetWide(CompilationUnit *cUnit, MIR *mir, int fieldOffset) in genIGetWide() argument
303 RegLocation rlObj = dvmCompilerGetSrc(cUnit, mir, 0); in genIGetWide()
304 RegLocation rlDest = dvmCompilerGetDestWide(cUnit, mir, 0, 1); in genIGetWide()
311 genNullCheck(cUnit, rlObj.sRegLow, rlObj.lowReg, mir->offset, in genIGetWide()
325 static void genIPutWide(CompilationUnit *cUnit, MIR *mir, int fieldOffset) in genIPutWide() argument
327 RegLocation rlSrc = dvmCompilerGetSrcWide(cUnit, mir, 0, 1); in genIPutWide()
328 RegLocation rlObj = dvmCompilerGetSrc(cUnit, mir, 2); in genIPutWide()
332 genNullCheck(cUnit, rlObj.sRegLow, rlObj.lowReg, mir->offset, in genIPutWide()
348 static void genIGet(CompilationUnit *cUnit, MIR *mir, OpSize size, in genIGet() argument
353 RegLocation rlObj = dvmCompilerGetSrc(cUnit, mir, 0); in genIGet()
354 RegLocation rlDest = dvmCompilerGetDest(cUnit, mir, 0); in genIGet()
357 genNullCheck(cUnit, rlObj.sRegLow, rlObj.lowReg, mir->offset, in genIGet()
361 loadBaseDisp(cUnit, mir, rlObj.lowReg, fieldOffset, rlResult.lowReg, in genIGet()
375 static void genIPut(CompilationUnit *cUnit, MIR *mir, OpSize size, in genIPut() argument
379 RegLocation rlSrc = dvmCompilerGetSrc(cUnit, mir, 0); in genIPut()
380 RegLocation rlObj = dvmCompilerGetSrc(cUnit, mir, 1); in genIPut()
383 genNullCheck(cUnit, rlObj.sRegLow, rlObj.lowReg, mir->offset, in genIPut()
405 static void genArrayGet(CompilationUnit *cUnit, MIR *mir, OpSize size, in genArrayGet() argument
420 if (!(mir->OptimizationFlags & MIR_IGNORE_NULL_CHECK)) { in genArrayGet()
422 rlArray.lowReg, mir->offset, NULL); in genArrayGet()
427 if (!(mir->OptimizationFlags & MIR_IGNORE_RANGE_CHECK)) { in genArrayGet()
433 genBoundsCheck(cUnit, rlIndex.lowReg, regLen, mir->offset, in genArrayGet()
474 static void genArrayPut(CompilationUnit *cUnit, MIR *mir, OpSize size, in genArrayPut() argument
497 if (!(mir->OptimizationFlags & MIR_IGNORE_NULL_CHECK)) { in genArrayPut()
499 mir->offset, NULL); in genArrayPut()
502 if (!(mir->OptimizationFlags & MIR_IGNORE_RANGE_CHECK)) { in genArrayPut()
509 genBoundsCheck(cUnit, rlIndex.lowReg, regLen, mir->offset, in genArrayPut()
549 static void genArrayObjectPut(CompilationUnit *cUnit, MIR *mir, in genArrayObjectPut() argument
569 if (!(mir->OptimizationFlags & MIR_IGNORE_NULL_CHECK)) { in genArrayObjectPut()
571 mir->offset, NULL); in genArrayObjectPut()
574 if (!(mir->OptimizationFlags & MIR_IGNORE_RANGE_CHECK)) { in genArrayObjectPut()
579 genBoundsCheck(cUnit, regIndex, regLen, mir->offset, in genArrayObjectPut()
610 genRegImmCheck(cUnit, kArmCondEq, r0, 0, mir->offset, pcrLabel); in genArrayObjectPut()
632 static bool genShiftOpLong(CompilationUnit *cUnit, MIR *mir, in genShiftOpLong() argument
644 switch( mir->dalvikInsn.opcode) { in genShiftOpLong()
665 static bool genArithOpLong(CompilationUnit *cUnit, MIR *mir, in genArithOpLong() argument
677 switch (mir->dalvikInsn.opcode) { in genArithOpLong()
748 genLong3Addr(cUnit, mir, firstOp, secondOp, rlDest, rlSrc1, rlSrc2); in genArithOpLong()
758 genRegImmCheck(cUnit, kArmCondEq, tReg, 0, mir->offset, NULL); in genArithOpLong()
774 static bool genArithOpInt(CompilationUnit *cUnit, MIR *mir, in genArithOpInt() argument
787 switch (mir->dalvikInsn.opcode) { in genArithOpInt()
852 mir->dalvikInsn.opcode, mir->dalvikInsn.opcode); in genArithOpInt()
884 genNullCheck(cUnit, rlSrc2.sRegLow, r1, mir->offset, NULL); in genArithOpInt()
897 static bool genArithOp(CompilationUnit *cUnit, MIR *mir) in genArithOp() argument
899 Opcode opcode = mir->dalvikInsn.opcode; in genArithOp()
904 if (mir->ssaRep->numUses == 2) { in genArithOp()
905 rlSrc1 = dvmCompilerGetSrc(cUnit, mir, 0); in genArithOp()
906 rlSrc2 = dvmCompilerGetSrc(cUnit, mir, 1); in genArithOp()
907 } else if (mir->ssaRep->numUses == 3) { in genArithOp()
908 rlSrc1 = dvmCompilerGetSrcWide(cUnit, mir, 0, 1); in genArithOp()
909 rlSrc2 = dvmCompilerGetSrc(cUnit, mir, 2); in genArithOp()
911 rlSrc1 = dvmCompilerGetSrcWide(cUnit, mir, 0, 1); in genArithOp()
912 rlSrc2 = dvmCompilerGetSrcWide(cUnit, mir, 2, 3); in genArithOp()
913 assert(mir->ssaRep->numUses == 4); in genArithOp()
915 if (mir->ssaRep->numDefs == 1) { in genArithOp()
916 rlDest = dvmCompilerGetDest(cUnit, mir, 0); in genArithOp()
918 assert(mir->ssaRep->numDefs == 2); in genArithOp()
919 rlDest = dvmCompilerGetDestWide(cUnit, mir, 0, 1); in genArithOp()
923 return genArithOpLong(cUnit,mir, rlDest, rlSrc1, rlSrc2); in genArithOp()
926 return genArithOpLong(cUnit,mir, rlDest, rlSrc1, rlSrc2); in genArithOp()
929 return genShiftOpLong(cUnit,mir, rlDest, rlSrc1, rlSrc2); in genArithOp()
932 return genShiftOpLong(cUnit,mir, rlDest, rlSrc1, rlSrc2); in genArithOp()
935 return genArithOpInt(cUnit,mir, rlDest, rlSrc1, rlSrc2); in genArithOp()
938 return genArithOpInt(cUnit,mir, rlDest, rlSrc1, rlSrc2); in genArithOp()
941 return genArithOpFloat(cUnit,mir, rlDest, rlSrc1, rlSrc2); in genArithOp()
944 return genArithOpFloat(cUnit, mir, rlDest, rlSrc1, rlSrc2); in genArithOp()
947 return genArithOpDouble(cUnit,mir, rlDest, rlSrc1, rlSrc2); in genArithOp()
950 return genArithOpDouble(cUnit,mir, rlDest, rlSrc1, rlSrc2); in genArithOp()
964 static void genReturnCommon(CompilationUnit *cUnit, MIR *mir) in genReturnCommon() argument
971 int dPC = (int) (cUnit->method->insns + mir->offset); in genReturnCommon()
978 pcrLabel->operands[1] = mir->offset; in genReturnCommon()
985 static void genProcessArgsNoRange(CompilationUnit *cUnit, MIR *mir, in genProcessArgsNoRange() argument
1002 rlArg = dvmCompilerGetSrc(cUnit, mir, numDone++); in genProcessArgsNoRange()
1011 *pcrLabel = genNullCheck(cUnit, dvmCompilerSSASrc(mir, 0), r0, in genProcessArgsNoRange()
1012 mir->offset, NULL); in genProcessArgsNoRange()
1018 static void genProcessArgsRange(CompilationUnit *cUnit, MIR *mir, in genProcessArgsRange() argument
1052 *pcrLabel = genNullCheck(cUnit, dvmCompilerSSASrc(mir, 0), r0, in genProcessArgsRange()
1053 mir->offset, NULL); in genProcessArgsRange()
1111 static void genInvokeSingletonCommon(CompilationUnit *cUnit, MIR *mir, in genInvokeSingletonCommon() argument
1129 (int) (cUnit->method->insns + mir->offset)); in genInvokeSingletonCommon()
1161 genTrap(cUnit, mir->offset, pcrLabel); in genInvokeSingletonCommon()
1184 static void genInvokeVirtualCommon(CompilationUnit *cUnit, MIR *mir, in genInvokeVirtualCommon() argument
1202 predChainingCell->operands[1] = (int) mir->meta.callsiteInfo->method; in genInvokeVirtualCommon()
1208 (int) (cUnit->method->insns + mir->offset)); in genInvokeVirtualCommon()
1230 int dPC = (int) (cUnit->method->insns + mir->offset); in genInvokeVirtualCommon()
1234 pcrLabel->operands[1] = mir->offset; in genInvokeVirtualCommon()
1290 genTrap(cUnit, mir->offset, pcrLabel); in genInvokeVirtualCommon()
1295 MIR *mir, in genInvokeVirtualWholeMethod() argument
1299 CallsiteInfo *callsiteInfo = mir->meta.callsiteInfo; in genInvokeVirtualWholeMethod()
1314 loadConstant(cUnit, r0, (int) (cUnit->method->insns + mir->offset)); in genInvokeVirtualWholeMethod()
1331 MIR *mir, in genInvokeSingletonWholeMethod() argument
1336 loadConstant(cUnit, r0, (int) (cUnit->method->insns + mir->offset)); in genInvokeSingletonWholeMethod()
1361 static void genInterpSingleStep(CompilationUnit *cUnit, MIR *mir) in genInterpSingleStep() argument
1363 int flags = dexGetFlagsFromOpcode(mir->dalvikInsn.opcode); in genInterpSingleStep()
1373 if (mir->dalvikInsn.opcode == OP_NOP) in genInterpSingleStep()
1379 if ((mir->next == NULL) || (flags & flagsToCheck)) { in genInterpSingleStep()
1380 genPuntToInterp(cUnit, mir->offset); in genInterpSingleStep()
1387 loadConstant(cUnit, r0, (int) (cUnit->method->insns + mir->offset)); in genInterpSingleStep()
1389 loadConstant(cUnit, r1, (int) (cUnit->method->insns + mir->next->offset)); in genInterpSingleStep()
1405 static void genMonitorPortable(CompilationUnit *cUnit, MIR *mir) in genMonitorPortable() argument
1407 bool isEnter = (mir->dalvikInsn.opcode == OP_MONITOR_ENTER); in genMonitorPortable()
1408 genExportPC(cUnit, mir); in genMonitorPortable()
1410 RegLocation rlSrc = dvmCompilerGetSrc(cUnit, mir, 0); in genMonitorPortable()
1413 genNullCheck(cUnit, rlSrc.sRegLow, r1, mir->offset, NULL); in genMonitorPortable()
1416 loadConstant(cUnit, r4PC, (int)(cUnit->method->insns + mir->offset + in genMonitorPortable()
1426 (int) (cUnit->method->insns + mir->offset + in genMonitorPortable()
1441 static void genSuspendPoll(CompilationUnit *cUnit, MIR *mir) in genSuspendPoll() argument
1449 genRegImmCheck(cUnit, kArmCondNe, rTemp, 0, mir->offset, NULL); in genSuspendPoll()
1458 static bool handleFmt10t_Fmt20t_Fmt30t(CompilationUnit *cUnit, MIR *mir, in handleFmt10t_Fmt20t_Fmt30t() argument
1462 bool backwardBranch = (bb->taken->startOffset <= mir->offset); in handleFmt10t_Fmt20t_Fmt30t()
1466 genSuspendPoll(cUnit, mir); in handleFmt10t_Fmt20t_Fmt30t()
1484 static bool handleFmt10x(CompilationUnit *cUnit, MIR *mir) in handleFmt10x() argument
1486 Opcode dalvikOpcode = mir->dalvikInsn.opcode; in handleFmt10x()
1496 genReturnCommon(cUnit,mir); in handleFmt10x()
1512 static bool handleFmt11n_Fmt31i(CompilationUnit *cUnit, MIR *mir) in handleFmt11n_Fmt31i() argument
1516 if (mir->ssaRep->numDefs == 2) { in handleFmt11n_Fmt31i()
1517 rlDest = dvmCompilerGetDestWide(cUnit, mir, 0, 1); in handleFmt11n_Fmt31i()
1519 rlDest = dvmCompilerGetDest(cUnit, mir, 0); in handleFmt11n_Fmt31i()
1522 switch (mir->dalvikInsn.opcode) { in handleFmt11n_Fmt31i()
1526 loadConstantNoClobber(cUnit, rlResult.lowReg, mir->dalvikInsn.vB); in handleFmt11n_Fmt31i()
1534 loadConstantNoClobber(cUnit, rlResult.lowReg, mir->dalvikInsn.vB); in handleFmt11n_Fmt31i()
1546 static bool handleFmt21h(CompilationUnit *cUnit, MIR *mir) in handleFmt21h() argument
1550 if (mir->ssaRep->numDefs == 2) { in handleFmt21h()
1551 rlDest = dvmCompilerGetDestWide(cUnit, mir, 0, 1); in handleFmt21h()
1553 rlDest = dvmCompilerGetDest(cUnit, mir, 0); in handleFmt21h()
1557 switch (mir->dalvikInsn.opcode) { in handleFmt21h()
1560 mir->dalvikInsn.vB << 16); in handleFmt21h()
1566 0, mir->dalvikInsn.vB << 16); in handleFmt21h()
1576 static bool handleFmt20bc(CompilationUnit *cUnit, MIR *mir) in handleFmt20bc() argument
1579 genInterpSingleStep(cUnit, mir); in handleFmt20bc()
1583 static bool handleFmt21c_Fmt31c(CompilationUnit *cUnit, MIR *mir) in handleFmt21c_Fmt31c() argument
1589 switch (mir->dalvikInsn.opcode) { in handleFmt21c_Fmt31c()
1593 (cUnit->method->clazz->pDvmDex->pResStrings[mir->dalvikInsn.vB]); in handleFmt21c_Fmt31c()
1601 rlDest = dvmCompilerGetDest(cUnit, mir, 0); in handleFmt21c_Fmt31c()
1609 (cUnit->method->clazz->pDvmDex->pResClasses[mir->dalvikInsn.vB]); in handleFmt21c_Fmt31c()
1617 rlDest = dvmCompilerGetDest(cUnit, mir, 0); in handleFmt21c_Fmt31c()
1634 const Method *method = (mir->OptimizationFlags & MIR_CALLEE) ? in handleFmt21c_Fmt31c()
1635 mir->meta.calleeMethod : cUnit->method; in handleFmt21c_Fmt31c()
1637 (method->clazz->pDvmDex->pResFields[mir->dalvikInsn.vB]); in handleFmt21c_Fmt31c()
1654 Opcode opcode = mir->dalvikInsn.opcode; in handleFmt21c_Fmt31c()
1662 rlDest = dvmCompilerGetDest(cUnit, mir, 0); in handleFmt21c_Fmt31c()
1678 const Method *method = (mir->OptimizationFlags & MIR_CALLEE) ? in handleFmt21c_Fmt31c()
1679 mir->meta.calleeMethod : cUnit->method; in handleFmt21c_Fmt31c()
1681 (method->clazz->pDvmDex->pResFields[mir->dalvikInsn.vB]); in handleFmt21c_Fmt31c()
1690 rlDest = dvmCompilerGetDestWide(cUnit, mir, 0, 1); in handleFmt21c_Fmt31c()
1714 const Method *method = (mir->OptimizationFlags & MIR_CALLEE) ? in handleFmt21c_Fmt31c()
1715 mir->meta.calleeMethod : cUnit->method; in handleFmt21c_Fmt31c()
1717 (method->clazz->pDvmDex->pResFields[mir->dalvikInsn.vB]); in handleFmt21c_Fmt31c()
1718 Opcode opcode = mir->dalvikInsn.opcode; in handleFmt21c_Fmt31c()
1737 rlSrc = dvmCompilerGetSrc(cUnit, mir, 0); in handleFmt21c_Fmt31c()
1765 const Method *method = (mir->OptimizationFlags & MIR_CALLEE) ? in handleFmt21c_Fmt31c()
1766 mir->meta.calleeMethod : cUnit->method; in handleFmt21c_Fmt31c()
1768 (method->clazz->pDvmDex->pResFields[mir->dalvikInsn.vB]); in handleFmt21c_Fmt31c()
1776 rlSrc = dvmCompilerGetSrcWide(cUnit, mir, 0, 1); in handleFmt21c_Fmt31c()
1791 (cUnit->method->clazz->pDvmDex->pResClasses[mir->dalvikInsn.vB]); in handleFmt21c_Fmt31c()
1805 genExportPC(cUnit, mir); in handleFmt21c_Fmt31c()
1817 (int) (cUnit->method->insns + mir->offset)); in handleFmt21c_Fmt31c()
1824 rlDest = dvmCompilerGetDest(cUnit, mir, 0); in handleFmt21c_Fmt31c()
1835 (cUnit->method->clazz->pDvmDex->pResClasses[mir->dalvikInsn.vB]); in handleFmt21c_Fmt31c()
1847 genInterpSingleStep(cUnit, mir); in handleFmt21c_Fmt31c()
1852 rlSrc = dvmCompilerGetSrc(cUnit, mir, 0); in handleFmt21c_Fmt31c()
1875 genZeroCheck(cUnit, r0, mir->offset, NULL); in handleFmt21c_Fmt31c()
1885 genInterpSingleStep(cUnit, mir); in handleFmt21c_Fmt31c()
1908 static bool handleFmt11x(CompilationUnit *cUnit, MIR *mir) in handleFmt11x() argument
1910 Opcode dalvikOpcode = mir->dalvikInsn.opcode; in handleFmt11x()
1916 RegLocation rlDest = dvmCompilerGetDest(cUnit, mir, 0); in handleFmt11x()
1927 if (mir->OptimizationFlags & MIR_INLINED) in handleFmt11x()
1929 RegLocation rlDest = dvmCompilerGetDest(cUnit, mir, 0); in handleFmt11x()
1937 if (mir->OptimizationFlags & MIR_INLINED) in handleFmt11x()
1939 RegLocation rlDest = dvmCompilerGetDestWide(cUnit, mir, 0, 1); in handleFmt11x()
1946 RegLocation rlSrc = dvmCompilerGetSrcWide(cUnit, mir, 0, 1); in handleFmt11x()
1950 genReturnCommon(cUnit,mir); in handleFmt11x()
1955 RegLocation rlSrc = dvmCompilerGetSrc(cUnit, mir, 0); in handleFmt11x()
1959 genReturnCommon(cUnit, mir); in handleFmt11x()
1964 genMonitor(cUnit, mir); in handleFmt11x()
1967 genInterpSingleStep(cUnit, mir); in handleFmt11x()
1975 static bool handleFmt12x(CompilationUnit *cUnit, MIR *mir) in handleFmt12x() argument
1977 Opcode opcode = mir->dalvikInsn.opcode; in handleFmt12x()
1983 return genArithOp( cUnit, mir ); in handleFmt12x()
1986 if (mir->ssaRep->numUses == 2) in handleFmt12x()
1987 rlSrc = dvmCompilerGetSrcWide(cUnit, mir, 0, 1); in handleFmt12x()
1989 rlSrc = dvmCompilerGetSrc(cUnit, mir, 0); in handleFmt12x()
1990 if (mir->ssaRep->numDefs == 2) in handleFmt12x()
1991 rlDest = dvmCompilerGetDestWide(cUnit, mir, 0, 1); in handleFmt12x()
1993 rlDest = dvmCompilerGetDest(cUnit, mir, 0); in handleFmt12x()
2006 return genConversion(cUnit, mir); in handleFmt12x()
2009 return genArithOpInt(cUnit, mir, rlDest, rlSrc, rlSrc); in handleFmt12x()
2012 return genArithOpLong(cUnit, mir, rlDest, rlSrc, rlSrc); in handleFmt12x()
2014 return genArithOpFloat(cUnit, mir, rlDest, rlSrc, rlSrc); in handleFmt12x()
2016 return genArithOpDouble(cUnit, mir, rlDest, rlSrc, rlSrc); in handleFmt12x()
2063 mir->offset, NULL); in handleFmt12x()
2076 static bool handleFmt21s(CompilationUnit *cUnit, MIR *mir) in handleFmt21s() argument
2078 Opcode dalvikOpcode = mir->dalvikInsn.opcode; in handleFmt21s()
2081 int BBBB = mir->dalvikInsn.vB; in handleFmt21s()
2083 rlDest = dvmCompilerGetDestWide(cUnit, mir, 0, 1); in handleFmt21s()
2090 rlDest = dvmCompilerGetDest(cUnit, mir, 0); in handleFmt21s()
2100 static bool handleFmt21t(CompilationUnit *cUnit, MIR *mir, BasicBlock *bb, in handleFmt21t() argument
2103 Opcode dalvikOpcode = mir->dalvikInsn.opcode; in handleFmt21t()
2106 bool backwardBranch = (bb->taken->startOffset <= mir->offset); in handleFmt21t()
2110 genSuspendPoll(cUnit, mir); in handleFmt21t()
2113 RegLocation rlSrc = dvmCompilerGetSrc(cUnit, mir, 0); in handleFmt21t()
2271 static bool handleFmt22b_Fmt22s(CompilationUnit *cUnit, MIR *mir) in handleFmt22b_Fmt22s() argument
2273 Opcode dalvikOpcode = mir->dalvikInsn.opcode; in handleFmt22b_Fmt22s()
2274 RegLocation rlSrc = dvmCompilerGetSrc(cUnit, mir, 0); in handleFmt22b_Fmt22s()
2275 RegLocation rlDest = dvmCompilerGetDest(cUnit, mir, 0); in handleFmt22b_Fmt22s()
2277 int lit = mir->dalvikInsn.vC; in handleFmt22b_Fmt22s()
2344 genInterpSingleStep(cUnit, mir); in handleFmt22b_Fmt22s()
2386 static bool handleFmt22c(CompilationUnit *cUnit, MIR *mir) in handleFmt22c() argument
2388 Opcode dalvikOpcode = mir->dalvikInsn.opcode; in handleFmt22c()
2420 const Method *method = (mir->OptimizationFlags & MIR_CALLEE) ? in handleFmt22c()
2421 mir->meta.calleeMethod : cUnit->method; in handleFmt22c()
2423 method->clazz->pDvmDex->pResFields[mir->dalvikInsn.vC]; in handleFmt22c()
2446 RegLocation rlSrc = dvmCompilerGetSrc(cUnit, mir, 0); in handleFmt22c()
2447 RegLocation rlDest = dvmCompilerGetDest(cUnit, mir, 0); in handleFmt22c()
2450 (cUnit->method->clazz->pDvmDex->pResClasses[mir->dalvikInsn.vC]); in handleFmt22c()
2459 genExportPC(cUnit, mir); in handleFmt22c()
2467 genRegImmCheck(cUnit, kArmCondMi, r1, 0, mir->offset, NULL); in handleFmt22c()
2477 (int) (cUnit->method->insns + mir->offset)); in handleFmt22c()
2490 RegLocation rlSrc = dvmCompilerGetSrc(cUnit, mir, 0); in handleFmt22c()
2491 RegLocation rlDest = dvmCompilerGetDest(cUnit, mir, 0); in handleFmt22c()
2494 (cUnit->method->clazz->pDvmDex->pResClasses[mir->dalvikInsn.vC]); in handleFmt22c()
2506 genInterpSingleStep(cUnit, mir); in handleFmt22c()
2535 genIGetWide(cUnit, mir, fieldOffset); in handleFmt22c()
2545 genIGet(cUnit, mir, kWord, fieldOffset, isVolatile); in handleFmt22c()
2548 genIPutWide(cUnit, mir, fieldOffset); in handleFmt22c()
2556 genIPut(cUnit, mir, kWord, fieldOffset, false, isVolatile); in handleFmt22c()
2560 genIPut(cUnit, mir, kWord, fieldOffset, true, isVolatile); in handleFmt22c()
2564 genInterpSingleStep(cUnit, mir); in handleFmt22c()
2572 static bool handleFmt22cs(CompilationUnit *cUnit, MIR *mir) in handleFmt22cs() argument
2574 Opcode dalvikOpcode = mir->dalvikInsn.opcode; in handleFmt22cs()
2575 int fieldOffset = mir->dalvikInsn.vC; in handleFmt22cs()
2579 genIGet(cUnit, mir, kWord, fieldOffset, false); in handleFmt22cs()
2582 genIPut(cUnit, mir, kWord, fieldOffset, false, false); in handleFmt22cs()
2585 genIPut(cUnit, mir, kWord, fieldOffset, true, false); in handleFmt22cs()
2588 genIGetWide(cUnit, mir, fieldOffset); in handleFmt22cs()
2591 genIPutWide(cUnit, mir, fieldOffset); in handleFmt22cs()
2601 static bool handleFmt22t(CompilationUnit *cUnit, MIR *mir, BasicBlock *bb, in handleFmt22t() argument
2604 Opcode dalvikOpcode = mir->dalvikInsn.opcode; in handleFmt22t()
2607 bool backwardBranch = (bb->taken->startOffset <= mir->offset); in handleFmt22t()
2611 genSuspendPoll(cUnit, mir); in handleFmt22t()
2614 RegLocation rlSrc1 = dvmCompilerGetSrc(cUnit, mir, 0); in handleFmt22t()
2615 RegLocation rlSrc2 = dvmCompilerGetSrc(cUnit, mir, 1); in handleFmt22t()
2652 static bool handleFmt22x_Fmt32x(CompilationUnit *cUnit, MIR *mir) in handleFmt22x_Fmt32x() argument
2654 Opcode opcode = mir->dalvikInsn.opcode; in handleFmt22x_Fmt32x()
2661 storeValue(cUnit, dvmCompilerGetDest(cUnit, mir, 0), in handleFmt22x_Fmt32x()
2662 dvmCompilerGetSrc(cUnit, mir, 0)); in handleFmt22x_Fmt32x()
2667 storeValueWide(cUnit, dvmCompilerGetDestWide(cUnit, mir, 0, 1), in handleFmt22x_Fmt32x()
2668 dvmCompilerGetSrcWide(cUnit, mir, 0, 1)); in handleFmt22x_Fmt32x()
2677 static bool handleFmt23x(CompilationUnit *cUnit, MIR *mir) in handleFmt23x() argument
2679 Opcode opcode = mir->dalvikInsn.opcode; in handleFmt23x()
2685 return genArithOp( cUnit, mir ); in handleFmt23x()
2689 if (mir->ssaRep->numDefs == 0) { in handleFmt23x()
2690 if (mir->ssaRep->numUses == 3) { in handleFmt23x()
2691 rlDest = dvmCompilerGetSrc(cUnit, mir, 0); in handleFmt23x()
2692 rlSrc1 = dvmCompilerGetSrc(cUnit, mir, 1); in handleFmt23x()
2693 rlSrc2 = dvmCompilerGetSrc(cUnit, mir, 2); in handleFmt23x()
2695 assert(mir->ssaRep->numUses == 4); in handleFmt23x()
2696 rlDest = dvmCompilerGetSrcWide(cUnit, mir, 0, 1); in handleFmt23x()
2697 rlSrc1 = dvmCompilerGetSrc(cUnit, mir, 2); in handleFmt23x()
2698 rlSrc2 = dvmCompilerGetSrc(cUnit, mir, 3); in handleFmt23x()
2702 if (mir->ssaRep->numUses == 4) { in handleFmt23x()
2703 rlSrc1 = dvmCompilerGetSrcWide(cUnit, mir, 0, 1); in handleFmt23x()
2704 rlSrc2 = dvmCompilerGetSrcWide(cUnit, mir, 2, 3); in handleFmt23x()
2706 assert(mir->ssaRep->numUses == 2); in handleFmt23x()
2707 rlSrc1 = dvmCompilerGetSrc(cUnit, mir, 0); in handleFmt23x()
2708 rlSrc2 = dvmCompilerGetSrc(cUnit, mir, 1); in handleFmt23x()
2710 if (mir->ssaRep->numDefs == 2) { in handleFmt23x()
2711 rlDest = dvmCompilerGetDestWide(cUnit, mir, 0, 1); in handleFmt23x()
2713 assert(mir->ssaRep->numDefs == 1); in handleFmt23x()
2714 rlDest = dvmCompilerGetDest(cUnit, mir, 0); in handleFmt23x()
2724 return genCmpFP(cUnit, mir, rlDest, rlSrc1, rlSrc2); in handleFmt23x()
2726 genCmpLong(cUnit, mir, rlDest, rlSrc1, rlSrc2); in handleFmt23x()
2729 genArrayGet(cUnit, mir, kLong, rlSrc1, rlSrc2, rlDest, 3); in handleFmt23x()
2733 genArrayGet(cUnit, mir, kWord, rlSrc1, rlSrc2, rlDest, 2); in handleFmt23x()
2736 genArrayGet(cUnit, mir, kUnsignedByte, rlSrc1, rlSrc2, rlDest, 0); in handleFmt23x()
2739 genArrayGet(cUnit, mir, kSignedByte, rlSrc1, rlSrc2, rlDest, 0); in handleFmt23x()
2742 genArrayGet(cUnit, mir, kUnsignedHalf, rlSrc1, rlSrc2, rlDest, 1); in handleFmt23x()
2745 genArrayGet(cUnit, mir, kSignedHalf, rlSrc1, rlSrc2, rlDest, 1); in handleFmt23x()
2748 genArrayPut(cUnit, mir, kLong, rlSrc1, rlSrc2, rlDest, 3); in handleFmt23x()
2751 genArrayPut(cUnit, mir, kWord, rlSrc1, rlSrc2, rlDest, 2); in handleFmt23x()
2754 genArrayObjectPut(cUnit, mir, rlSrc1, rlSrc2, rlDest, 2); in handleFmt23x()
2758 genArrayPut(cUnit, mir, kUnsignedHalf, rlSrc1, rlSrc2, rlDest, 1); in handleFmt23x()
2762 genArrayPut(cUnit, mir, kUnsignedByte, rlSrc1, rlSrc2, rlDest, 0); in handleFmt23x()
2900 static bool handleFmt31t(CompilationUnit *cUnit, MIR *mir) in handleFmt31t() argument
2902 Opcode dalvikOpcode = mir->dalvikInsn.opcode; in handleFmt31t()
2905 RegLocation rlSrc = dvmCompilerGetSrc(cUnit, mir, 0); in handleFmt31t()
2908 genExportPC(cUnit, mir); in handleFmt31t()
2912 (int) (cUnit->method->insns + mir->offset + mir->dalvikInsn.vB)); in handleFmt31t()
2918 (int) (cUnit->method->insns + mir->offset)); in handleFmt31t()
2932 RegLocation rlSrc = dvmCompilerGetSrc(cUnit, mir, 0); in handleFmt31t()
2943 (int) (cUnit->method->insns + mir->offset + mir->dalvikInsn.vB)); in handleFmt31t()
2963 static void genLandingPadForMispredictedCallee(CompilationUnit *cUnit, MIR *mir, in genLandingPadForMispredictedCallee() argument
2986 mir->meta.callsiteInfo->misPredBranchOver->target = (LIR *) target; in genLandingPadForMispredictedCallee()
2989 static bool handleFmt35c_3rc(CompilationUnit *cUnit, MIR *mir, in handleFmt35c_3rc() argument
2996 if (mir->OptimizationFlags & MIR_INLINED) in handleFmt35c_3rc()
3002 DecodedInstruction *dInsn = &mir->dalvikInsn; in handleFmt35c_3rc()
3003 switch (mir->dalvikInsn.opcode) { in handleFmt35c_3rc()
3021 if (mir->meta.callsiteInfo->misPredBranchOver) { in handleFmt35c_3rc()
3022 genLandingPadForMispredictedCallee(cUnit, mir, bb, labelList); in handleFmt35c_3rc()
3025 if (mir->dalvikInsn.opcode == OP_INVOKE_VIRTUAL) in handleFmt35c_3rc()
3026 genProcessArgsNoRange(cUnit, mir, dInsn, &pcrLabel); in handleFmt35c_3rc()
3028 genProcessArgsRange(cUnit, mir, dInsn, &pcrLabel); in handleFmt35c_3rc()
3030 genInvokeVirtualCommon(cUnit, mir, methodIndex, in handleFmt35c_3rc()
3043 const Method *calleeMethod = mir->meta.callsiteInfo->method; in handleFmt35c_3rc()
3048 if (mir->dalvikInsn.opcode == OP_INVOKE_SUPER) in handleFmt35c_3rc()
3049 genProcessArgsNoRange(cUnit, mir, dInsn, &pcrLabel); in handleFmt35c_3rc()
3051 genProcessArgsRange(cUnit, mir, dInsn, &pcrLabel); in handleFmt35c_3rc()
3053 if (mir->OptimizationFlags & MIR_INVOKE_METHOD_JIT) { in handleFmt35c_3rc()
3054 const Method *calleeMethod = mir->meta.callsiteInfo->method; in handleFmt35c_3rc()
3057 genInvokeSingletonWholeMethod(cUnit, mir, calleeAddr, in handleFmt35c_3rc()
3063 genInvokeSingletonCommon(cUnit, mir, bb, labelList, pcrLabel, in handleFmt35c_3rc()
3072 const Method *calleeMethod = mir->meta.callsiteInfo->method; in handleFmt35c_3rc()
3076 if (mir->dalvikInsn.opcode == OP_INVOKE_DIRECT) in handleFmt35c_3rc()
3077 genProcessArgsNoRange(cUnit, mir, dInsn, &pcrLabel); in handleFmt35c_3rc()
3079 genProcessArgsRange(cUnit, mir, dInsn, &pcrLabel); in handleFmt35c_3rc()
3084 genInvokeSingletonCommon(cUnit, mir, bb, labelList, pcrLabel, in handleFmt35c_3rc()
3092 const Method *calleeMethod = mir->meta.callsiteInfo->method; in handleFmt35c_3rc()
3096 if (mir->dalvikInsn.opcode == OP_INVOKE_STATIC) in handleFmt35c_3rc()
3097 genProcessArgsNoRange(cUnit, mir, dInsn, in handleFmt35c_3rc()
3100 genProcessArgsRange(cUnit, mir, dInsn, in handleFmt35c_3rc()
3103 if (mir->OptimizationFlags & MIR_INVOKE_METHOD_JIT) { in handleFmt35c_3rc()
3104 const Method *calleeMethod = mir->meta.callsiteInfo->method; in handleFmt35c_3rc()
3107 genInvokeSingletonWholeMethod(cUnit, mir, calleeAddr, in handleFmt35c_3rc()
3113 genInvokeSingletonCommon(cUnit, mir, bb, labelList, pcrLabel, in handleFmt35c_3rc()
3198 if (mir->meta.callsiteInfo->misPredBranchOver) { in handleFmt35c_3rc()
3199 genLandingPadForMispredictedCallee(cUnit, mir, bb, labelList); in handleFmt35c_3rc()
3202 if (mir->dalvikInsn.opcode == OP_INVOKE_INTERFACE) in handleFmt35c_3rc()
3203 genProcessArgsNoRange(cUnit, mir, dInsn, &pcrLabel); in handleFmt35c_3rc()
3205 genProcessArgsRange(cUnit, mir, dInsn, &pcrLabel); in handleFmt35c_3rc()
3211 (int) (cUnit->method->insns + mir->offset)); in handleFmt35c_3rc()
3235 int dPC = (int) (cUnit->method->insns + mir->offset); in handleFmt35c_3rc()
3239 pcrLabel->operands[1] = mir->offset; in handleFmt35c_3rc()
3286 (int) (cUnit->method->insns + mir->offset)); in handleFmt35c_3rc()
3335 genTrap(cUnit, mir->offset, pcrLabel); in handleFmt35c_3rc()
3342 genInterpSingleStep(cUnit, mir); in handleFmt35c_3rc()
3351 static bool handleFmt35ms_3rms(CompilationUnit *cUnit, MIR *mir, in handleFmt35ms_3rms() argument
3357 if (mir->OptimizationFlags & MIR_INLINED) in handleFmt35ms_3rms()
3360 DecodedInstruction *dInsn = &mir->dalvikInsn; in handleFmt35ms_3rms()
3361 switch (mir->dalvikInsn.opcode) { in handleFmt35ms_3rms()
3374 if (mir->meta.callsiteInfo->misPredBranchOver) { in handleFmt35ms_3rms()
3375 genLandingPadForMispredictedCallee(cUnit, mir, bb, labelList); in handleFmt35ms_3rms()
3378 if (mir->dalvikInsn.opcode == OP_INVOKE_VIRTUAL_QUICK) in handleFmt35ms_3rms()
3379 genProcessArgsNoRange(cUnit, mir, dInsn, &pcrLabel); in handleFmt35ms_3rms()
3381 genProcessArgsRange(cUnit, mir, dInsn, &pcrLabel); in handleFmt35ms_3rms()
3384 if (mir->OptimizationFlags & MIR_INVOKE_METHOD_JIT) { in handleFmt35ms_3rms()
3385 const Method *calleeMethod = mir->meta.callsiteInfo->method; in handleFmt35ms_3rms()
3388 genInvokeVirtualWholeMethod(cUnit, mir, calleeAddr, in handleFmt35ms_3rms()
3392 genInvokeVirtualCommon(cUnit, mir, methodIndex, in handleFmt35ms_3rms()
3402 const Method *calleeMethod = mir->meta.callsiteInfo->method; in handleFmt35ms_3rms()
3406 if (mir->dalvikInsn.opcode == OP_INVOKE_SUPER_QUICK) in handleFmt35ms_3rms()
3407 genProcessArgsNoRange(cUnit, mir, dInsn, &pcrLabel); in handleFmt35ms_3rms()
3409 genProcessArgsRange(cUnit, mir, dInsn, &pcrLabel); in handleFmt35ms_3rms()
3414 genInvokeSingletonCommon(cUnit, mir, bb, labelList, pcrLabel, in handleFmt35ms_3rms()
3430 static bool genInlinedCompareTo(CompilationUnit *cUnit, MIR *mir) in genInlinedCompareTo() argument
3433 return handleExecuteInlineC(cUnit, mir); in genInlinedCompareTo()
3436 RegLocation rlThis = dvmCompilerGetSrc(cUnit, mir, 0); in genInlinedCompareTo()
3437 RegLocation rlComp = dvmCompilerGetSrc(cUnit, mir, 1); in genInlinedCompareTo()
3442 rollback = genNullCheck(cUnit, rlThis.sRegLow, r0, mir->offset, NULL); in genInlinedCompareTo()
3443 genNullCheck(cUnit, rlComp.sRegLow, r1, mir->offset, rollback); in genInlinedCompareTo()
3450 storeValue(cUnit, inlinedTarget(cUnit, mir, false), in genInlinedCompareTo()
3456 static bool genInlinedFastIndexOf(CompilationUnit *cUnit, MIR *mir) in genInlinedFastIndexOf() argument
3459 return handleExecuteInlineC(cUnit, mir); in genInlinedFastIndexOf()
3461 RegLocation rlThis = dvmCompilerGetSrc(cUnit, mir, 0); in genInlinedFastIndexOf()
3462 RegLocation rlChar = dvmCompilerGetSrc(cUnit, mir, 1); in genInlinedFastIndexOf()
3466 RegLocation rlStart = dvmCompilerGetSrc(cUnit, mir, 2); in genInlinedFastIndexOf()
3469 genNullCheck(cUnit, rlThis.sRegLow, r0, mir->offset, NULL); in genInlinedFastIndexOf()
3471 storeValue(cUnit, inlinedTarget(cUnit, mir, false), in genInlinedFastIndexOf()
3478 static bool genInlinedStringIsEmptyOrLength(CompilationUnit *cUnit, MIR *mir, in genInlinedStringIsEmptyOrLength() argument
3482 RegLocation rlObj = dvmCompilerGetSrc(cUnit, mir, 0); in genInlinedStringIsEmptyOrLength()
3483 RegLocation rlDest = inlinedTarget(cUnit, mir, false); in genInlinedStringIsEmptyOrLength()
3486 genNullCheck(cUnit, rlObj.sRegLow, rlObj.lowReg, mir->offset, NULL); in genInlinedStringIsEmptyOrLength()
3499 static bool genInlinedStringLength(CompilationUnit *cUnit, MIR *mir) in genInlinedStringLength() argument
3501 return genInlinedStringIsEmptyOrLength(cUnit, mir, false); in genInlinedStringLength()
3504 static bool genInlinedStringIsEmpty(CompilationUnit *cUnit, MIR *mir) in genInlinedStringIsEmpty() argument
3506 return genInlinedStringIsEmptyOrLength(cUnit, mir, true); in genInlinedStringIsEmpty()
3509 static bool genInlinedStringCharAt(CompilationUnit *cUnit, MIR *mir) in genInlinedStringCharAt() argument
3512 RegLocation rlObj = dvmCompilerGetSrc(cUnit, mir, 0); in genInlinedStringCharAt()
3513 RegLocation rlIdx = dvmCompilerGetSrc(cUnit, mir, 1); in genInlinedStringCharAt()
3514 RegLocation rlDest = inlinedTarget(cUnit, mir, false); in genInlinedStringCharAt()
3522 mir->offset, NULL); in genInlinedStringCharAt()
3526 genBoundsCheck(cUnit, rlIdx.lowReg, regMax, mir->offset, pcrLabel); in genInlinedStringCharAt()
3536 static bool genInlinedAbsInt(CompilationUnit *cUnit, MIR *mir) in genInlinedAbsInt() argument
3538 RegLocation rlSrc = dvmCompilerGetSrc(cUnit, mir, 0); in genInlinedAbsInt()
3540 RegLocation rlDest = inlinedTarget(cUnit, mir, false); in genInlinedAbsInt()
3555 static bool genInlinedAbsLong(CompilationUnit *cUnit, MIR *mir) in genInlinedAbsLong() argument
3557 RegLocation rlSrc = dvmCompilerGetSrcWide(cUnit, mir, 0, 1); in genInlinedAbsLong()
3558 RegLocation rlDest = inlinedTargetWide(cUnit, mir, false); in genInlinedAbsLong()
3577 static bool genInlinedIntFloatConversion(CompilationUnit *cUnit, MIR *mir) in genInlinedIntFloatConversion() argument
3580 RegLocation rlSrc = dvmCompilerGetSrc(cUnit, mir, 0); in genInlinedIntFloatConversion()
3581 RegLocation rlDest = inlinedTarget(cUnit, mir, false); in genInlinedIntFloatConversion()
3586 static bool genInlinedLongDoubleConversion(CompilationUnit *cUnit, MIR *mir) in genInlinedLongDoubleConversion() argument
3589 RegLocation rlSrc = dvmCompilerGetSrcWide(cUnit, mir, 0, 1); in genInlinedLongDoubleConversion()
3590 RegLocation rlDest = inlinedTargetWide(cUnit, mir, false); in genInlinedLongDoubleConversion()
3600 static bool handleExecuteInlineC(CompilationUnit *cUnit, MIR *mir) in handleExecuteInlineC() argument
3602 DecodedInstruction *dInsn = &mir->dalvikInsn; in handleExecuteInlineC()
3618 genExportPC(cUnit, mir); in handleExecuteInlineC()
3620 loadValueDirect(cUnit, dvmCompilerGetSrc(cUnit, mir, i), i); in handleExecuteInlineC()
3626 loadConstant(cUnit, r0, (int) (cUnit->method->insns + mir->offset)); in handleExecuteInlineC()
3638 static bool handleExecuteInline(CompilationUnit *cUnit, MIR *mir) in handleExecuteInline() argument
3640 DecodedInstruction *dInsn = &mir->dalvikInsn; in handleExecuteInline()
3650 return genInlinedStringCharAt(cUnit, mir); in handleExecuteInline()
3652 return genInlinedStringLength(cUnit, mir); in handleExecuteInline()
3654 return genInlinedStringIsEmpty(cUnit, mir); in handleExecuteInline()
3656 return genInlinedCompareTo(cUnit, mir); in handleExecuteInline()
3658 return genInlinedFastIndexOf(cUnit, mir); in handleExecuteInline()
3662 return genInlinedAbsInt(cUnit, mir); in handleExecuteInline()
3665 return genInlinedAbsLong(cUnit, mir); in handleExecuteInline()
3668 return genInlinedMinMaxInt(cUnit, mir, true); in handleExecuteInline()
3671 return genInlinedMinMaxInt(cUnit, mir, false); in handleExecuteInline()
3674 return genInlineSqrt(cUnit, mir); in handleExecuteInline()
3677 return genInlinedAbsFloat(cUnit, mir); in handleExecuteInline()
3680 return genInlinedAbsDouble(cUnit, mir); in handleExecuteInline()
3684 return genInlinedIntFloatConversion(cUnit, mir); in handleExecuteInline()
3687 return genInlinedLongDoubleConversion(cUnit, mir); in handleExecuteInline()
3698 return handleExecuteInlineC(cUnit, mir); in handleExecuteInline()
3704 static bool handleFmt51l(CompilationUnit *cUnit, MIR *mir) in handleFmt51l() argument
3707 RegLocation rlDest = dvmCompilerGetDestWide(cUnit, mir, 0, 1); in handleFmt51l()
3710 mir->dalvikInsn.vB_wide & 0xFFFFFFFFUL); in handleFmt51l()
3712 (mir->dalvikInsn.vB_wide>>32) & 0xFFFFFFFFUL); in handleFmt51l()
3875 static void genHoistedChecksForCountUpLoop(CompilationUnit *cUnit, MIR *mir) in genHoistedChecksForCountUpLoop() argument
3883 DecodedInstruction *dInsn = &mir->dalvikInsn; in genHoistedChecksForCountUpLoop()
3887 RegLocation rlArray = cUnit->regLocation[mir->dalvikInsn.vA]; in genHoistedChecksForCountUpLoop()
3888 RegLocation rlIdxEnd = cUnit->regLocation[mir->dalvikInsn.vC]; in genHoistedChecksForCountUpLoop()
3928 static void genHoistedChecksForCountDownLoop(CompilationUnit *cUnit, MIR *mir) in genHoistedChecksForCountDownLoop() argument
3930 DecodedInstruction *dInsn = &mir->dalvikInsn; in genHoistedChecksForCountDownLoop()
3934 RegLocation rlArray = cUnit->regLocation[mir->dalvikInsn.vA]; in genHoistedChecksForCountDownLoop()
3935 RegLocation rlIdxInit = cUnit->regLocation[mir->dalvikInsn.vB]; in genHoistedChecksForCountDownLoop()
3962 static void genHoistedLowerBoundCheck(CompilationUnit *cUnit, MIR *mir) in genHoistedLowerBoundCheck() argument
3964 DecodedInstruction *dInsn = &mir->dalvikInsn; in genHoistedLowerBoundCheck()
3966 RegLocation rlIdx = cUnit->regLocation[mir->dalvikInsn.vA]; in genHoistedLowerBoundCheck()
4060 static void genValidationForPredictedInline(CompilationUnit *cUnit, MIR *mir) in genValidationForPredictedInline() argument
4062 CallsiteInfo *callsiteInfo = mir->meta.callsiteInfo; in genValidationForPredictedInline()
4063 RegLocation rlThis = cUnit->regLocation[mir->dalvikInsn.vC]; in genValidationForPredictedInline()
4068 genNullCheck(cUnit, rlThis.sRegLow, rlThis.lowReg, mir->offset, in genValidationForPredictedInline()
4081 static void handleExtendedMIR(CompilationUnit *cUnit, MIR *mir) in handleExtendedMIR() argument
4083 int opOffset = mir->dalvikInsn.opcode - kMirOpFirst; in handleExtendedMIR()
4089 switch ((ExtendedMIROpcode)mir->dalvikInsn.opcode) { in handleExtendedMIR()
4091 char *ssaString = dvmCompilerGetSSAString(cUnit, mir->ssaRep); in handleExtendedMIR()
4096 genHoistedChecksForCountUpLoop(cUnit, mir); in handleExtendedMIR()
4100 genHoistedChecksForCountDownLoop(cUnit, mir); in handleExtendedMIR()
4104 genHoistedLowerBoundCheck(cUnit, mir); in handleExtendedMIR()
4113 genValidationForPredictedInline(cUnit, mir); in handleExtendedMIR()
4158 static bool selfVerificationPuntOps(MIR *mir) in selfVerificationPuntOps() argument
4160 DecodedInstruction *decInsn = &mir->dalvikInsn; in selfVerificationPuntOps()
4212 MIR *mir; in dvmCompilerMIR2LIR() local
4327 for (mir = bb->firstMIRInsn; mir; mir = mir->next) { in dvmCompilerMIR2LIR()
4338 if ((int)mir->dalvikInsn.opcode >= (int)kMirOpFirst) { in dvmCompilerMIR2LIR()
4339 handleExtendedMIR(cUnit, mir); in dvmCompilerMIR2LIR()
4343 Opcode dalvikOpcode = mir->dalvikInsn.opcode; in dvmCompilerMIR2LIR()
4347 if (mir->OptimizationFlags & MIR_INLINED) { in dvmCompilerMIR2LIR()
4349 } else if (mir->OptimizationFlags & MIR_INLINED_PRED) { in dvmCompilerMIR2LIR()
4351 } else if (mir->OptimizationFlags & MIR_CALLEE) { in dvmCompilerMIR2LIR()
4366 mir->offset, in dvmCompilerMIR2LIR()
4368 &mir->dalvikInsn, note)); in dvmCompilerMIR2LIR()
4380 if (cUnit->printMe && mir->ssaRep) { in dvmCompilerMIR2LIR()
4382 mir->ssaRep); in dvmCompilerMIR2LIR()
4394 singleStepMe = selfVerificationPuntOps(mir); in dvmCompilerMIR2LIR()
4399 genInterpSingleStep(cUnit, mir); in dvmCompilerMIR2LIR()
4407 mir, bb, labelList); in dvmCompilerMIR2LIR()
4410 notHandled = handleFmt10x(cUnit, mir); in dvmCompilerMIR2LIR()
4414 notHandled = handleFmt11n_Fmt31i(cUnit, mir); in dvmCompilerMIR2LIR()
4417 notHandled = handleFmt11x(cUnit, mir); in dvmCompilerMIR2LIR()
4420 notHandled = handleFmt12x(cUnit, mir); in dvmCompilerMIR2LIR()
4423 notHandled = handleFmt20bc(cUnit, mir); in dvmCompilerMIR2LIR()
4427 notHandled = handleFmt21c_Fmt31c(cUnit, mir); in dvmCompilerMIR2LIR()
4430 notHandled = handleFmt21h(cUnit, mir); in dvmCompilerMIR2LIR()
4433 notHandled = handleFmt21s(cUnit, mir); in dvmCompilerMIR2LIR()
4436 notHandled = handleFmt21t(cUnit, mir, bb, in dvmCompilerMIR2LIR()
4441 notHandled = handleFmt22b_Fmt22s(cUnit, mir); in dvmCompilerMIR2LIR()
4444 notHandled = handleFmt22c(cUnit, mir); in dvmCompilerMIR2LIR()
4447 notHandled = handleFmt22cs(cUnit, mir); in dvmCompilerMIR2LIR()
4450 notHandled = handleFmt22t(cUnit, mir, bb, in dvmCompilerMIR2LIR()
4455 notHandled = handleFmt22x_Fmt32x(cUnit, mir); in dvmCompilerMIR2LIR()
4458 notHandled = handleFmt23x(cUnit, mir); in dvmCompilerMIR2LIR()
4461 notHandled = handleFmt31t(cUnit, mir); in dvmCompilerMIR2LIR()
4465 notHandled = handleFmt35c_3rc(cUnit, mir, bb, in dvmCompilerMIR2LIR()
4470 notHandled = handleFmt35ms_3rms(cUnit, mir, bb, in dvmCompilerMIR2LIR()
4475 notHandled = handleExecuteInline(cUnit, mir); in dvmCompilerMIR2LIR()
4478 notHandled = handleFmt51l(cUnit, mir); in dvmCompilerMIR2LIR()
4487 mir->offset, in dvmCompilerMIR2LIR()