Home | History | Annotate | Download | only in out

Lines Matching refs:r0

31 r0-r3 hold first 4 args to a method; they are not preserved across method calls
41 r0 holds returns of <= 4 bytes
42 r0-r1 hold returns of 8 bytes, low word in r0
303 * r0 MterpGlue* glue
321 str sp, [r0, #offGlue_bailPtr] @ save SP for eventual return
324 mov rGLUE, r0 @ set rGLUE
325 ldr r1, [r0, #offGlue_entryPoint] @ enum is 4 bytes in aapcs-EABI
335 GET_JIT_PROF_TABLE(r0)
339 cmp r0,#0 @ is profiling disabled?
391 ldr r0, strBadEntryPoint
411 * r0 MterpGlue* glue
415 ldr sp, [r0, #offGlue_bailPtr] @ sp<- saved SP
416 mov r0, r1 @ return the changeInterp value
458 ubfx r0, rINST, #8, #4 @ r0<- A from 11:8
462 SET_VREG(r2, r0) @ fp[A]<- r2
472 mov r0, rINST, lsr #8 @ r0<- AA
476 SET_VREG(r2, r0) @ fp[AA]<- r2
486 FETCH(r0, 1) @ r0<- AAAA
490 SET_VREG(r2, r0) @ fp[AAAA]<- r2
503 ldmia r3, {r0-r1} @ r0/r1<- fp[B]
506 stmia r2, {r0-r1} @ fp[A]<- r0/r1
519 ldmia r3, {r0-r1} @ r0/r1<- fp[BBBB]
522 stmia r2, {r0-r1} @ fp[AA]<- r0/r1
535 ldmia r3, {r0-r1} @ r0/r1<- fp[BBBB]
538 stmia r2, {r0-r1} @ fp[AAAA]<- r0/r1
549 mov r0, rINST, lsr #8 @ r0<- A from 11:8
552 and r0, r0, #15
554 SET_VREG(r2, r0) @ fp[A]<- r2
566 mov r0, rINST, lsr #8 @ r0<- AA
570 SET_VREG(r2, r0) @ fp[AA]<- r2
582 FETCH(r0, 1) @ r0<- AAAA
586 SET_VREG(r2, r0) @ fp[AAAA]<- r2
598 ldr r0, [rGLUE, #offGlue_retval] @ r0<- glue->retval.i
600 SET_VREG(r0, r2) @ fp[AA]<- r0
611 ldmia r3, {r0-r1} @ r0/r1<- retval.j
614 stmia r2, {r0-r1} @ fp[AA]<- r0/r1
626 ldr r0, [rGLUE, #offGlue_retval] @ r0<- glue->retval.i
628 SET_VREG(r0, r2) @ fp[AA]<- r0
637 ldr r0, [rGLUE, #offGlue_self] @ r0<- glue->self
639 ldr r3, [r0, #offThread_exception] @ r3<- dvmGetException bypass
644 str r1, [r0, #offThread_exception] @ dvmClearException bypass
665 GET_VREG(r0, r2) @ r0<- vAA
666 str r0, [rGLUE, #offGlue_retval] @ retval.i <- vAA
681 ldmia r2, {r0-r1} @ r0/r1 <- vAA/vAA+1
682 stmia r3, {r0-r1} @ retval<- r0/r1
698 GET_VREG(r0, r2) @ r0<- vAA
699 str r0, [rGLUE, #offGlue_retval] @ retval.i <- vAA
709 ubfx r0, rINST, #8, #4 @ r0<- A
713 SET_VREG(r1, r0) @ fp[A]<- r1
721 FETCH_S(r0, 1) @ r0<- ssssBBBB (sign-extended)
724 SET_VREG(r0, r3) @ vAA<- r0
734 FETCH(r0, 1) @ r0<- bbbb (low)
737 orr r0, r0, r1, lsl #16 @ r0<- BBBBbbbb
739 SET_VREG(r0, r3) @ vAA<- r0
747 FETCH(r0, 1) @ r0<- 0000BBBB (zero-extended)
749 mov r0, r0, lsl #16 @ r0<- BBBB0000
751 SET_VREG(r0, r3) @ vAA<- r0
760 FETCH_S(r0, 1) @ r0<- ssssBBBB (sign-extended)
762 mov r1, r0, asr #31 @ r1<- ssssssss
766 stmia r3, {r0-r1} @ vAA<- r0/r1
774 FETCH(r0, 1) @ r0<- 0000bbbb (low)
778 orr r0, r0, r2, lsl #16 @ r0<- BBBBbbbb
780 mov r1, r0, asr #31 @ r1<- ssssssss
782 stmia r3, {r0-r1} @ vAA<- r0/r1
790 FETCH(r0, 1) @ r0<- bbbb (low)
793 orr r0, r0, r1, lsl #16 @ r0<- BBBBbbbb (low word)
800 stmia r9, {r0-r1} @ vAA<- r0/r1
810 mov r0, #0 @ r0<- 00000000
815 stmia r3, {r0-r1} @ vAA<- r0/r1
827 ldr r0, [r2, r1, lsl #2] @ r0<- pResStrings[BBBB]
828 cmp r0, #0 @ not yet resolved?
832 SET_VREG(r0, r9) @ vAA<- r0
840 FETCH(r0, 1) @ r0<- bbbb (low)
845 orr r1, r0, r1, lsl #16 @ r1<- BBBBbbbb
846 ldr r0, [r2, r1, lsl #2] @ r0<- pResStrings[BBBB]
847 cmp r0, #0
851 SET_VREG(r0, r9) @ vAA<- r0
863 ldr r0, [r2, r1, lsl #2] @ r0
864 cmp r0, #0 @ not yet resolved?
868 SET_VREG(r0, r9) @ vAA<- r0
881 ldr r0, [rGLUE, #offGlue_self] @ r0<- glue->self
888 ldr r0, [rGLUE, #offGlue_self] @ r0<- glue->self
889 ldr r1, [r0, #offThread_exception] @ check for exception
913 ldr r0, [rGLUE, #offGlue_self] @ r0<- glue->self
914 bl dvmUnlockObject @ r0<- success for unlock(self, obj)
915 cmp r0, #0 @ failed?
935 ldr r0, [rGLUE, #offGlue_methodClassDex] @ r0<- pDvmDex
937 ldr r0, [r0, #offDvmDex_pResClasses] @ r0<- pDvmDex->pResClasses
939 ldr r1, [r0, r2, lsl #2] @ r1<- resolved class
940 ldr r0, [r9, #offObject_clazz] @ r0<- obj->clazz
944 cmp r0, r1 @ same class (trivial success)?
964 GET_VREG(r0, r3) @ r0<- vB (object)
966 cmp r0, #0 @ is object null?
968 beq .LOP_INSTANCE_OF_store @ null obj, not an instance, store r0
972 ldr r0, [r0, #offObject_clazz] @ r0<- obj->clazz
975 .LOP_INSTANCE_OF_resolved: @ r0=obj->clazz, r1=resolved class
976 cmp r0, r1 @ same class (trivial success)?
989 GET_VREG(r0, r1) @ r0<- vB (object ref)
990 cmp r0, #0 @ is object null?
993 ldr r3, [r0, #offArrayObject_length] @ r3<- array length
1009 ldr r0, [r3, r1, lsl #2] @ r0<- resolved class
1011 cmp r0, #0 @ already resolved?
1013 .LOP_NEW_INSTANCE_resolved: @ r0=class
1014 ldrb r1, [r0, #offClassObject_status] @ r1<- ClassStatus enum
1017 .LOP_NEW_INSTANCE_initialized: @ r0=class
1019 bl dvmAllocObject @ r0<- new object
1034 mov r0, rINST, lsr #12 @ r0<- B
1037 GET_VREG(r1, r0) @ r1<- vB (array length)
1040 ldr r0, [r3, r2, lsl #2] @ r0<- resolved class
1042 cmp r0, #0 @ already resolved?
1062 ldr r0, [r3, r1, lsl #2] @ r0<- resolved class
1064 cmp r0, #0 @ already resolved?
1068 ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz
1069 bl dvmResolveClass @ r0<- call(clazz, ref)
1070 cmp r0, #0 @ got null?
1090 ldr r0, [r3, r1, lsl #2] @ r0<- resolved class
1092 cmp r0, #0 @ already resolved?
1096 ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz
1097 bl dvmResolveClass @ r0<- call(clazz, ref)
1098 cmp r0, #0 @ got null?
1108 FETCH(r0, 1) @ r0<- bbbb (lo)
1111 orr r1, r0, r1, lsl #16 @ r1<- BBBBbbbb
1112 GET_VREG(r0, r3) @ r0<- vAA (array object)
1116 cmp r0, #0 @ 0 means an exception is thrown
1132 ldr r0, [rGLUE, #offGlue_self] @ r0<- glue->self
1137 str r1, [r0, #offThread_exception] @ thread->exception<- obj
1151 mov r0, rINST, lsl #16 @ r0<- AAxx0000
1152 movs r9, r0, asr #24 @ r9<- ssssssAA (sign-extended)
1156 GET_JIT_PROF_TABLE(r0)
1158 cmp r0,#0
1179 FETCH_S(r0, 1) @ r0<- ssssAAAA (sign-extended)
1180 movs r9, r0, asl #1 @ r9<- byte offset, check sign
1183 GET_JIT_PROF_TABLE(r0)
1185 cmp r0,#0
1211 FETCH(r0, 1) @ r0<- aaaa (lo)
1214 orrs r0, r0, r1, lsl #16 @ r0<- AAAAaaaa, check sign
1215 mov r9, r0, asl #1 @ r9<- byte offset
1218 GET_JIT_PROF_TABLE(r0)
1220 cmp r0,#0
1244 FETCH(r0, 1) @ r0<- bbbb (lo)
1247 orr r0, r0, r1, lsl #16 @ r0<- BBBBbbbb
1249 add r0, rPC, r0, lsl #1 @ r0<- PC + BBBBbbbb*2
1250 bl dvmInterpHandlePackedSwitch @ r0<- code-unit branch offset
1251 movs r9, r0, asl #1 @ r9<- branch byte offset, check sign
1255 GET_JIT_PROF_TABLE(r0)
1257 cmp r0,#0
1282 FETCH(r0, 1) @ r0<- bbbb (lo)
1285 orr r0, r0, r1, lsl #16 @ r0<- BBBBbbbb
1287 add r0, rPC, r0, lsl #1 @ r0<- PC + BBBBbbbb*2
1288 bl dvmInterpHandleSparseSwitch @ r0<- code-unit branch offset
1289 movs r9, r0, asl #1 @ r9<- branch byte offset, check sign
1293 GET_JIT_PROF_TABLE(r0)
1295 cmp r0,#0
1327 FETCH(r0, 1) @ r0<- CCBB
1329 and r2, r0, #255 @ r2<- BB
1330 mov r3, r0, lsr #8 @ r3<- CC
1337 mvn r0, #0 @ r0<- -1 (default)
1340 movgt r0, #1 @ (greater than) r1<- 1
1341 moveq r0, #0 @ (equal) r1<- 0
1366 FETCH(r0, 1) @ r0<- CCBB
1368 and r2, r0, #255 @ r2<- BB
1369 mov r3, r0, lsr #8 @ r3<- CC
1376 mov r0, #1 @ r0<- 1 (default)
1379 mvnmi r0, #0 @ (less than) r1<- -1
1380 moveq r0, #0 @ (equal) r1<- 0
1405 FETCH(r0, 1) @ r0<- CCBB
1407 and r2, r0, #255 @ r2<- BB
1408 mov r3, r0, lsr #8 @ r3<- CC
1415 mvn r0, #0 @ r0<- -1 (default)
1418 movgt r0, #1 @ (greater than) r1<- 1
1419 moveq r0, #0 @ (equal) r1<- 0
1444 FETCH(r0, 1) @ r0<- CCBB
1446 and r2, r0, #255 @ r2<- BB
1447 mov r3, r0, lsr #8 @ r3<- CC
1454 mov r0, #1 @ r0<- 1 (default)
1457 mvnmi r0, #0 @ (less than) r1<- -1
1458 moveq r0, #0 @ (equal) r1<- 0
1475 * subs ip, r0, r2
1477 * subeqs ip, r0, r2
1487 FETCH(r0, 1) @ r0<- CCBB
1489 and r2, r0, #255 @ r2<- BB
1490 mov r3, r0, lsr #8 @ r3<- CC
1493 ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1
1498 subs r1, r0, r2 @ r1<- r0 - r2
1517 ubfx r0, rINST, #8, #4 @ r0<- A
1519 GET_VREG(r2, r0) @ r2<- vA
1520 mov r9, #4 @ r0<- BYTE branch dist for not-taken
1528 GET_JIT_PROF_TABLE(r0)
1552 ubfx r0, rINST, #8, #4 @ r0<- A
1554 GET_VREG(r2, r0) @ r2<- vA
1555 mov r9, #4 @ r0<- BYTE branch dist for not-taken
1563 GET_JIT_PROF_TABLE(r0)
1587 ubfx r0, rINST, #8, #4 @ r0<- A
1589 GET_VREG(r2, r0) @ r2<- vA
1590 mov r9, #4 @ r0<- BYTE branch dist for not-taken
1598 GET_JIT_PROF_TABLE(r0)
1622 ubfx r0, rINST, #8, #4 @ r0<- A
1624 GET_VREG(r2, r0) @ r2<- vA
1625 mov r9, #4 @ r0<- BYTE branch dist for not-taken
1633 GET_JIT_PROF_TABLE(r0)
1657 ubfx r0, rINST, #8, #4 @ r0<- A
1659 GET_VREG(r2, r0) @ r2<- vA
1660 mov r9, #4 @ r0<- BYTE branch dist for not-taken
1668 GET_JIT_PROF_TABLE(r0)
1692 ubfx r0, rINST, #8, #4 @ r0<- A
1694 GET_VREG(r2, r0) @ r2<- vA
1695 mov r9, #4 @ r0<- BYTE branch dist for not-taken
1703 GET_JIT_PROF_TABLE(r0)
1726 mov r0, rINST, lsr #8 @ r0<- AA
1727 GET_VREG(r2, r0) @ r2<- vAA
1728 mov r9, #4 @ r0<- BYTE branch dist for not-taken
1736 GET_JIT_PROF_TABLE(r0)
1738 cmp r0,#0
1762 mov r0, rINST, lsr #8 @ r0<- AA
1763 GET_VREG(r2, r0) @ r2<- vAA
1764 mov r9, #4 @ r0<- BYTE branch dist for not-taken
1772 GET_JIT_PROF_TABLE(r0)
1774 cmp r0,#0
1798 mov r0, rINST, lsr #8 @ r0<- AA
1799 GET_VREG(r2, r0) @ r2<- vAA
1800 mov r9, #4 @ r0<- BYTE branch dist for not-taken
1808 GET_JIT_PROF_TABLE(r0)
1810 cmp r0,#0
1834 mov r0, rINST, lsr #8 @ r0<- AA
1835 GET_VREG(r2, r0) @ r2<- vAA
1836 mov r9, #4 @ r0<- BYTE branch dist for not-taken
1844 GET_JIT_PROF_TABLE(r0)
1846 cmp r0,#0
1870 mov r0, rINST, lsr #8 @ r0<- AA
1871 GET_VREG(r2, r0) @ r2<- vAA
1872 mov r9, #4 @ r0<- BYTE branch dist for not-taken
1880 GET_JIT_PROF_TABLE(r0)
1882 cmp r0,#0
1906 mov r0, rINST, lsr #8 @ r0<- AA
1907 GET_VREG(r2, r0) @ r2<- vAA
1908 mov r9, #4 @ r0<- BYTE branch dist for not-taken
1916 GET_JIT_PROF_TABLE(r0)
1918 cmp r0,#0
1993 GET_VREG(r0, r2) @ r0<- vBB (array object)
1995 cmp r0, #0 @ null array object?
1997 ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length
1998 add r0, r0, r1, lsl #2 @ r0<- arrayObj + index*width
2002 ldr r2, [r0, #offArrayObject_contents] @ r2<- vBB[vCC]
2017 FETCH(r0, 1) @ r0<- CCBB
2019 and r2, r0, #255 @ r2<- BB
2020 mov r3, r0, lsr #8 @ r3<- CC
2021 GET_VREG(r0, r2) @ r0<- vBB (array object)
2023 cmp r0, #0 @ null array object?
2025 ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length
2026 add r0, r0, r1, lsl #3 @ r0<- arrayObj + index*width
2051 GET_VREG(r0, r2) @ r0<- vBB (array object)
2053 cmp r0, #0 @ null array object?
2055 ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length
2056 add r0, r0, r1, lsl #2 @ r0<- arrayObj + index*width
2060 ldr r2, [r0, #offArrayObject_contents] @ r2<- vBB[vCC]
2083 GET_VREG(r0, r2) @ r0<- vBB (array object)
2085 cmp r0, #0 @ null array object?
2087 ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length
2088 add r0, r0, r1, lsl #0 @ r0<- arrayObj + index*width
2092 ldrb r2, [r0, #offArrayObject_contents] @ r2<- vBB[vCC]
2115 GET_VREG(r0, r2) @ r0<- vBB (array object)
2117 cmp r0, #0 @ null array object?
2119 ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length
2120 add r0, r0, r1, lsl #0 @ r0<- arrayObj + index*width
2124 ldrsb r2, [r0, #offArrayObject_contents] @ r2<- vBB[vCC]
2147 GET_VREG(r0, r2) @ r0<- vBB (array object)
2149 cmp r0, #0 @ null array object?
2151 ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length
2152 add r0, r0, r1, lsl #1 @ r0<- arrayObj + index*width
2156 ldrh r2, [r0, #offArrayObject_contents] @ r2<- vBB[vCC]
2179 GET_VREG(r0, r2) @ r0<- vBB (array object)
2181 cmp r0, #0 @ null array object?
2183 ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length
2184 add r0, r0, r1, lsl #1 @ r0<- arrayObj + index*width
2188 ldrsh r2, [r0, #offArrayObject_contents] @ r2<- vBB[vCC]
2210 GET_VREG(r0, r2) @ r0<- vBB (array object)
2212 cmp r0, #0 @ null array object?
2214 ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length
2215 add r0, r0, r1, lsl #2 @ r0<- arrayObj + index*width
2221 str r2, [r0, #offArrayObject_contents] @ vBB[vCC]<- r2
2234 FETCH(r0, 1) @ r0<- CCBB
2236 and r2, r0, #255 @ r2<- BB
2237 mov r3, r0, lsr #8 @ r3<- CC
2238 GET_VREG(r0, r2) @ r0<- vBB (array object)
2240 cmp r0, #0 @ null array object?
2242 ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length
2243 add r0, r0, r1, lsl #3 @ r0<- arrayObj + index*width
2263 FETCH(r0, 1) @ r0<- CCBB
2265 and r2, r0, #255 @ r2<- BB
2266 mov r3, r0, lsr #8 @ r3<- CC
2268 GET_VREG(r0, r3) @ r0<- vCC (requested index)
2273 add r10, rINST, r0, lsl #2 @ r10<- arrayObj + index*width
2274 cmp r0, r3 @ compare unsigned index, length
2296 GET_VREG(r0, r2) @ r0<- vBB (array object)
2298 cmp r0, #0 @ null array object?
2300 ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length
2301 add r0, r0, r1, lsl #0 @ r0<- arrayObj + index*width
2307 strb r2, [r0, #offArrayObject_contents] @ vBB[vCC]<- r2
2328 GET_VREG(r0, r2) @ r0<- vBB (array object)
2330 cmp r0, #0 @ null array object?
2332 ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length
2333 add r0, r0, r1, lsl #0 @ r0<- arrayObj + index*width
2339 strb r2, [r0, #offArrayObject_contents] @ vBB[vCC]<- r2
2360 GET_VREG(r0, r2) @ r0<- vBB (array object)
2362 cmp r0, #0 @ null array object?
2364 ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length
2365 add r0, r0, r1, lsl #1 @ r0<- arrayObj + index*width
2371 strh r2, [r0, #offArrayObject_contents] @ vBB[vCC]<- r2
2392 GET_VREG(r0, r2) @ r0<- vBB (array object)
2394 cmp r0, #0 @ null array object?
2396 ldr r3, [r0, #offArrayObject_length] @ r3<- arrayObj->length
2397 add r0, r0, r1, lsl #1 @ r0<- arrayObj + index*width
2403 strh r2, [r0
2417 mov r0, rINST, lsr #12 @ r0<- B
2421 GET_VREG(r9, r0) @ r9<- fp[B], the object pointer
2422 ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr
2423 cmp r0, #0 @ is resolved entry null?
2427 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
2428 bl dvmResolveInstField @ r0<- resolved InstField ptr
2429 cmp r0, #0
2441 mov r0, rINST, lsr #12 @ r0<- B
2445 GET_VREG(r9, r0) @ r9<- fp[B], the object pointer
2446 ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr
2447 cmp r0, #0 @ is resolved entry null?
2451 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
2452 bl dvmResolveInstField @ r0<- resolved InstField ptr
2453 cmp r0, #0
2468 mov r0, rINST, lsr #12 @ r0<- B
2472 GET_VREG(r9, r0) @ r9<- fp[B], the object pointer
2473 ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr
2474 cmp r0, #0 @ is resolved entry null?
2478 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
2479 bl dvmResolveInstField @ r0<- resolved InstField ptr
2480 cmp r0, #0
2497 mov r0, rINST, lsr #12 @ r0<- B
2501 GET_VREG(r9, r0) @ r9<- fp[B], the object pointer
2502 ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr
2503 cmp r0, #0 @ is resolved entry null?
2507 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
2508 bl dvmResolveInstField @ r0<- resolved InstField ptr
2509 cmp r0, #0
2526 mov r0, rINST, lsr #12 @ r0<- B
2530 GET_VREG(r9, r0) @ r9<- fp[B], the object pointer
2531 ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr
2532 cmp r0, #0 @ is resolved entry null?
2536 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
2537 bl dvmResolveInstField @ r0<- resolved InstField ptr
2538 cmp r0, #0
2555 mov r0, rINST, lsr #12 @ r0<- B
2559 GET_VREG(r9, r0) @ r9<- fp[B], the object pointer
2560 ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr
2561 cmp r0, #0 @ is resolved entry null?
2565 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
2566 bl dvmResolveInstField @ r0<- resolved InstField ptr
2567 cmp r0, #0
2584 mov r0, rINST, lsr #12 @ r0<- B
2588 GET_VREG(r9, r0) @ r9<- fp[B], the object pointer
2589 ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr
2590 cmp r0, #0 @ is resolved entry null?
2594 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
2595 bl dvmResolveInstField @ r0<- resolved InstField ptr
2596 cmp r0, #0
2611 mov r0, rINST, lsr #12 @ r0<- B
2615 GET_VREG(r9, r0) @ r9<- fp[B], the object pointer
2616 ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr
2617 cmp r0, #0 @ is resolved entry null?
2621 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
2622 bl dvmResolveInstField @ r0<- resolved InstField ptr
2623 cmp r0, #0 @ success?
2632 mov r0, rINST, lsr #12 @ r0<- B
2636 GET_VREG(r9, r0) @ r9<- fp[B], the object pointer
2637 ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr
2638 cmp r0, #0 @ is resolved entry null?
2642 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
2643 bl dvmResolveInstField @ r0<- resolved InstField ptr
2644 cmp r0, #0 @ success?
2658 mov r0, rINST, lsr #12 @ r0<- B
2662 GET_VREG(r9, r0) @ r9<- fp[B], the object pointer
2663 ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr
2664 cmp r0, #0 @ is resolved entry null?
2668 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
2669 bl dvmResolveInstField @ r0<- resolved InstField ptr
2670 cmp r0, #0 @ success?
2686 mov r0, rINST, lsr #12 @ r0<- B
2690 GET_VREG(r9, r0) @ r9<- fp[B], the object pointer
2691 ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr
2692 cmp r0, #0 @ is resolved entry null?
2696 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
2697 bl dvmResolveInstField @ r0<- resolved InstField ptr
2698 cmp r0, #0 @ success?
2715 mov r0, rINST, lsr #12 @ r0<- B
2719 GET_VREG(r9, r0) @ r9<- fp[B], the object pointer
2720 ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr
2721 cmp r0, #0 @ is resolved entry null?
2725 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
2726 bl dvmResolveInstField @ r0<- resolved InstField ptr
2727 cmp r0, #0 @ success?
2744 mov r0, rINST, lsr #12 @ r0<- B
2748 GET_VREG(r9, r0) @ r9<- fp[B], the object pointer
2749 ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr
2750 cmp r0, #0 @ is resolved entry null?
2754 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
2755 bl dvmResolveInstField @ r0<- resolved InstField ptr
2756 cmp r0, #0 @ success?
2773 mov r0, rINST, lsr #12 @ r0<- B
2777 GET_VREG(r9, r0) @ r9<- fp[B], the object pointer
2778 ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr
2779 cmp r0, #0 @ is resolved entry null?
2783 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
2784 bl dvmResolveInstField @ r0<- resolved InstField ptr
2785 cmp r0, #0 @ success?
2803 ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr
2804 cmp r0, #0 @ is resolved entry null?
2806 .LOP_SGET_finish: @ field ptr in r0
2807 ldr r1, [r0, #offStaticField_value] @ r1<- field value
2826 ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr
2827 cmp r0, #0 @ is resolved entry null?
2832 add r0, r0, #offStaticField_value @ r0<- pointer to data
2833 bl dvmQuasiAtomicRead64 @ r0/r1<- contents of field
2835 ldrd r0, [r0, #offStaticField_value] @ r0/r1<- field value (aligned)
2839 stmia r9, {r0-r1} @ vAA/vAA+1<- r0/r1
2857 ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr
2858 cmp r0, #0 @ is resolved entry null?
2860 .LOP_SGET_OBJECT_finish: @ field ptr in r0
2861 ldr r1, [r0, #offStaticField_value] @ r1<- field value
2884 ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr
2885 cmp r0, #0 @ is resolved entry null?
2887 .LOP_SGET_BOOLEAN_finish: @ field ptr in r0
2888 ldr r1, [r0, #offStaticField_value] @ r1<- field value
2911 ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr
2912 cmp r0, #0 @ is resolved entry null?
2914 .LOP_SGET_BYTE_finish: @ field ptr in r0
2915 ldr r1, [r0, #offStaticField_value] @ r1<- field value
2938 ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr
2939 cmp r0, #0 @ is resolved entry null?
2941 .LOP_SGET_CHAR_finish: @ field ptr in r0
2942 ldr r1, [r0, #offStaticField_value] @ r1<- field value
2965 ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr
2966 cmp r0, #0 @ is resolved entry null?
2968 .LOP_SGET_SHORT_finish: @ field ptr in r0
2969 ldr r1, [r0, #offStaticField_value] @ r1<- field value
2991 ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr
2992 cmp r0, #0 @ is resolved entry null?
2994 .LOP_SPUT_finish: @ field ptr in r0
3000 str r1, [r0, #offStaticField_value] @ field<- vAA
3011 ldr r0, [rGLUE, #offGlue_methodClassDex] @ r0<- DvmDex
3013 ldr r0, [r0, #offDvmDex_pResFields] @ r0<- dvmDex->pResFields
3015 ldr r2, [r0, r1, lsl #2] @ r2<- resolved StaticField ptr
3021 ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1
3025 bl dvmQuasiAtomicSwap64 @ stores r0/r1 into addr r2
3027 strd r0, [r2, #offStaticField_value] @ field<- vAA/vAA+1
3044 ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr
3045 cmp r0, #0 @ is resolved entry null?
3049 ldr r0, [r9, #offMethod_clazz] @ r0<- method->clazz
3050 bl dvmResolveStaticField @ r0<- resolved StaticField ptr
3051 cmp r0, #0 @ success?
3070 ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr
3071 cmp r0, #0 @ is resolved entry null?
3073 .LOP_SPUT_BOOLEAN_finish: @ field ptr in r0
3079 str r1, [r0, #offStaticField_value] @ field<- vAA
3097 ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr
3098 cmp r0, #0 @ is resolved entry null?
3100 .LOP_SPUT_BYTE_finish: @ field ptr in r0
3106 str r1, [r0, #offStaticField_value] @ field<- vAA
3124 ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr
3125 cmp r0, #0 @ is resolved entry null?
3127 .LOP_SPUT_CHAR_finish: @ field ptr in r0
3133 str r1, [r0, #offStaticField_value] @ field<- vAA
3151 ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr
3152 cmp r0, #0 @ is resolved entry null?
3154 .LOP_SPUT_SHORT_finish: @ field ptr in r0
3160 str r1, [r0, #offStaticField_value] @ field<- vAA
3179 ldr r0, [r3, r1, lsl #2] @ r0<- resolved baseMethod
3183 cmp r0, #0 @ already resolved?
3187 ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz
3189 bl dvmResolveMethod @ r0<- call(clazz, ref, flags)
3190 cmp r0, #0 @ got null?
3213 ldr r0, [r3, r1, lsl #2] @ r0<- resolved baseMethod
3217 cmp r0, #0 @ already resolved?
3243 ldr r0, [r3, r1, lsl #2] @ r0<- resolved methodToCall
3247 cmp r0, #0 @ already resolved?
3270 ldr r0, [r3, r1, lsl #2] @ r0<- resolved methodToCall
3271 cmp r0, #0 @ already resolved?
3275 ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz
3277 bl dvmResolveMethod @ r0<- call(clazz, ref, flags)
3278 cmp r0, #0 @ got null?
3299 GET_VREG(r0, r2) @ r0<- first arg ("this")
3301 cmp r0, #0 @ null obj?
3304 ldr r0, [r0, #offObject_clazz] @ r0<- thisPtr->clazz
3305 bl dvmFindInterfaceMethodInCache @ r0<- call(class, ref, method, dex)
3306 cmp r0, #0 @ failed?
3334 ldr r0, [r3, r1, lsl #2] @ r0<- resolved baseMethod
3338 cmp r0, #0 @ already resolved?
3342 ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz
3344 bl dvmResolveMethod @ r0<- call(clazz, ref, flags)
3345 cmp r0, #0 @ got null?
3370 ldr r0, [r3, r1, lsl #2] @ r0<- resolved baseMethod
3374 cmp r0, #0 @ already resolved?
3402 ldr r0, [r3, r1, lsl #2] @ r0<- resolved methodToCall
3406 cmp r0, #0 @ already resolved?
3431 ldr r0, [r3, r1, lsl #2] @ r0<- resolved methodToCall
3432 cmp r0, #0 @ already resolved?
3436 ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz
3438 bl dvmResolveMethod @ r0<- call(clazz, ref, flags)
3439 cmp r0, #0 @ got null?
3462 GET_VREG(r0, r2) @ r0<- first arg ("this")
3464 cmp r0, #0 @ null obj?
3467 ldr r0, [r0, #offObject_clazz] @ r0<- thisPtr->clazz
3468 bl dvmFindInterfaceMethodInCache @ r0<- call(class, ref, method, dex)
3469 cmp r0, #0 @ failed?
3497 * specifies an instruction that performs "result = op r0".
3506 GET_VREG(r0, r3) @ r0<- vB
3509 rsb r0, r0, #0 @ r0<- op, r0-r3 changed
3511 SET_VREG(r0, r9) @ vAA<- r0
3523 * specifies an instruction that performs "result = op r0".
3532 GET_VREG(r0, r3) @ r0<- vB
3535 mvn r0, r0 @ r0<- op, r0-r3 changed
3537 SET_VREG(r0, r9) @ vAA<- r0
3549 * specifies an instruction that performs "result = op r0/r1".
3559 ldmia r3, {r0-r1} @ r0/r1<- vAA
3561 rsbs r0, r0, #0 @ optional op; may set condition codes
3562 rsc r1, r1, #0 @ r0/r1<- op, r2-r3 changed
3564 stmia r9, {r0-r1} @ vAA<- r0/r1
3576 * specifies an instruction that performs "result = op r0/r1".
3586 ldmia r3, {r0-r1} @ r0/r1<- vAA
3588 mvn r0, r0 @ optional op; may set condition codes
3589 mvn r1, r1 @ r0/r1<- op, r2-r3 changed
3591 stmia r9, {r0-r1} @ vAA<- r0/r1
3603 * specifies an instruction that performs "result = op r0".
3612 GET_VREG(r0, r3) @ r0<- vB
3615 add r0, r0, #0x80000000 @ r0<- op, r0-r3 changed
3617 SET_VREG(r0, r9) @ vAA<- r0
3629 * specifies an instruction that performs "result = op r0/r1".
3639 ldmia r3, {r0-r1} @ r0/r1<- vAA
3642 add r1, r1, #0x80000000 @ r0/r1<- op, r2-r3 changed
3644 stmia r9, {r0-r1} @ vAA<- r0/r1
3656 * that specifies an instruction that performs "result = op r0", where
3657 * "result" is a 64-bit quantity in r0/r1.
3664 GET_VREG(r0, r3) @ r0<- vB
3668 mov r1, r0, asr #31 @ r0<- op, r0-r3 changed
3670 stmia r9, {r0-r1} @ vA/vA+1<- r0/r1
3734 mov r0, rINST, lsr #8 @ r0<- A from 11:8
3737 and r0, r0, #15
3739 SET_VREG(r2, r0) @ fp[A]<- r2
3750 * that specifies an instruction that performs "result = op r0/r1", where
3751 * "result" is a 32-bit quantity in r0.
3762 ldmia r3, {r0-r1} @ r0/r1<- vB/vB+1
3765 bl __aeabi_l2f @ r0<- op, r0-r3 changed
3767 SET_VREG(r0, r9) @ vA<- r0
3779 * specifies an instruction that performs "result = op r0/r1".
3789 ldmia r3, {r0-r1} @ r0/r1<- vAA
3792 bl __aeabi_l2d @ r0/r1<- op, r2-r3 changed
3794 stmia r9, {r0-r1} @ vAA<- r0/r1
3832 * that specifies an instruction that performs "result = op r0", where
3833 * "result" is a 64-bit quantity in r0/r1.
3840 GET_VREG(r0, r3) @ r0<- vB
3844 bl f2l_doconv @ r0<- op, r0-r3 changed
3846 stmia r9, {r0-r1} @ vA/vA+1<- r0/r1
3910 * specifies an instruction that performs "result = op r0/r1".
3920 ldmia r3, {r0-r1} @ r0/r1<- vAA
3923 bl d2l_doconv @ r0/r1<- op, r2-r3 changed
3925 stmia r9, {r0-r1} @ vAA<- r0/r1
3963 * specifies an instruction that performs "result = op r0".
3972 GET_VREG(r0, r3) @ r0<- vB
3975 sxtb r0, r0 @ r0<- op, r0-r3 changed
3977 SET_VREG(r0, r9) @ vAA<- r0
3989 * specifies an instruction that performs "result = op r0".
3998 GET_VREG(r0, r3) @ r0<- vB
4001 uxth r0, r0 @ r0<- op, r0-r3 changed
4003 SET_VREG(r0, r9) @ vAA<- r0
4015 * specifies an instruction that performs "result = op r0".
4024 GET_VREG(r0, r3) @ r0<- vB
4027 sxth r0, r0 @ r0<- op, r0-r3 changed
4029 SET_VREG(r0, r9) @ vAA<- r0
4041 * specifies an instruction that performs "result = r0 op r1".
4043 * comes back in a register other than r0, you can override "result".)
4055 FETCH(r0, 1) @ r0<- CCBB
4057 mov r3, r0, lsr #8 @ r3<- CC
4058 and r2, r0, #255 @ r2<- BB
4060 GET_VREG(r0, r2) @ r0<- vBB
4068 add r0, r0, r1 @ r0<- op, r0-r3 changed
4070 SET_VREG(r0, r9) @ vAA<- r0
4082 * specifies an instruction that performs "result = r0 op r1".
4084 * comes back in a register other than r0, you can override "result".)
4096 FETCH(r0, 1) @ r0<- CCBB
4098 mov r3, r0, lsr #8 @ r3<- CC
4099 and r2, r0, #255 @ r2<- BB
4101 GET_VREG(r0, r2) @ r0<- vBB
4109 sub r0, r0, r1 @ r0<- op, r0-r3 changed
4111 SET_VREG(r0, r9) @ vAA<- r0
4120 /* must be "mul r0, r1, r0" -- "r0, r0, r1" is illegal */
4124 * specifies an instruction that performs "result = r0 op r1".
4126 * comes back in a register other than r0, you can override "result".)
4138 FETCH(r0, 1) @ r0<- CCBB
4140 mov r3, r0, lsr #8 @ r3<- CC
4141 and r2, r0, #255 @ r2<- BB
4143 GET_VREG(r0, r2) @ r0<- vBB
4151 mul r0, r1, r0 @ r0<- op, r0-r3 changed
4153 SET_VREG(r0, r9) @ vAA<- r0
4165 * specifies an instruction that performs "result = r0 op r1".
4167 * comes back in a register other than r0, you can override "result".)
4179 FETCH(r0, 1) @ r0<- CCBB
4181 mov r3, r0, lsr #8 @ r3<- CC
4182 and r2, r0, #255 @ r2<- BB
4184 GET_VREG(r0, r2) @ r0<- vBB
4192 bl __aeabi_idiv @ r0<- op, r0-r3 changed
4194 SET_VREG(r0, r9) @ vAA<- r0
4203 /* idivmod returns quotient in r0 and remainder in r1 */
4207 * specifies an instruction that performs "result = r0 op r1".
4209 * comes back in a register other than r0, you can override "result".)
4221 FETCH(r0, 1) @ r0<- CCBB
4223 mov r3, r0, lsr #8 @ r3<- CC
4224 and r2, r0, #255 @ r2<- BB
4226 GET_VREG(r0, r2) @ r0<- vBB
4234 bl __aeabi_idivmod @ r1<- op, r0-r3 changed
4248 * specifies an instruction that performs "result = r0 op r1".
4250 * comes back in a register other than r0, you can override "result".)
4262 FETCH(r0, 1) @ r0<- CCBB
4264 mov r3, r0, lsr #8 @ r3<- CC
4265 and r2, r0, #255 @ r2<- BB
4267 GET_VREG(r0, r2) @ r0<- vBB
4275 and r0, r0, r1 @ r0<- op, r0-r3 changed
4277 SET_VREG(r0, r9) @ vAA<- r0
4289 * specifies an instruction that performs "result = r0 op r1".
4291 * comes back in a register other than r0, you can override "result".)
4303 FETCH(r0, 1) @ r0<- CCBB
4305 mov r3, r0, lsr #8 @ r3<- CC
4306 and r2, r0, #255 @ r2<- BB
4308 GET_VREG(r0, r2) @ r0<- vBB
4316 orr r0, r0, r1 @ r0<- op, r0-r3 changed
4318 SET_VREG(r0, r9) @ vAA<- r0
4330 * specifies an instruction that performs "result = r0 op r1".
4332 * comes back in a register other than r0, you can override "result".)
4344 FETCH(r0, 1) @ r0<- CCBB
4346 mov r3, r0, lsr #8 @ r3<- CC
4347 and r2, r0, #255 @ r2<- BB
4349 GET_VREG(r0, r2) @ r0<- vBB
4357 eor r0, r0, r1 @ r0<- op, r0-r3 changed
4359 SET_VREG(r0, r9) @ vAA<- r0
4371 * specifies an instruction that performs "result = r0 op r1".
4373 * comes back in a register other than r0, you can override "result".)
4385 FETCH(r0, 1) @ r0<- CCBB
4387 mov r3, r0, lsr #8 @ r3<- CC
4388 and r2, r0, #255 @ r2<- BB
4390 GET_VREG(r0, r2) @ r0<- vBB
4398 mov r0, r0, asl r1 @ r0<- op, r0-r3 changed
4400 SET_VREG(r0, r9) @ vAA<- r0
4412 * specifies an instruction that performs "result = r0 op r1".
4414 * comes back in a register other than r0, you can override "result".)
4426 FETCH(r0, 1) @ r0<- CCBB
4428 mov r3, r0, lsr #8 @ r3<- CC
4429 and r2, r0, #255 @ r2<- BB
4431 GET_VREG(r0, r2) @ r0<- vBB
4439 mov r0, r0, asr r1 @ r0<- op, r0-r3 changed
4441 SET_VREG(r0, r9) @ vAA<- r0
4453 * specifies an instruction that performs "result = r0 op r1".
4455 * comes back in a register other than r0, you can override "result".)
4467 FETCH(r0, 1) @ r0<- CCBB
4469 mov r3, r0, lsr #8 @ r3<- CC
4470 and r2, r0, #255 @ r2<- BB
4472 GET_VREG(r0, r2) @ r0<- vBB
4480 mov r0, r0, lsr r1 @ r0<- op, r0-r3 changed
4482 SET_VREG(r0, r9) @ vAA<- r0
4494 * specifies an instruction that performs "result = r0-r1 op r2-r3".
4496 * comes back in a register other than r0, you can override "result".)
4508 FETCH(r0, 1) @ r0<- CCBB
4510 and r2, r0, #255 @ r2<- BB
4511 mov r3, r0, lsr #8 @ r3<- CC
4515 ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1
4523 adds r0, r0, r2 @ optional op; may set condition codes
4524 adc r1, r1, r3 @ result<- op, r0-r3 changed
4526 stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1
4538 * specifies an instruction that performs "result = r0-r1 op r2-r3".
4540 * comes back in a register other than r0, you can override "result".)
4552 FETCH(r0, 1) @ r0<- CCBB
4554 and r2, r0, #255 @ r2<- BB
4555 mov r3, r0, lsr #8 @ r3<- CC
4559 ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1
4567 subs r0, r0, r2 @ optional op; may set condition codes
4568 sbc r1, r1, r3 @ result<- op, r0-r3 changed
4570 stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1
4598 FETCH(r0, 1) @ r0<- CCBB
4599 and r2, r0, #255 @ r2<- BB
4600 mov r3, r0, lsr #8 @ r3<- CC
4603 ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1
4606 umull r9, r10, r2, r0 @ r9/r10 <- ZxX
4607 mla r2, r0, r3, ip @ r2<- YxX + (ZxW)
4608 mov r0, rINST, lsr #8 @ r0<- AA
4610 add r0, rFP, r0, lsl #2 @ r0<- &fp[AA]
4621 * specifies an instruction that performs "result = r0-r1 op r2-r3".
4623 * comes back in a register other than r0, you can override "result".)
4635 FETCH(r0, 1) @ r0<- CCBB
4637 and r2, r0, #255 @ r2<- BB
4638 mov r3, r0, lsr #8 @ r3<- CC
4642 ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1
4651 bl __aeabi_ldivmod @ result<- op, r0-r3 changed
4653 stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1
4662 /* ldivmod returns quotient in r0/r1 and remainder in r2/r3 */
4666 * specifies an instruction that performs "result = r0-r1 op r2-r3".
4668 * comes back in a register other than r0, you can override "result".)
4680 FETCH(r0, 1) @ r0<- CCBB
4682 and r2, r0, #255 @ r2<- BB
4683 mov r3, r0
4687 ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1
4696 bl __aeabi_ldivmod @ result<- op, r0-r3 changed
4710 * specifies an instruction that performs "result = r0-r1 op r2-r3".
4712 * comes back in a register other than r0, you can override "result".)
4724 FETCH(r0, 1) @ r0<- CCBB
4726 and r2, r0, #255 @ r2<- BB
4727 mov r3, r0, lsr #8 @ r3<- CC
4731 ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1
4739 and r0, r0, r2 @ optional op; may set condition codes
4740 and r1, r1, r3 @ result<- op, r0-r3 changed
4742 stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1
4754 * specifies an instruction that performs "result = r0-r1 op r2-r3".
4756 * comes back in a register other than r0, you can override "result".)
4768 FETCH(r0, 1) @ r0<- CCBB
4770 and r2, r0, #255 @ r2<- BB
4771 mov r3, r0, lsr #8 @ r3<- CC
4775 ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1
4783 orr r0, r0, r2 @ optional op; may set condition codes
4784 orr r1, r1, r3 @ result<- op, r0-r3 changed
4786 stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1
4798 * specifies an instruction that performs "result = r0-r1 op r2-r3".
4800 * comes back in a register other than r0, you can override "result".)
4812 FETCH(r0, 1) @ r0<- CCBB
4814 and r2, r0, #255 @ r2<- BB
4815 mov r3, r0, lsr #8 @ r3<- CC
4819 ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1
4827 eor r0, r0, r2 @ optional op; may set condition codes
4828 eor r1, r1, r3 @ result<- op, r0-r3 changed
4830 stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1
4846 FETCH(r0, 1) @ r0<- CCBB
4848 and r3, r0, #255 @ r3<- BB
4849 mov r0, r0, lsr #8 @ r0<- CC
4851 GET_VREG(r2, r0) @ r2<- vCC
4852 ldmia r3, {r0-r1} @ r0/r1<- vBB/vBB+1
4858 orr r1, r1, r0, lsr r3 @ r1<- r1 | (r0 << (32-r2))
4860 movpl r1, r0, asl ip @ if r2 >= 32, r1<- r0 << (r2-32)
4875 FETCH(r0, 1) @ r0<- CCBB
4877 and r3, r0, #255 @ r3<- BB
4878 mov r0, r0, lsr #8 @ r0<- CC
4880 GET_VREG(r2, r0) @ r2<- vCC
4881 ldmia r3, {r0-r1} @ r0/r1<- vBB/vBB+1
4882 and r2, r2, #63 @ r0<- r0 & 0x3f
4885 mov r0, r0, lsr r2 @ r0<- r2 >> r2
4887 orr r0, r0, r1, asl r3 @ r0<- r0 | (r1 << (32-r2))
4889 movpl r0, r1, asr ip @ if r2 >= 32, r0<-r1 >> (r2-32)
4904 FETCH(r0, 1) @ r0<- CCBB
4906 and r3, r0, #255 @ r3<- BB
4907 mov r0, r0, lsr #8 @ r0<- CC
4909 GET_VREG(r2, r0) @ r2<- vCC
4910 ldmia r3, {r0-r1} @ r0/r1<- vBB/vBB+1
4911 and r2, r2, #63 @ r0<- r0 & 0x3f
4914 mov r0, r0, lsr r2 @ r0<- r2 >> r2
4916 orr r0, r0, r1, asl r3 @ r0<- r0 | (r1 << (32-r2))
4918 movpl r0, r1, lsr ip @ if r2 >= 32, r0<-r1 >>> (r2-32)
4935 FETCH(r0, 1) @ r0<- CCBB
4937 mov r3, r0, lsr #8 @ r3<- CC
4938 and r2, r0, #255 @ r2<- BB
4965 FETCH(r0, 1) @ r0<- CCBB
4967 mov r3, r0, lsr #8 @ r3<- CC
4968 and r2, r0, #255 @ r2<- BB
4995 FETCH(r0, 1) @ r0<- CCBB
4997 mov r3, r0, lsr #8 @ r3<- CC
4998 and r2, r0, #255 @ r2<- BB
5025 FETCH(r0, 1) @ r0<- CCBB
5027 mov r3, r0, lsr #8 @ r3<- CC
5028 and r2, r0, #255 @ r2<- BB
5050 * specifies an instruction that performs "result = r0 op r1".
5052 * comes back in a register other than r0, you can override "result".)
5064 FETCH(r0, 1) @ r0<- CCBB
5066 mov r3, r0, lsr #8 @ r3<- CC
5067 and r2, r0, #255 @ r2<- BB
5069 GET_VREG(r0, r2) @ r0<- vBB
5077 bl fmodf @ r0<- op, r0-r3 changed
5079 SET_VREG(r0, r9) @ vAA<- r0
5097 FETCH(r0, 1) @ r0<- CCBB
5099 mov r3, r0, lsr #8 @ r3<- CC
5100 and r2, r0, #255 @ r2<- BB
5127 FETCH(r0, 1) @ r0<- CCBB
5129 mov r3, r0, lsr #8 @ r3<- CC
5130 and r2, r0, #255 @ r2<- BB
5157 FETCH(r0, 1) @ r0<- CCBB
5159 mov r3, r0, lsr #8 @ r3<- CC
5160 and r2, r0, #255 @ r2<- BB
5187 FETCH(r0, 1) @ r0<- CCBB
5189 mov r3, r0, lsr #8 @ r3<- CC
5190 and r2, r0, #255 @ r2<- BB
5212 * specifies an instruction that performs "result = r0-r1 op r2-r3".
5214 * comes back in a register other than r0, you can override "result".)
5226 FETCH(r0, 1) @ r0<- CCBB
5228 and r2, r0, #255 @ r2<- BB
5229 mov r3, r0, lsr #8 @ r3<- CC
5233 ldmia r2, {r0-r1} @ r0/r1<- vBB/vBB+1
5242 bl fmod @ result<- op, r0-r3 changed
5244 stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1
5256 * that specifies an instruction that performs "result = r0 op r1".
5258 * comes back in a register other than r0, you can override "result".)
5272 GET_VREG(r0, r9) @ r0<- vA
5280 add r0, r0, r1 @ r0<- op, r0-r3 changed
5282 SET_VREG(r0, r9) @ vAA<- r0
5294 * that specifies an instruction that performs "result = r0 op r1".
5296 * comes back in a register other than r0, you can override "result".)
5310 GET_VREG(r0, r9) @ r0<- vA
5318 sub r0, r0, r1 @ r0<- op, r0-r3 changed
5320 SET_VREG(r0, r9) @ vAA<- r0
5329 /* must be "mul r0, r1, r0" -- "r0, r0, r1" is illegal */
5333 * that specifies an instruction that performs "result = r0 op r1".
5335 * comes back in a register other than r0, you can override "result".)
5349 GET_VREG(r0, r9) @ r0<- vA
5357 mul r0, r1, r0 @ r0<- op, r0-r3 changed
5359 SET_VREG(r0, r9) @ vAA<- r0
5371 * that specifies an instruction that performs "result = r0 op r1".
5373 * comes back in a register other than r0, you can override "result".)
5387 GET_VREG(r0, r9) @ r0<- vA
5395 bl __aeabi_idiv @ r0<- op, r0-r3 changed
5397 SET_VREG(r0, r9) @ vAA<- r0
5406 /* idivmod returns quotient in r0 and remainder in r1 */
5410 * that specifies an instruction that performs "result = r0 op r1".
5412 * comes back in a register other than r0, you can override "result".)
5426 GET_VREG(r0, r9) @ r0<- vA
5434 bl __aeabi_idivmod @ r1<- op, r0-r3 changed
5448 * that specifies an instruction that performs "result = r0 op r1".
5450 * comes back in a register other than r0, you can override "result".)
5464 GET_VREG(r0, r9) @ r0<- vA
5472 and r0, r0, r1 @ r0<- op, r0-r3 changed
5474 SET_VREG(r0, r9) @ vAA<- r0
5486 * that specifies an instruction that performs "result = r0 op r1".
5488 * comes back in a register other than r0, you can override "result".)
5502 GET_VREG(r0, r9) @ r0<- vA
5510 orr r0, r0, r1 @ r0<- op, r0-r3 changed
5512 SET_VREG(r0, r9) @ vAA<- r0
5524 * that specifies an instruction that performs "result = r0 op r1".
5526 * comes back in a register other than r0, you can override "result".)
5540 GET_VREG(r0, r9) @ r0<- vA
5548 eor r0, r0, r1 @ r0<- op, r0-r3 changed
5550 SET_VREG(r0, r9) @ vAA<- r0
5562 * that specifies an instruction that performs "result = r0 op r1".
5564 * comes back in a register other than r0, you can override "result".)
5578 GET_VREG(r0, r9) @ r0<- vA
5586 mov r0, r0, asl r1 @ r0<- op, r0-r3 changed
5588 SET_VREG(r0, r9) @ vAA<- r0
5600 * that specifies an instruction that performs "result = r0 op r1".
5602 * comes back in a register other than r0, you can override "result".)
5616 GET_VREG(r0, r9) @ r0<- vA
5624 mov r0, r0, asr r1 @ r0<- op, r0-r3 changed
5626 SET_VREG(r0, r9) @ vAA<- r0
5638 * that specifies an instruction that performs "result = r0 op r1".
5640 * comes back in a register other than r0, you can override "result".)
5654 GET_VREG(r0, r9) @ r0<- vA
5662 mov r0, r0, lsr r1 @ r0<- op, r0-r3 changed
5664 SET_VREG(r0, r9) @ vAA<- r0
5676 * that specifies an instruction that performs "result = r0-r1 op r2-r3".
5678 * comes back in a register other than r0, you can override "result".)
5694 ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1
5701 adds r0, r0, r2 @ optional op; may set condition codes
5702 adc r1, r1, r3 @ result<- op, r0-r3 changed
5704 stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1
5716 * that specifies an instruction that performs "result = r0-r1 op r2-r3".
5718 * comes back in a register other than r0, you can override "result".)
5734 ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1
5741 subs r0, r0, r2 @ optional op; may set condition codes
5742 sbc r1, r1, r3 @ result<- op, r0-r3 changed
5744 stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1
5767 ldmia rINST, {r0-r1} @ r0/r1<- vAA/vAA+1
5769 umull r9, r10, r2, r0 @ r9/r10 <- ZxX
5770 mla r2, r0, r3, ip @ r2<- YxX + (ZxW)
5771 mov r0, rINST @ r0<- &fp[A] (free up rINST)
5775 stmia r0, {r9-r10} @ vAA/vAA+1<- r9/r10
5785 * that specifies an instruction that performs "result = r0-r1 op r2-r3".
5787 * comes back in a register other than r0, you can override "result".)
5803 ldmia r9, {r0-r1} @ r0
5811 bl __aeabi_ldivmod @ result<- op, r0-r3 changed
5813 stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1
5822 /* ldivmod returns quotient in r0/r1 and remainder in r2/r3 */
5826 * that specifies an instruction that performs "result = r0-r1 op r2-r3".
5828 * comes back in a register other than r0, you can override "result".)
5844 ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1
5852 bl __aeabi_ldivmod @ result<- op, r0-r3 changed
5866 * that specifies an instruction that performs "result = r0-r1 op r2-r3".
5868 * comes back in a register other than r0, you can override "result".)
5884 ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1
5891 and r0, r0, r2 @ optional op; may set condition codes
5892 and r1, r1, r3 @ result<- op, r0-r3 changed
5894 stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1
5906 * that specifies an instruction that performs "result = r0-r1 op r2-r3".
5908 * comes back in a register other than r0, you can override "result".)
5924 ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1
5931 orr r0, r0, r2 @ optional op; may set condition codes
5932 orr r1, r1, r3 @ result<- op, r0-r3 changed
5934 stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1
5946 * that specifies an instruction that performs "result = r0-r1 op r2-r3".
5948 * comes back in a register other than r0, you can override "result".)
5964 ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1
5971 eor r0, r0, r2 @ optional op; may set condition codes
5972 eor r1, r1, r3 @ result<- op, r0-r3 changed
5974 stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1
5993 ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1
5997 orr r1, r1, r0, lsr r3 @ r1<- r1 | (r0 << (32-r2))
6000 movpl r1, r0, asl ip @ if r2 >= 32, r1<- r0 << (r2-32)
6001 mov r0, r0, asl r2 @ r0<- r0 << r2
6018 ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1
6020 mov r0, r0, lsr r2 @ r0<- r2 >> r2
6022 orr r0, r0, r1, asl r3 @ r0<- r0 | (r1 << (32-r2))
6025 movpl r0, r1, asr ip @ if r2 >= 32, r0<-r1 >> (r2-32)
6043 ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1
6045 mov r0, r0, lsr r2 @ r0<- r2 >> r2
6047 orr r0, r0, r1, asl r3 @ r0<- r0 | (r1 << (32-r2))
6050 movpl r0, r1, lsr ip @ if r2 >= 32, r0<-r1 >>> (r2-32)
6174 * that specifies an instruction that performs "result = r0 op r1".
6176 * comes back in a register other than r0, you can override "result".)
6190 GET_VREG(r0, r9) @ r0<- vA
6198 bl fmodf @ r0<- op, r0-r3 changed
6200 SET_VREG(r0, r9) @ vAA<- r0
6329 * that specifies an instruction that performs "result = r0-r1 op r2-r3".
6331 * comes back in a register other than r0, you can override "result".)
6347 ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1
6355 bl fmod @ result<- op, r0-r3 changed
6357 stmia r9, {r0,r1} @ vAA/vAA+1<- r0/r1
6369 * that specifies an instruction that performs "result = r0 op r1".
6371 * comes back in a register other than r0, you can override "result".)
6383 GET_VREG(r0, r2) @ r0<- vB
6390 add r0, r0, r1 @ r0<- op, r0-r3 changed
6392 SET_VREG(r0, r9) @ vAA<- r0
6405 * that specifies an instruction that performs "result = r0 op r1".
6407 * comes back in a register other than r0, you can override "result".)
6419 GET_VREG(r0, r2) @ r0<- vB
6426 rsb r0, r0, r1 @ r0<- op, r0-r3 changed
6428 SET_VREG(r0, r9) @ vAA<- r0
6437 /* must be "mul r0, r1, r0" -- "r0, r0, r1" is illegal */
6441 * that specifies an instruction that performs "result = r0 op r1".
6443 * comes back in a register other than r0, you can override "result".)
6455 GET_VREG(r0, r2) @ r0<- vB
6462 mul r0, r1, r0 @ r0<- op, r0-r3 changed
6464 SET_VREG(r0, r9) @ vAA<- r0
6476 * that specifies an instruction that performs "result = r0 op r1".
6478 * comes back in a register other than r0, you can override "result".)
6490 GET_VREG(r0, r2) @ r0<- vB
6497 bl __aeabi_idiv @ r0<- op, r0-r3 changed
6499 SET_VREG(r0, r9) @ vAA<- r0
6508 /* idivmod returns quotient in r0 and remainder in r1 */
6512 * that specifies an instruction that performs "result = r0 op r1".
6514 * comes back in a register other than r0, you can override "result".)
6526 GET_VREG(r0, r2) @ r0<- vB
6533 bl __aeabi_idivmod @ r1<- op, r0-r3 changed
6547 * that specifies an instruction that performs "result = r0 op r1".
6549 * comes back in a register other than r0, you can override "result".)
6561 GET_VREG(r0, r2) @ r0<- vB
6568 and r0, r0, r1 @ r0<- op, r0-r3 changed
6570 SET_VREG(r0, r9) @ vAA<- r0
6582 * that specifies an instruction that performs "result = r0 op r1".
6584 * comes back in a register other than r0, you can override "result".)
6596 GET_VREG(r0, r2) @ r0<- vB
6603 orr r0, r0, r1 @ r0<- op, r0-r3 changed
6605 SET_VREG(r0, r9) @ vAA<- r0
6617 * that specifies an instruction that performs "result = r0 op r1".
6619 * comes back in a register other than r0, you can override "result".)
6631 GET_VREG(r0, r2) @ r0<- vB
6638 eor r0, r0, r1 @ r0<- op, r0-r3 changed
6640 SET_VREG(r0, r9) @ vAA<- r0
6652 * that specifies an instruction that performs "result = r0 op r1".
6654 * comes back in a register other than r0, you can override "result".)
6667 GET_VREG(r0, r2) @ r0<- vBB
6676 add r0, r0, r1 @ r0<- op, r0-r3 changed
6678 SET_VREG(r0, r9) @ vAA<- r0
6690 * that specifies an instruction that performs "result = r0 op r1".
6692 * comes back in a register other than r0, you can override "result".)
6705 GET_VREG(r0, r2) @ r0<- vBB
6714 rsb r0, r0, r1 @ r0<- op, r0-r3 changed
6716 SET_VREG(r0, r9) @ vAA<- r0
6725 /* must be "mul r0, r1, r0" -- "r0, r0, r1" is illegal */
6729 * that specifies an instruction that performs "result = r0 op r1".
6731 * comes back in a register other than r0, you can override "result".)
6744 GET_VREG(r0, r2) @ r0<- vBB
6753 mul r0, r1, r0 @ r0<- op, r0-r3 changed
6755 SET_VREG(r0, r9) @ vAA<- r0
6767 * that specifies an instruction that performs "result = r0 op r1".
6769 * comes back in a register other than r0, you can override "result".)
6782 GET_VREG(r0, r2) @ r0<- vBB
6791 bl __aeabi_idiv @ r0<- op, r0-r3 changed
6793 SET_VREG(r0, r9) @ vAA<- r0
6802 /* idivmod returns quotient in r0 and remainder in r1 */
6806 * that specifies an instruction that performs "result = r0 op r1".
6808 * comes back in a register other than r0, you can override "result".)
6821 GET_VREG(r0, r2) @ r0<- vBB
6830 bl __aeabi_idivmod @ r1<- op, r0-r3 changed
6844 * that specifies an instruction that performs "result = r0 op r1".
6846 * comes back in a register other than r0, you can override "result".)
6859 GET_VREG(r0, r2) @ r0<- vBB
6868 and r0, r0, r1 @ r0<- op, r0-r3 changed
6870 SET_VREG(r0, r9) @ vAA<- r0
6882 * that specifies an instruction that performs "result = r0 op r1".
6884 * comes back in a register other than r0, you can override "result".)
6897 GET_VREG(r0, r2) @ r0<- vBB
6906 orr r0, r0, r1 @ r0<- op, r0-r3 changed
6908 SET_VREG(r0, r9) @ vAA<- r0
6920 * that specifies an instruction that performs "result = r0 op r1".
6922 * comes back in a register other than r0, you can override "result".)
6935 GET_VREG(r0, r2) @ r0<- vBB
6944 eor r0, r0, r1 @ r0<- op, r0-r3 changed
6946 SET_VREG(r0, r9) @ vAA<- r0
6958 * that specifies an instruction that performs "result = r0 op r1".
6960 * comes back in a register other than r0, you can override "result".)
6973 GET_VREG(r0, r2) @ r0<- vBB
6982 mov r0, r0, asl r1 @ r0<- op, r0-r3 changed
6984 SET_VREG(r0, r9) @ vAA<- r0
6996 * that specifies an instruction that performs "result = r0 op r1".
6998 * comes back in a register other than r0, you can override "result".)
7011 GET_VREG(r0, r2) @ r0<- vBB
7020 mov r0, r0, asr r1 @ r0<- op, r0-r3 changed
7022 SET_VREG(r0, r9) @ vAA<- r0
7034 * that specifies an instruction that performs "result = r0 op r1".
7036 * comes back in a register other than r0, you can override "result".)
7049 GET_VREG(r0, r2) @ r0<- vBB
7058 mov r0, r0, lsr r1 @ r0<- op, r0-r3 changed
7060 SET_VREG(r0, r9) @ vAA<- r0
7076 mov r0, rINST, lsr #12 @ r0<- B
7080 GET_VREG(r9, r0) @ r9<- fp[B], the object pointer
7081 ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr
7082 cmp r0, #0 @ is resolved entry null?
7086 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
7087 bl dvmResolveInstField @ r0<- resolved InstField ptr
7088 cmp r0, #0
7104 mov r0, rINST, lsr #12 @ r0<- B
7108 GET_VREG(r9, r0) @ r9<- fp[B], the object pointer
7109 ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr
7110 cmp r0, #0 @ is resolved entry null?
7114 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
7115 bl dvmResolveInstField @ r0<- resolved InstField ptr
7116 cmp r0, #0 @ success?
7135 ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr
7136 cmp r0, #0 @ is resolved entry null?
7138 .LOP_SGET_VOLATILE_finish: @ field ptr in r0
7139 ldr r1, [r0, #offStaticField_value] @ r1<- field value
7162 ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr
7163 cmp r0, #0 @ is resolved entry null?
7165 .LOP_SPUT_VOLATILE_finish: @ field ptr in r0
7171 str r1, [r0, #offStaticField_value] @ field<- vAA
7186 mov r0, rINST, lsr #12 @ r0<- B
7190 GET_VREG(r9, r0) @ r9<- fp[B], the object pointer
7191 ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr
7192 cmp r0, #0 @ is resolved entry null?
7196 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
7197 bl dvmResolveInstField @ r0<- resolved InstField ptr
7198 cmp r0, #0
7212 mov r0, rINST, lsr #12 @ r0<- B
7216 GET_VREG(r9, r0) @ r9<- fp[B], the object pointer
7217 ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr
7218 cmp r0, #0 @ is resolved entry null?
7222 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
7223 bl dvmResolveInstField @ r0<- resolved InstField ptr
7224 cmp r0, #0
7235 mov r0, rINST, lsr #12 @ r0<- B
7239 GET_VREG(r9, r0) @ r9<- fp[B], the object pointer
7240 ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr
7241 cmp r0, #0 @ is resolved entry null?
7245 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
7246 bl dvmResolveInstField @ r0<- resolved InstField ptr
7247 cmp r0, #0 @ success?
7264 ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr
7265 cmp r0, #0 @ is resolved entry null?
7270 add r0, r0, #offStaticField_value @ r0<- pointer to data
7271 bl dvmQuasiAtomicRead64 @ r0/r1<- contents of field
7273 ldrd r0, [r0, #offStaticField_value] @ r0/r1<- field value (aligned)
7277 stmia r9, {r0-r1} @ vAA/vAA+1<- r0/r1
7291 ldr r0, [rGLUE, #offGlue_methodClassDex] @ r0<- DvmDex
7293 ldr r0, [r0, #offDvmDex_pResFields] @ r0<- dvmDex->pResFields
7295 ldr r2, [r0, r1, lsl #2] @ r2<- resolved StaticField ptr
7301 ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1
7305 bl dvmQuasiAtomicSwap64 @ stores r0/r1 into addr r2
7307 strd r0, [r2, #offStaticField_value] @ field<- vAA/vAA+1
7330 ldr r0, [rGLUE, #offGlue_method] @ r0<- glue->method
7347 * The first four args are in r0-r3, pointer to return value storage
7356 mov r0, rINST, lsr #12 @ r0<- B
7360 cmp r0, #0 @ test boolean result of inline
7377 * The first four args are in r0-r3, pointer to return value storage
7386 mov r0, rINST, lsr #8 @ r0<- AA
7390 cmp r0, #0 @ test boolean result of inline
7427 ldr r0, [r3, r1] @ r0<- obj.field (always 32 bits)
7430 SET_VREG(r0, r2) @ fp[A]<- r0
7444 ldrd r0, [r3, ip] @ r0<- obj.field (64 bits, aligned)
7448 stmia r3, {r0-r1} @ fp[A]<- r0/r1
7464 ldr r0, [r3, r1] @ r0<- obj.field (always 32 bits)
7468 SET_VREG(r0, r2) @ fp[A]<- r0
7484 GET_VREG(r0, r2) @ r0<- fp[A]
7486 str r0, [r3, r1] @ obj.field (always 32 bits)<- r0
7496 ubfx r0, rINST, #8, #4 @ r0<- A
7498 add r3, rFP, r0, lsl #2 @ r3<- &fp[A]
7500 ldmia r3, {r0-r1} @ r0/r1<- fp[A]
7504 strd r0, [r2, r3] @ obj.field (64 bits, aligned)<- r0/r1
7521 GET_VREG(r0, r2) @ r0<- fp[A]
7524 str r0, [r3, r1] @ obj.field (always 32 bits)<- r0
7525 cmp r0, #0
7552 ldr r0, [r2, r1, lsl #2] @ r3<- vtable[BBBB]
7578 ldr r0, [r2, r1, lsl #2] @ r3<- vtable[BBBB]
7605 ldr r0, [r2, r1, lsl #2] @ r0<- super->vtable[BBBB]
7633 ldr r0, [r2, r1, lsl #2] @ r0<- super->vtable[BBBB]
7649 mov r0, rINST, lsr #12 @ r0<- B
7653 GET_VREG(r9, r0) @ r9<- fp[B], the object pointer
7654 ldr r0, [r2, r1, lsl #2] @ r0<- resolved InstField ptr
7655 cmp r0, #0 @ is resolved entry null?
7659 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
7660 bl dvmResolveInstField @ r0<- resolved InstField ptr
7661 cmp r0, #0 @ success?
7680 ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr
7681 cmp r0, #0 @ is resolved entry null?
7683 .LOP_SGET_OBJECT_VOLATILE_finish: @ field ptr in r0
7684 ldr r1, [r0, #offStaticField_value] @ r1<- field value
7707 ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr
7708 cmp r0, #0 @ is resolved entry null?
7712 ldr r0, [r9, #offMethod_clazz] @ r0<- method->clazz
7713 bl dvmResolveStaticField @ r0<- resolved StaticField ptr
7714 cmp r0, #0 @ success?
7754 ldr r0, [rGLUE, #offGlue_method] @ r0<- glue->method
7755 ldr r0, [r0, #offMethod_clazz] @ r0<- method->clazz
7756 bl dvmResolveString @ r0<- String reference
7757 cmp r0, #0 @ failed?
7761 SET_VREG(r0, r9) @ vAA<- r0
7773 ldr r0, [rGLUE, #offGlue_method] @ r0<- glue->method
7774 ldr r0, [r0, #offMethod_clazz] @ r0<- method->clazz
7775 bl dvmResolveString @ r0<- String reference
7776 cmp r0, #0 @ failed?
7780 SET_VREG(r0, r9) @ vAA<- r0
7792 ldr r0, [rGLUE, #offGlue_method] @ r0<- glue->method
7794 ldr r0, [r0, #offMethod_clazz] @ r0<- method->clazz
7795 bl dvmResolveClass @ r0<- Class reference
7796 cmp r0, #0 @ failed?
7800 SET_VREG(r0, r9) @ vAA<- r0
7807 * r0 holds obj->clazz
7812 bl dvmInstanceofNonTrivial @ r0<- boolean result
7813 cmp r0, #0 @ failed?
7820 ldr r0, .LstrClassCastExceptionPtr
7836 ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz
7837 bl dvmResolveClass @ r0<- resolved ClassObject ptr
7838 cmp r0, #0 @ got null?
7840 mov r1, r0 @ r1<- class resolved from BBB
7841 ldr r0, [r9, #offObject_clazz] @ r0<- obj->clazz
7851 * r0 holds obj->clazz
7856 bl dvmInstanceofNonTrivial @ r0<- boolean result
7860 * r0 holds boolean result
7865 SET_VREG(r0, r9) @ vA<- r0
7874 mov r0, #1 @ indicate success
7877 SET_VREG(r0, r9) @ vA<- r0
7889 ldr r0, [rGLUE, #offGlue_method] @ r0<- glue->method
7892 ldr r0, [r0, #offMethod_clazz] @ r0<- method->clazz
7893 bl dvmResolveClass @ r0<- resolved ClassObject ptr
7894 cmp r0, #0 @ got null?
7896 mov r1, r0 @ r1<- class resolved from BBB
7898 GET_VREG(r0, r3) @ r0<- vB (object)
7899 ldr r0, [r0, #offObject_clazz] @ r0<- obj->clazz
7905 .LOP_NEW_INSTANCE_finish: @ r0=new object
7907 cmp r0, #0 @ failed?
7911 SET_VREG(r0, r3) @ vAA<- r0
7917 * r0 holds class object
7920 mov r9, r0 @ save r0
7922 cmp r0, #0 @ check boolean result
7923 mov r0, r9 @ restore r0
7935 ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz
7936 bl dvmResolveClass @ r0<- resolved ClassObject ptr
7937 cmp r0, #0 @ got null?
7958 ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz
7959 bl dvmResolveClass @ r0<- call(clazz, ref)
7960 cmp r0, #0 @ got null?
7968 * r0 holds class
7973 bl dvmAllocArrayByClass @ r0<- call(clazz, length, flags)
7974 cmp r0, #0 @ failed?
7980 SET_VREG(r0, r2) @ vA<- r0
7987 * r0 holds array class
7991 ldr r3, [r0, #offClassObject_descriptor] @ r3<- arrayClass->descriptor
8004 bl dvmAllocArrayByClass @ r0<- call(arClass, length, flags)
8005 cmp r0, #0 @ null return?
8009 str r0, [rGLUE, #offGlue_retval] @ retval.l <- new array
8011 add r0, r0, #offArrayObject_contents @ r0<- newArray->contents
8017 @ r0=array, r1=CCCC/FEDC, r9=length (from AA or B), r10=AA/BA
8022 str r3, [r0], #4 @ *contents++ = vX
8031 str r3, [r0, #16] @ contents[4] = vA
8036 str r3, [r0], #4 @ *contents++ = vX
8042 ldr r0, [rGLUE, #offGlue_retval] @ r0<- object
8047 strneb r2, [r2, r0, lsr #GC_CARD_SHIFT] @ Mark card based on object head
8055 ldr r0, .L_strInternalError
8071 * r0 holds array class
8075 ldr r3, [r0, #offClassObject_descriptor] @ r3<- arrayClass->descriptor
8088 r0<- call(arClass, length, flags)
8089 cmp r0, #0 @ null return?
8093 str r0, [rGLUE, #offGlue_retval] @ retval.l <- new array
8095 add r0, r0, #offArrayObject_contents @ r0<- newArray->contents
8101 @ r0=array, r1=CCCC/FEDC, r9=length (from AA or B), r10=AA/BA
8106 str r3, [r0], #4 @ *contents++ = vX
8115 str r3, [r0, #16] @ contents[4] = vA
8120 str r3, [r0], #4 @ *contents++ = vX
8126 ldr r0, [rGLUE, #offGlue_retval] @ r0<- object
8131 strneb r2, [r2, r0, lsr #GC_CARD_SHIFT] @ Mark card based on object head
8139 ldr r0, .L_strInternalError
8153 SET_VREG(r0, r9) @ vAA<- r0
8158 SET_VREG(r0, r9) @ vAA<- r0
8163 SET_VREG(r0, r9) @ vAA<- r0
8168 SET_VREG(r0, r9) @ vAA<- r0
8196 ldrd r2, [r0, #offArrayObject_contents] @ r2/r3<- vBB[vCC]
8208 strd r2, [r0, #offArrayObject_contents] @ r2/r3<- vBB[vCC]
8221 ldr r0, [r9, #offObject_clazz] @ r0<- obj->clazz
8224 cmp r0, #0 @ okay?
8229 add r10, #offArrayObject_contents @ r0<- pointer to slot
8244 * r0 holds resolved field
8250 ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field
8252 ldr r0, [r9, r3] @ r0<- obj.field (8/16/32 bits)
8256 SET_VREG(r0, r2) @ fp[A]<- r0
8263 * r0 holds resolved field
8268 ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field
8270 ldrd r0, [r9, r3] @ r0/r1<- obj.field (64-bit align ok)
8275 stmia r3, {r0-r1} @ fp[A]<- r0/r1
8282 * r0 holds resolved field
8288 ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field
8290 ldr r0, [r9, r3] @ r0<- obj.field (8/16/32 bits)
8296 SET_VREG(r0, r2) @ fp[A]<- r0
8303 * r0 holds resolved field
8309 ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field
8311 ldr r0, [r9, r3] @ r0<- obj.field (8/16/32 bits)
8317 SET_VREG(r0, r2) @ fp[A]<- r0
8324 * r0 holds resolved field
8330 ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field
8332 ldr r0, [r9, r3] @ r0<- obj.field (8/16/32 bits)
8338 SET_VREG(r0, r2) @ fp[A]<- r0
8345 * r0 holds resolved field
8351 ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field
8353 ldr r0, [r9, r3] @ r0<- obj.field (8/16/32 bits)
8359 SET_VREG(r0, r2) @ fp[A]<- r0
8366 * r0 holds resolved field
8372 ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field
8374 ldr r0, [r9, r3] @ r0<- obj.field (8/16/32 bits)
8380 SET_VREG(r0, r2) @ fp[A]<- r0
8387 * r0 holds resolved field
8392 ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field
8395 GET_VREG(r0, r1) @ r0<- fp[A]
8399 str r0, [r9, r3] @ obj.field (8/16/32 bits)<- r0
8406 * r0 holds resolved field
8412 ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field
8416 ldmia r2, {r0-r1} @ r0/r1<- fp[A]
8418 strd r0, [r9, r3] @ obj.field (64 bits, aligned)<- r0
8425 * r0 holds resolved field
8431 ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field
8434 GET_VREG(r0, r1) @ r0<- fp[A]
8440 str r0, [r9, r3] @ obj.field (32 bits)<- r0
8441 cmp r0, #0 @ stored a null reference?
8449 * r0 holds resolved field
8455 ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field
8458 GET_VREG(r0, r1) @ r0<- fp[A]
8463 str r0, [r9, r3] @ obj.field (8/16/32 bits)<- r0
8470 * r0 holds resolved field
8476 ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field
8479 GET_VREG(r0, r1) @ r0<- fp[A]
8484 str r0, [r9, r3] @ obj.field (8/16/32 bits)<- r0
8491 * r0 holds resolved field
8497 ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field
8500 GET_VREG(r0, r1) @ r0<- fp[A]
8505 str r0, [r9, r3] @ obj.field (8/16/32 bits)<- r0
8512 * r0 holds resolved field
8518 ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field
8521 GET_VREG(r0, r1) @ r0<- fp[A]
8526 str r0, [r9, r3] @ obj.field (8/16/32 bits)<- r0
8538 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
8539 bl dvmResolveStaticField @ r0<- resolved StaticField ptr
8540 cmp r0, #0 @ success?
8550 * Returns StaticField pointer in r0.
8555 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
8556 bl dvmResolveStaticField @ r0<- resolved StaticField ptr
8557 cmp r0, #0 @ success?
8570 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
8571 bl dvmResolveStaticField @ r0<- resolved StaticField ptr
8572 cmp r0, #0 @ success?
8585 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
8586 bl dvmResolveStaticField @ r0<- resolved StaticField ptr
8587 cmp r0, #0 @ success?
8600 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
8601 bl dvmResolveStaticField @ r0<- resolved StaticField ptr
8602 cmp r0, #0 @ success?
8615 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
8616 bl dvmResolveStaticField @ r0<- resolved StaticField ptr
8617 cmp r0, #0 @ success?
8630 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
8631 bl dvmResolveStaticField @ r0<- resolved StaticField ptr
8632 cmp r0, #0 @ success?
8645 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
8646 bl dvmResolveStaticField @ r0<- resolved StaticField ptr
8647 cmp r0, #0 @ success?
8663 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
8664 bl dvmResolveStaticField @ r0<- resolved StaticField ptr
8665 cmp r0, #0 @ success?
8666 mov r2, r0 @ copy to r2
8671 .LOP_SPUT_OBJECT_finish: @ field ptr in r0
8676 ldr r9, [r0, #offField_clazz] @ r9<- field->clazz
8679 str r1, [r0, #offStaticField_value] @ field<- vAA
8693 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
8694 bl dvmResolveStaticField @ r0<- resolved StaticField ptr
8695 cmp r0, #0 @ success?
8708 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
8709 bl dvmResolveStaticField @ r0<- resolved StaticField ptr
8710 cmp r0, #0 @ success?
8723 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
8724 bl dvmResolveStaticField @ r0<- resolved StaticField ptr
8725 cmp r0, #0 @ success?
8738 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
8739 bl dvmResolveStaticField @ r0<- resolved StaticField ptr
8740 cmp r0, #0 @ success?
8748 * r0 = resolved base method
8753 ldrh r2, [r0, #offMethod_methodIndex] @ r2<- baseMethod->methodIndex
8758 ldr r0, [r3, r2, lsl #2] @ r3<- vtable[methodIndex]
8765 * r0 = resolved base method
8770 ldrh r2, [r0, #offMethod_methodIndex] @ r2<- baseMethod->methodIndex
8776 ldr r0, [r1, r2, lsl #2] @ r3<- vtable[methodIndex]
8780 mov r0, r9 @ r0<- method->clazz
8782 bl dvmResolveMethod @ r0<- call(clazz, ref, flags)
8783 cmp r0, #0 @ got null?
8789 * r0 = resolved base method
8792 ldr r1, [r0, #offMethod_name] @ r1<- method name
8804 ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz
8806 bl dvmResolveMethod @ r0<- call(clazz, ref, flags)
8807 cmp r0, #0 @ got null?
8816 * r0 = resolved base method
8821 ldrh r2, [r0, #offMethod_methodIndex] @ r2<- baseMethod->methodIndex
8826 ldr r0, [r3, r2, lsl #2] @ r3<- vtable[methodIndex]
8833 * r0 = resolved base method
8838 ldrh r2, [r0, #offMethod_methodIndex] @ r2<- baseMethod->methodIndex
8844 ldr r0, [r1, r2, lsl #2] @ r3<- vtable[methodIndex]
8848 mov r0, r9 @ r0<- method->clazz
8850 bl dvmResolveMethod @ r0<- call(clazz, ref, flags)
8851 cmp r0, #0 @ got null?
8857 * r0 = resolved base method
8860 ldr r1, [r0, #offMethod_name] @ r1<- method name
8872 ldr r0, [r3, #offMethod_clazz] @ r0<- method->clazz
8874 r0<- call(clazz, ref, flags)
8875 cmp r0, #0 @ got null?
8882 * Convert the float in r0 to a long in r0/r1.
8891 mov r4, r0
8893 cmp r0, #0 @ nonzero == yes
8894 mvnne r0, #0 @ return maxlong (7fffffff)
8898 mov r0, r4 @ recover arg
8901 cmp r0, #0 @ nonzero == yes
8902 movne r0, #0 @ return minlong (80000000)
8906 mov r0, r4 @ recover arg
8909 cmp r0, #0 @ zero == no
8913 mov r0, r4 @ recover arg
8919 * Convert the double in r0/r1 to a long in r0/r1.
8931 mov r4, r0 @ save a copy of r0
8934 cmp r0, #0 @ nonzero == yes
8935 mvnne r0, #0 @ return maxlong (7fffffffffffffff)
8939 mov r0, r4 @ recover arg
8945 cmp r0, #0 @ nonzero == yes
8946 movne r0, #0 @ return minlong (8000000000000000)
8950 mov r0, r4 @ recover arg
8955 cmp r0, #0 @ zero == no
8959 mov r0, r4 @ recover arg
8971 stmia r0, {r9-r10} @ vAA/vAA+1<- r9/r10
8977 mov r0, r0, asl r2 @ r0<- r0 << r2
8979 stmia r9, {r0-r1} @ vAA/vAA+1<- r0/r1
8987 stmia r9, {r0-r1} @ vAA/vAA+1<- r0/r1
8995 stmia r9, {r0-r1} @ vAA/vAA+1<- r0/r1
9002 stmia r9, {r0-r1} @ vAA/vAA+1<- r0/r1
9009 stmia r9, {r0-r1} @ vAA/vAA+1<- r0/r1
9016 stmia r9, {r0-r1} @ vAA/vAA+1<- r0/r1
9023 * r0 holds resolved field
9029 ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field
9031 ldr r0, [r9, r3] @ r0<- obj.field (8/16/32 bits)
9037 SET_VREG(r0, r2) @ fp[A]<- r0
9044 * r0 holds resolved field
9050 ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field
9053 GET_VREG(r0, r1) @ r0<- fp[A]
9058 str r0, [r9, r3] @ obj.field (8/16/32 bits)<- r0
9070 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
9071 bl dvmResolveStaticField @ r0<- resolved StaticField ptr
9072 cmp r0, #0 @ success?
9085 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
9086 bl dvmResolveStaticField @ r0<- resolved StaticField ptr
9087 cmp r0, #0 @ success?
9095 * r0 holds resolved field
9101 ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field
9103 ldr r0, [r9, r3] @ r0<- obj.field (8/16/32 bits)
9109 SET_VREG(r0, r2) @ fp[A]<- r0
9116 * r0 holds resolved field
9121 ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field
9124 add r0, r9, r3 @ r0<- address of field
9125 bl dvmQuasiAtomicRead64 @ r0/r1<- contents of field
9127 ldrd r0, [r9, r3] @ r0/r1<- obj.field (64-bit align ok)
9134 stmia r3, {r0-r1} @ fp[A]<- r0/r1
9141 * r0 holds resolved field
9148 ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field
9152 ldmia r2, {r0-r1} @ r0/r1<- fp[A]
9156 bl dvmQuasiAtomicSwap64 @ stores r0/r1 into addr r2
9158 strd r0, [r9, r3] @ obj.field (64 bits, aligned)<- r0/r1
9168 * Returns StaticField pointer in r0.
9173 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
9174 bl dvmResolveStaticField @ r0<- resolved StaticField ptr
9175 cmp r0, #0 @ success?
9191 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
9192 bl dvmResolveStaticField @ r0<- resolved StaticField ptr
9193 cmp r0, #0 @ success?
9194 mov r2, r0 @ copy to r2
9202 * r0 = #of args (0-4)
9213 rsb r0, r0, #4 @ r0<- 4-r0
9215 add pc, pc, r0, lsl #3 @ computed goto, 2 instrs each
9224 ldr r0, [rFP, ip, lsl #2] @ r0<- vC
9237 * r0 = #of args (0-4)
9242 rsb r0, r0, #4 @ r0<- 4-r0
9244 add pc, pc, r0, lsl #3 @ computed goto, 2 instrs each
9253 GET_VREG(r0, ip) @ r0<- vBase[0]
9266 * r0 holds resolved field
9272 ldr r3, [r0, #offInstField_byteOffset] @ r3<- byte offset of field
9275 GET_VREG(r0, r1) @ r0<- fp[A]
9281 str r0, [r9, r3] @ obj.field (32 bits)<- r0
9282 cmp r0, #0 @ stored a null reference?
9295 ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz
9296 bl dvmResolveStaticField @ r0<- resolved StaticField ptr
9297 cmp r0, #0 @ success?
9302 .LOP_SPUT_OBJECT_VOLATILE_finish: @ field ptr in r0
9307 ldr r9, [r0, #offField_clazz] @ r9<- field->clazz
9310 str r1, [r0, #offStaticField_value] @ field<- vAA
9352 mov r0,rPC @ pass our target PC
9361 mov r0,rPC @ pass our target PC
9370 ldr r0,[lr, #-1] @ pass our target PC
9379 ldr r0,[lr, #-1] @ pass our target PC
9388 ldr r0,[lr, #-1] @ pass our target PC
9397 mov r0,rPC @ pass our target PC
9413 mov rPC, r0
9415 mov r0,lr
9419 mov r0, #0
9420 str r0, [r10, #offThread_inJitCodeCache] @ Back to the interp land
9429 * r0 <= PC
9440 mov rPC,r0
9459 mov r0,rPC
9461 str r0, [r10, #offThread_inJitCodeCache] @ set the inJitCodeCache flag
9464 cmp r0,#0 @ !0 means translation exists
9465 bxne r0 @ continue native execution if so
9479 mov r0,rPC
9481 str r0, [r10, #offThread_inJitCodeCache] @ set the inJitCodeCache flag
9482 cmp r0,#0
9485 bl dvmJitChain @ r0<- dvmJitChain(codeAddr,chainAddr)
9488 cmp r0,#0 @ successful chain?
9489 bxne r0 @ continue native execution
9495 GET_JIT_PROF_TABLE(r0)
9497 cmp r0, #0
9526 mov r0,rPC
9528 str r0, [r10, #offThread_inJitCodeCache] @ set the inJitCodeCache flag
9529 cmp r0,#0
9532 bl dvmJitChain @ r0<- dvmJitChain(codeAddr,chainAddr)
9535 cmp r0,#0 @ successful chain?
9536 bxne r0 @ continue native execution
9549 mov r0,rPC
9551 str r0, [r10, #offThread_inJitCodeCache] @ set the inJitCodeCache flag
9554 cmp r0,#0
9555 bxne r0 @ continue native execution if so
9572 mov r0,rPC
9574 str r0, [r10, #offThread_inJitCodeCache] @ set the inJitCodeCache flag
9577 cmp r0,#0
9578 bxne r0 @ continue native execution if so
9585 * up rIBASE & rINST, and load the address of the JitTable into r0.
9591 GET_JIT_PROF_TABLE(r0)
9598 * the next opcode word, and r0 holds a pointer to the jit profile
9602 cmp r0,#0
9609 ldrb r1,[r0,r3,lsr #(32 - JIT_PROF_SIZE_LOG_2)] @ get counter
9612 strb r1,[r0,r3,lsr #(32 - JIT_PROF_SIZE_LOG_2)] @ and store it
9623 strb r1,[r0,r3,lsr #(32 - JIT_PROF_SIZE_LOG_2)] @ reset counter
9625 mov r0,rPC
9626 bl dvmJitGetCodeAddr @ r0<- dvmJitGetCodeAddr(rPC)
9627 str r0, [r10, #offThread_inJitCodeCache] @ set the inJitCodeCache flag
9630 cmp r0,#0
9632 bxne r0 @ jump to the translation
9643 mov r10, r0 @ save target
9645 cmp r0, r10 @ special case?
9676 mov r0,rPC @ r0<- program counter
9681 ldr rFP,[r0,#offShadowSpace_shadowFP] @ rFP<- fp in shadow space
9682 add rGLUE,r0,#offShadowSpace_interpState @ rGLUE<- rGLUE in shadow space
9692 ldr rPC,[r0,#offShadowSpace_startPC] @ restore PC
9693 ldr rFP,[r0,#offShadowSpace_fp] @ restore FP
9694 ldr rGLUE,[r0,#offShadowSpace_glue] @ restore InterpState
9695 ldr r1,[r0,#offShadowSpace_svState] @ get self verification state
9718 * TODO: we could avoid a branch by just setting r0 and falling through
9719 * into the common_periodicChecks code, and having a test on r0 at the
9727 mov r0, #kInterpEntryInstr
9730 GET_JIT_PROF_TABLE(r0)
9732 cmp r0,#0
9758 * r0 is reentry type, e.g. kInterpEntryInstr (for debugger/profiling)
9782 * r0 still holds the reentry type.
9788 stmfd sp!, {r0, lr} @ preserve r0 and lr
9795 ldr r0, [rGLUE, #offGlue_self] @ r0<- glue->self
9800 ldr r0, [rGLUE, #offGlue_self] @ r0<- glue->self
9804 ldmfd sp!, {r0, lr} @ restore r0 and lr
9823 str r0, [rGLUE, #offGlue_entryPoint] @ store r0, need for debug/prof
9843 mov r0, rGLUE @ r0<- glue ptr
9847 @add r0, rGLUE, #offGlue_jmpBuf @ r0<- &glue->jmpBuf
9856 * r0 is "Method* methodToCall", the method we're trying to call
9866 @ r0=methodToCall, r1=CCCC, r2=count, r10=outs
9870 ldrh r9, [r0, #offMethod_registersSize] @ r9<- methodToCall->regsSize
9875 ldrh r3, [r0, #offMethod_outsSize] @ r3<- methodToCall->outsSize
9882 * r0 is "Method* methodToCall", the method we're trying to call
9890 ldrh r9, [r0, #offMethod_registersSize] @ r9<- methodToCall->regsSize
9891 ldrh r3, [r0, #offMethod_outsSize] @ r3<- methodToCall->outsSize
9894 @ r0=methodToCall, r1=GFED, r3=outSize, r2=count, r9=regSize, r10=outs
9901 mov r0, r0 @ nop
9905 mov r0, r0 @ nop
9909 mov r0, r0 @ nop
9913 mov r0, r0 @ nop
9917 mov r0, r0 @ nop
9921 .LinvokeArgsDone: @ r0=methodToCall, r3=outSize, r9=regSize
9922 ldr r2, [r0, #offMethod_insns] @ r2<- method->insns
9923 ldr rINST, [r0, #offMethod_clazz] @ rINST<- method->clazz
9932 ldr r3, [r0, #offMethod_accessFlags] @ r3<- methodToCall->accessFlags
9946 str r0, [r10, #offStackSaveArea_method]
9951 stmfd sp!, {r0-r3}
9953 mov r0, rFP
9956 ldmfd sp!, {r0-r3}
9957 stmfd sp!, {r0-r3}
9958 mov r0, r1
9962 ldmfd sp!, {r0-r3}
9971 @ r0=methodToCall, r1=newFp, r2=self, r3=newMethodClass, r9=newINST
9972 str r0, [rGLUE, #offGlue_method] @ glue->method = methodToCall
9975 GET_JIT_PROF_TABLE(r0)
9980 cmp r0,#0
9993 @ r0=methodToCall, r1=newFp, r10=newSaveArea
10000 mov r2, r0 @ r2<- methodToCall
10001 mov r0, r1 @ r0<- newFp (points to args)
10025 ldr r0, [r10, #offStackSaveArea_localRefCookie] @ r0<- saved top
10032 str r0, [r9, #offThread_jniLocal_topCookie] @ new top <- old top
10042 .LstackOverflow: @ r0=methodToCall
10043 mov r1, r0 @ r1<- methodToCall
10044 ldr r0, [rGLUE, #offGlue_self] @ r0<- self
10060 * r0 is "Method* methodToCall", the method we're trying to call
10067 mov r2, r0
10068 mov r0, rGLUE @ A0<- glue
10087 mov r0, #kInterpEntryReturn
10091 SAVEAREA_FROM_FP(r0, rFP) @ r0<- saveArea (old)
10092 ldr rFP, [r0, #offStackSaveArea_prevFrame] @ fp = saveArea->prevFrame
10093 ldr r9, [r0, #offStackSaveArea_savedPc] @ r9 = saveArea->savedPc
10107 ldr r10, [r0, #offStackSaveArea_returnAddr] @ r10 = saveArea->returnAddr
10128 mov r0, rGLUE @ arg to function
10147 mov r0, #kInterpEntryThrow
10154 mov r0, r9 @ r0<- exception
10166 mov r0, r10 @ r0<- self
10172 /* call, r0 gets catchRelPc (a code-unit offset) */
10179 mov rFP, r0 @ save relPc result in rFP
10180 mov r0, r10 @ r0<- self
10183 mov r0, rFP @ restore result
10188 cmp r0, #0 @ is catchRelPc < 0?
10199 add rPC, r3, r0, asl #1 @ rPC<- method->insns + catchRelPc
10203 mov r0, r9 @ r0<- exception
10218 movne r0, r10 @ if yes: r0<- self
10227 ldr r0, [rGLUE, #offGlue_method]
10228 ldr r1, [r0, #offMethod_insns]
10232 str r0, [sp, #-4]!
10234 ldr r0, [rGLUE, #offGlue_method]
10236 str r0, [sp, #-4]!
10243 mov r0, #3 @ LOG_DEBUG
10247 mov r0, r9 @ r0<- exception
10260 mov r0, rGLUE @ arg to function
10281 ldr r0, strArrayIndexException
10291 ldr r0, strArrayStoreException
10301 ldr r0, strArithmeticException
10311 ldr r0, strNegativeArraySizeException
10321 ldr r0, strNoSuchMethodError
10333 ldr r0, strNullPointerException
10354 stmfd sp!, {r0, r1, r2, r3, ip, lr}
10355 ldr r0, strSqueak
10358 ldmfd sp!, {r0, r1, r2, r3, ip, lr}
10370 * Spit out the number in r0, preserving registers.
10373 stmfd sp!, {r0, r1, r2, r3, ip, lr}
10374 mov r1, r0
10375 ldr r0, strSqueak
10377 ldmfd sp!, {r0, r1, r2, r3, ip, lr}
10384 stmfd sp!, {r0, r1, r2, r3, ip, lr}
10385 ldr r0, strNewline
10387 ldmfd sp!, {r0, r1, r2, r3, ip, lr}
10391 * Print the 32-bit quantity in r0 as a hex value, preserving registers.
10394 stmfd sp!, {r0, r1, r2, r3, ip, lr}
10395 mov r1, r0
10396 ldr r0, strPrintHex
10398 ldmfd sp!, {r0, r1, r2, r3, ip, lr}
10402 * Print the 64-bit quantity in r0-r1, preserving registers.
10405 stmfd sp!, {r0, r1, r2, r3, ip, lr}
10407 mov r2, r0
10408 ldr r0, strPrintLong
10410 ldmfd sp!, {r0, r1, r2, r3, ip, lr}
10414 * Print full method info. Pass the Method* in r0. Preserves regs.
10417 stmfd sp!, {r0, r1, r2, r3, ip, lr}
10419 ldmfd sp!, {r0, r1, r2, r3, ip, lr}
10428 stmfd sp!, {r0, r1, r2, r3, ip, lr}
10430 ldmfd sp!, {r0, r1, r2, r3, ip, lr}
10443 and r0, r0, r1 @ make sure no stray bits are set
10447 orr r2, r2, r0 @ set specified bits
10449 mov r0, r2 @ return new value
10460 mov r0, #0x03000000 @ r0<- 0x03000000
10461 add r1, r0, #0x9f00 @ r1<- 0x03009f00