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 * General 32-bit SPUT handler. 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 83d95064ad1d8e6da4f9a523b2c2f11cf1f1ea952buzbee * for: sput, sput-boolean, sput-byte, sput-char, sput-short 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* op vAA, field@BBBB */ 119f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 139f601a917c8878204482c37aec7005054b6776fabuzbee movl offThread_methodClassDex(%ecx),%ecx # ecx<- DvmDex 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offDvmDex_pResFields(%ecx),%ecx # ecx<- dvmDex->pResFields 150c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen#if defined(WITH_JIT) 160c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen movl %ecx, TMP_SPILL1(%ebp) 170c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen lea (%ecx,%eax,4),%ecx 180c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen movl %ecx, TMP_SPILL2(%ebp) 190c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen movl TMP_SPILL1(%ebp), %ecx 200c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen#endif 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl (%ecx,%eax,4),%eax # eax<- resolved StaticField ptr 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax # resolved entry null? 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project je .L${opcode}_resolve # if not, make it so 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L${opcode}_finish: # field ptr in eax 25a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee GET_VREG_R rINST rINST 26a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee FETCH_INST_OPCODE 2 %ecx 27f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee ADVANCE_PC 2 28a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee movl rINST,offStaticField_value(%eax) 29a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee GOTO_NEXT_R %ecx 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Go resolve the field 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project.L${opcode}_resolve: 359f601a917c8878204482c37aec7005054b6776fabuzbee movl rSELF,%ecx 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movzwl 2(rPC),%eax # eax<- field ref BBBB 370c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen movl offThread_method(%ecx),%ecx # ecx<- current method 38f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee EXPORT_PC # could throw, need to export 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl offMethod_clazz(%ecx),%ecx # ecx<- method->clazz 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %eax,OUT_ARG1(%esp) 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movl %ecx,OUT_ARG0(%esp) 42a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee SPILL(rIBASE) 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project call dvmResolveStaticField # eax<- resolved StaticField ptr 44a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee UNSPILL(rIBASE) 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testl %eax,%eax 460c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen je common_exceptionThrown # no, handle exception 470c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen#if defined(WITH_JIT) 480c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen movl TMP_SPILL2(%ebp), %ecx 490c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen SPILL(rIBASE) 500c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen call common_verifyField 510c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen UNSPILL(rIBASE) 520c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen#endif 530c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen jmp .L${opcode}_finish # success, continue