1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%verify "executed" 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%verify "field already resolved" 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%verify "field not yet resolved" 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%verify "field cannot be resolved" 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 64-bit SPUT handler. 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* sput-wide vAA, field@BBBB */ 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_methodClassDex] @ r2<- DvmDex 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [r2, #offDvmDex_pResFields] @ r2<- dvmDex->pResFields 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, r1, lsl #2] @ r0<- resolved StaticField ptr 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .L${opcode}_resolve @ yes, do resolve 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L${opcode}_finish: @ field ptr in r0, AA in r9 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmia r9, {r2-r3} @ r2/r3<- vAA/vAA+1 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project strd r2, [r0, #offStaticField_value] @ field<- vAA/vAA+1 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%break 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r1: BBBB field ref 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * r9: &fp[AA] 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L${opcode}_resolve: 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r2, [rGLUE, #offGlue_method] @ r2<- current method 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bne .L${opcode}_finish @ yes, finish 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project b common_exceptionThrown @ no, handle exception 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 39