1 %verify "executed" 2 %verify "exception for null object" 3 /* 4 * Synchronize on an object. 5 */ 6 /* monitor-enter vAA */ 7 mov r2, rINST, lsr #8 @ r2<- AA 8 GET_VREG(r1, r2) @ r1<- vAA (object) 9 ldr r0, [rGLUE, #offGlue_self] @ r0<- glue->self 10 cmp r1, #0 @ null object? 11 EXPORT_PC() @ need for precise GC, MONITOR_TRACKING 12 beq common_errNullObject @ null object, throw an exception 13 FETCH_ADVANCE_INST(1) @ advance rPC, load rINST 14 bl dvmLockObject @ call(self, obj) 15 #ifdef WITH_DEADLOCK_PREDICTION /* implies WITH_MONITOR_TRACKING */ 16 ldr r0, [rGLUE, #offGlue_self] @ r0<- glue->self 17 ldr r1, [r0, #offThread_exception] @ check for exception 18 cmp r1, #0 19 bne common_exceptionThrown @ exception raised, bail out 20 #endif 21 GET_INST_OPCODE(ip) @ extract opcode from rINST 22 GOTO_OPCODE(ip) @ jump to next instruction 23 24