OP_IGET_WIDE_JUMBO.S revision a8b91c52fd8a90b784835dfe1f8898035266c4dd
1%default {"volatile":"0"} 2%verify "executed" 3%verify "null object" 4%verify "field already resolved" 5%verify "field not yet resolved" 6%verify "field cannot be resolved" 7 /* 8 * Jumbo 64-bit instance field get. 9 */ 10 /* iget-wide/jumbo vBBBB, vCCCC, field@AAAAAAAA */ 11 FETCH(a1, 1) # a1<- aaaa (lo) 12 FETCH(a2, 2) # a2<- AAAA (hi) 13 FETCH(a0, 4) # a0<- CCCC 14 LOAD_rSELF_methodClassDex(a3) # a3 <- DvmDex 15 sll a2,a2,16 16 or a1, a1, a2 # a1<- AAAAaaaa 17 LOAD_base_offDvmDex_pResFields(a2, a3) # a2 <- pResFields 18 GET_VREG(rOBJ, a0) # rOBJ <- fp[CCCC], the object pointer 19 LOAD_eas2(a0, a2, a1) # a0 <- resolved InstField ptr 20 # is resolved entry null? 21 bnez a0, .L${opcode}_finish # no, already resolved 22 LOAD_rSELF_method(a2) # a2 <- current method 23 EXPORT_PC() # resolve() could throw 24 LOAD_base_offMethod_clazz(a0, a2) # a0 <- method->clazz 25 JAL(dvmResolveInstField) # v0 <- resolved InstField ptr 26 b .L${opcode}_resolved # resolved, continue 27 28%break 29 30.L${opcode}_resolved: 31 # test return code 32 move a0, v0 33 bnez v0, .L${opcode}_finish 34 b common_exceptionThrown 35 36 /* 37 * Currently: 38 * a0 holds resolved field 39 * rOBJ holds object 40 */ 41.L${opcode}_finish: 42 LOAD_base_offInstField_byteOffset(a3, a0) # a3 <- byte offset of field 43 beqz rOBJ, common_errNullObject # object was null 44 GET_OPA4(a2) # a2 <- A+ 45 addu rOBJ, rOBJ, a3 # form address 46 .if $volatile 47 vLOAD64(a0, a1, rOBJ) # a0/a1 <- obj.field (64-bit align ok) 48 .else 49 LOAD64(a0, a1, rOBJ) # a0/a1 <- obj.field (64-bit align ok) 50 .endif 51 FETCH(a2, 3) # r2<- BBBB 52 FETCH_ADVANCE_INST(5) # advance rPC, load rINST 53 EAS2(a3, rFP, a2) # a3 <- &fp[BBBB] 54 GET_INST_OPCODE(t0) # extract opcode from rINST 55 STORE64(a0, a1, a3) # fp[BBBB] <- a0/a1 56 GOTO_OPCODE(t0) # jump to next instruction 57 58