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 */
12f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R %eax rINST
139f601a917c8878204482c37aec7005054b6776fabuzbee    movl    rSELF,%ecx
14f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl   %eax,%eax                   # null object?
16668628abe05cb30f86bd02c824f7219a7e20b82cBill Buzbee    je      .L${opcode}_errNullObject   # go if so
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    %eax,OUT_ARG1(%esp)
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    movl    %ecx,OUT_ARG0(%esp)
19a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee    SPILL(rIBASE)
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    call    dvmUnlockObject             # unlock(self,obj)
21a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee    UNSPILL(rIBASE)
22a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee    FETCH_INST_OPCODE 1 %ecx
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    testl   %eax,%eax                   # success?
24f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1
25668628abe05cb30f86bd02c824f7219a7e20b82cBill Buzbee    je      common_exceptionThrown      # no, exception pending
26a7d59bbafea5430fe81fc21ba94ddf6f6a63b0b3buzbee    GOTO_NEXT_R %ecx
27668628abe05cb30f86bd02c824f7219a7e20b82cBill Buzbee.L${opcode}_errNullObject:
28f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    ADVANCE_PC 1                        # advance before throw
29668628abe05cb30f86bd02c824f7219a7e20b82cBill Buzbee    jmp     common_errNullObject
30