1%verify "executed"
2%verify "exception for null object (impossible in javac)"
3%verify "dvmUnlockObject fails"
4    /*
5     * Unlock an object.
6     *
7     * Exceptions that occur when unlocking a monitor need to appear as
8     * if they happened at the following instruction.  See the Dalvik
9     * instruction spec.
10     */
11    /* monitor-exit vAA */
12    GET_VREG_R %eax rINST
13    movl    rSELF,%ecx
14    EXPORT_PC
15    testl   %eax,%eax                   # null object?
16    je      .L${opcode}_errNullObject   # go if so
17    movl    %eax,OUT_ARG1(%esp)
18    movl    %ecx,OUT_ARG0(%esp)
19    SPILL(rIBASE)
20    call    dvmUnlockObject             # unlock(self,obj)
21    UNSPILL(rIBASE)
22    FETCH_INST_OPCODE 1 %ecx
23    testl   %eax,%eax                   # success?
24    ADVANCE_PC 1
25    je      common_exceptionThrown      # no, exception pending
26    GOTO_NEXT_R %ecx
27.L${opcode}_errNullObject:
28    ADVANCE_PC 1                        # advance before throw
29    jmp     common_errNullObject
30