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