1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%verify "executed"
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%verify "exception for null object (impossible in javac)"
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%verify "dvmUnlockObject fails"
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Unlock an object.
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Exceptions that occur when unlocking a monitor need to appear as
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * if they happened at the following instruction.  See the Dalvik
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * instruction spec.
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* monitor-exit vAA */
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    mov     r2, rINST, lsr #8           @ r2<- AA
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    EXPORT_PC()                         @ before fetch: export the PC
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_VREG(r1, r2)                    @ r1<- vAA (object)
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r1, #0                      @ null object?
16668628abe05cb30f86bd02c824f7219a7e20b82cBill Buzbee    beq     1f                          @ yes
179f601a917c8878204482c37aec7005054b6776fabuzbee    mov     r0, rSELF                   @ r0<- self
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    bl      dvmUnlockObject             @ r0<- success for unlock(self, obj)
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    cmp     r0, #0                      @ failed?
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH_ADVANCE_INST(1)               @ before throw: advance rPC, load rINST
21668628abe05cb30f86bd02c824f7219a7e20b82cBill Buzbee    beq     common_exceptionThrown      @ yes, exception is pending
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    GOTO_OPCODE(ip)                     @ jump to next instruction
24668628abe05cb30f86bd02c824f7219a7e20b82cBill Buzbee1:
25668628abe05cb30f86bd02c824f7219a7e20b82cBill Buzbee    FETCH_ADVANCE_INST(1)               @ advance before throw
26668628abe05cb30f86bd02c824f7219a7e20b82cBill Buzbee    b      common_errNullObject
27