OP_SGET_WIDE_JUMBO.S revision a8b91c52fd8a90b784835dfe1f8898035266c4dd
1%default {"volatile":"0"} 2%verify "executed" 3%verify "field already resolved" 4%verify "field not yet resolved" 5%verify "field cannot be resolved" 6 /* 7 * Jumbo 64-bit SGET handler. 8 */ 9 /* sget-wide/jumbo vBBBB, field@AAAAAAAA */ 10 LOAD_rSELF_methodClassDex(a2) # a2 <- DvmDex 11 FETCH(a0, 1) # a0<- aaaa (lo) 12 FETCH(a1, 2) # a1<- AAAA (hi) 13 LOAD_base_offDvmDex_pResFields(a2, a2) # a2 <- dvmDex->pResFields 14 sll a1,a1,16 15 or a1, a0, a1 # a1<- AAAAaaaa 16 LOAD_eas2(a0, a2, a1) # a0 <- resolved StaticField ptr 17 # is resolved entry null? 18 bnez a0, .L${opcode}_finish 19 20 /* 21 * Continuation if the field has not yet been resolved. 22 * a1: AAAAAAAA field ref 23 * 24 * Returns StaticField pointer in v0. 25 */ 26 LOAD_rSELF_method(a2) # a2 <- current method 27 EXPORT_PC() # resolve() could throw, so export now 28 LOAD_base_offMethod_clazz(a0, a2) # a0 <- method->clazz 29 JAL(dvmResolveStaticField) # a0 <- resolved StaticField ptr 30 move a0, v0 31 # success? 32 beqz v0, common_exceptionThrown # no, handle exception 33 b .L${opcode}_finish # resume 34%break 35 36.L${opcode}_finish: 37 FETCH(a1, 3) # a1<- BBBB 38 .if $volatile 39 vLOAD64_off(a2, a3, a0, offStaticField_value) # a2/a3 <- field value (aligned) 40 .else 41 LOAD64_off(a2, a3, a0, offStaticField_value) # a2/a3 <- field value (aligned) 42 .endif 43 FETCH_ADVANCE_INST(4) # advance rPC, load rINST 44 EAS2(a1, rFP, a1) # a1 <- &fp[BBBB] 45 STORE64(a2, a3, a1) # vBBBB/vBBBB+1 <- a2/a3 46 GET_INST_OPCODE(t0) # extract opcode from rINST 47 GOTO_OPCODE(t0) # jump to next instruction 48