Home | History | Annotate | Download | only in x86_64
      1 /*
      2  * Check to see if an object reference is an instance of a class.
      3  *
      4  * Most common situation is a non-null object, being compared against
      5  * an already-resolved class.
      6  */
      7     /* instance-of vA, vB, class@CCCC */
      8     EXPORT_PC
      9     movzwl  2(rPC), OUT_32_ARG0             # OUT_32_ARG0 <- CCCC
     10     movl    rINST, %eax                     # eax <- BA
     11     sarl    $$4, %eax                       # eax <- B
     12     leaq    VREG_ADDRESS(%rax), OUT_ARG1    # Get object address
     13     movq    OFF_FP_METHOD(rFP), OUT_ARG2
     14     movq    rSELF, OUT_ARG3
     15     call    SYMBOL(MterpInstanceOf)         # (index, &obj, method, self)
     16     movsbl  %al, %eax
     17     movq    rSELF, %rcx
     18     cmpq    $$0, THREAD_EXCEPTION_OFFSET(%rcx)
     19     jnz     MterpException
     20     andb    $$0xf, rINSTbl                  # rINSTbl <- A
     21     SET_VREG %eax, rINSTq
     22     ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
     23