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