summaryrefslogtreecommitdiff
path: root/vm/mterp/c/OP_MONITOR_ENTER.c
blob: c9d89994a69bd39a19b8d8cb5e3f5703fa35901d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
HANDLE_OPCODE(OP_MONITOR_ENTER /*vAA*/)
    {
        Object* obj;

        vsrc1 = INST_AA(inst);
        ILOGV("|monitor-enter v%d %s(0x%08x)",
            vsrc1, kSpacing+6, GET_REGISTER(vsrc1));
        obj = (Object*)GET_REGISTER(vsrc1);
        if (!checkForNullExportPC(obj, fp, pc))
            GOTO_exceptionThrown();
        ILOGV("+ locking %p %s\n", obj, obj->clazz->descriptor);
        EXPORT_PC();    /* need for precise GC, also WITH_MONITOR_TRACKING */
        dvmLockObject(self, obj);
#ifdef WITH_DEADLOCK_PREDICTION
        if (dvmCheckException(self))
            GOTO_exceptionThrown();
#endif
    }
    FINISH(1);
OP_END