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 mov r2, rINST, lsr #8 @ r2<- AA 13 EXPORT_PC() @ before fetch: export the PC 14 GET_VREG(r1, r2) @ r1<- vAA (object) 15 cmp r1, #0 @ null object? 16 beq 1f @ yes 17 ldr r0, [rGLUE, #offGlue_self] @ r0<- glue->self 18 bl dvmUnlockObject @ r0<- success for unlock(self, obj) 19 cmp r0, #0 @ failed? 20 FETCH_ADVANCE_INST(1) @ before throw: advance rPC, load rINST 21 beq common_exceptionThrown @ yes, exception is pending 22 GET_INST_OPCODE(ip) @ extract opcode from rINST 23 GOTO_OPCODE(ip) @ jump to next instruction 241: 25 FETCH_ADVANCE_INST(1) @ advance before throw 26 b common_errNullObject 27