Home | History | Annotate | Download | only in x86
      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     GET_VREG_R %eax rINST
     13     movl    rSELF,%ecx
     14     EXPORT_PC
     15     testl   %eax,%eax                   # null object?
     16     je      .L${opcode}_errNullObject   # go if so
     17     movl    %eax,OUT_ARG1(%esp)
     18     movl    %ecx,OUT_ARG0(%esp)
     19     SPILL(rIBASE)
     20     call    dvmUnlockObject             # unlock(self,obj)
     21     UNSPILL(rIBASE)
     22     FETCH_INST_OPCODE 1 %ecx
     23     testl   %eax,%eax                   # success?
     24     ADVANCE_PC 1
     25     je      common_exceptionThrown      # no, exception pending
     26     GOTO_NEXT_R %ecx
     27 .L${opcode}_errNullObject:
     28     ADVANCE_PC 1                        # advance before throw
     29     jmp     common_errNullObject
     30