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 SPUT handler. 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* sput-wide vAA, field@BBBB */ 109f601a917c8878204482c37aec7005054b6776fabuzbee ldr r0, [rSELF, #offThread_methodClassDex] @ r0<- DvmDex 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH(r1, 1) @ r1<- field ref BBBB 129a3147c7412f4794434b4c2604aa2ba784867774buzbee ldr r10, [r0, #offDvmDex_pResFields] @ r10<- dvmDex->pResFields 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r9, rINST, lsr #8 @ r9<- AA 149a3147c7412f4794434b4c2604aa2ba784867774buzbee ldr r2, [r10, r1, lsl #2] @ r2<- resolved StaticField ptr 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project add r9, rFP, r9, lsl #2 @ r9<- &fp[AA] 16861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden cmp r2, #0 @ is resolved entry null? 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq .L${opcode}_resolve @ yes, do resolve 18861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden.L${opcode}_finish: @ field ptr in r2, AA in r9 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(2) @ advance rPC, load rINST 20861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden ldmia r9, {r0-r1} @ r0/r1<- vAA/vAA+1 21861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden GET_INST_OPCODE(r10) @ extract opcode from rINST 22861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden .if $volatile 23861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden add r2, r2, #offStaticField_value @ r2<- pointer to data 244185972e211b0c84b9fe7d90c56b28cc15e474fabuzbee bl dvmQuasiAtomicSwap64Sync @ stores r0/r1 into addr r2 25861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden .else 26861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden strd r0, [r2, #offStaticField_value] @ field<- vAA/vAA+1 27861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden .endif 28861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden GOTO_OPCODE(r10) @ 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 * r9: &fp[AA] 359a3147c7412f4794434b4c2604aa2ba784867774buzbee * r10: dvmDex->pResFields 36861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden * 37861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden * Returns StaticField pointer in r2. 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L${opcode}_resolve: 409f601a917c8878204482c37aec7005054b6776fabuzbee ldr r2, [rSELF, #offThread_method] @ r2<- current method 419a3147c7412f4794434b4c2604aa2ba784867774buzbee#if defined(WITH_JIT) 429a3147c7412f4794434b4c2604aa2ba784867774buzbee add r10, r10, r1, lsl #2 @ r10<- &dvmDex->pResFields[field] 439a3147c7412f4794434b4c2604aa2ba784867774buzbee#endif 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project EXPORT_PC() @ resolve() could throw, so export now 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [r2, #offMethod_clazz] @ r0<- method->clazz 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl dvmResolveStaticField @ r0<- resolved StaticField ptr 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ success? 48861b33855aff080278ea5125e4372a2d4bf8aef5Andy McFadden mov r2, r0 @ copy to r2 499a3147c7412f4794434b4c2604aa2ba784867774buzbee beq common_exceptionThrown @ no, handle exception 509a3147c7412f4794434b4c2604aa2ba784867774buzbee#if defined(WITH_JIT) 519a3147c7412f4794434b4c2604aa2ba784867774buzbee /* 529a3147c7412f4794434b4c2604aa2ba784867774buzbee * If the JIT is actively building a trace we need to make sure 539a3147c7412f4794434b4c2604aa2ba784867774buzbee * that the field is fully resolved before including this instruction. 549a3147c7412f4794434b4c2604aa2ba784867774buzbee */ 559a3147c7412f4794434b4c2604aa2ba784867774buzbee bl common_verifyField 569a3147c7412f4794434b4c2604aa2ba784867774buzbee#endif 579a3147c7412f4794434b4c2604aa2ba784867774buzbee b .L${opcode}_finish @ resume 58