OP_MONITOR_EXIT.S revision f6c387128427e121477c1b32ad35cdcaa5101ba3
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? 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project beq common_errNullObject @ yes 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldr r0, [rGLUE, #offGlue_self] @ r0<- glue->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 beq common_exceptionThrown @ yes, exception is pending 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project FETCH_ADVANCE_INST(1) @ before throw: advance rPC, load rINST 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 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 25