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