1861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden%default {"volatile":"0"} 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%verify "executed" 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%verify "field already resolved" 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%verify "field not yet resolved" 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%verify "field cannot be resolved" 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 64-bit SGET handler. 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* sget-wide vAA, field@BBBB */ 109f601a917c8878204482c37aec7005054b6776fabuzbee ldr r2, [rSELF, #offThread_methodClassDex] @ r2<- DvmDex 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 129a3147c7412f4794434b4c2604aa2ba784867774buzbee ldr r10, [r2, #offDvmDex_pResFields] @ r10<- dvmDex->pResFields 139a3147c7412f4794434b4c2604aa2ba784867774buzbee ldr r0, [r10, r1, lsl #2] @ r0<- resolved StaticField ptr 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ is resolved entry null? 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .L${opcode}_resolve @ yes, do resolve 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L${opcode}_finish: 17861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden mov r9, rINST, lsr #8 @ r9<- AA 18861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden .if $volatile 19861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden add r0, r0, #offStaticField_value @ r0<- pointer to data 206e10b9aaa72425a4825a25f0043533d0c6fdbba4Andy McFadden bl dvmQuasiAtomicRead64 @ r0/r1<- contents of field 21861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden .else 22861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden ldrd r0, [r0, #offStaticField_value] @ r0/r1<- field value (aligned) 23861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden .endif 24861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 26861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden stmia r9, {r0-r1} @ vAA/vAA+1<- r0/r1 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GET_INST_OPCODE(ip) @ extract opcode from rINST 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project GOTO_OPCODE(ip) @ jump to next instruction 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%break 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Continuation if the field has not yet been resolved. 339a3147c7412f4794434b4c2604aa2ba784867774buzbee * r1: BBBB field ref 349a3147c7412f4794434b4c2604aa2ba784867774buzbee * r10: dvmDex->pResFields 35861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden * 36861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden * Returns StaticField pointer in r0. 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L${opcode}_resolve: 399f601a917c8878204482c37aec7005054b6776fabuzbee ldr r2, [rSELF, #offThread_method] @ r2<- current method 409a3147c7412f4794434b4c2604aa2ba784867774buzbee#if defined(WITH_JIT) 419a3147c7412f4794434b4c2604aa2ba784867774buzbee add r10, r10, r1, lsl #2 @ r1<- &dvmDex->pResFields[field] 429a3147c7412f4794434b4c2604aa2ba784867774buzbee#endif 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 479a3147c7412f4794434b4c2604aa2ba784867774buzbee beq common_exceptionThrown @ no, handle exception 489a3147c7412f4794434b4c2604aa2ba784867774buzbee#if defined(WITH_JIT) 499a3147c7412f4794434b4c2604aa2ba784867774buzbee /* 509a3147c7412f4794434b4c2604aa2ba784867774buzbee * If the JIT is actively building a trace we need to make sure 519a3147c7412f4794434b4c2604aa2ba784867774buzbee * that the field is fully resolved before including this instruction. 529a3147c7412f4794434b4c2604aa2ba784867774buzbee */ 539a3147c7412f4794434b4c2604aa2ba784867774buzbee bl common_verifyField 549a3147c7412f4794434b4c2604aa2ba784867774buzbee#endif 559a3147c7412f4794434b4c2604aa2ba784867774buzbee b .L${opcode}_finish @ resume 56