Home | History | Annotate | Download | only in x86
      1 %default { "isrange":"0", "routine":"NoRange" }
      2 %verify "executed"
      3 %verify "unknown method"
      4     /*
      5      * Handle an optimized "super" method call.
      6      *
      7      * for: [opt] invoke-super-quick, invoke-super-quick/range
      8      */
      9     /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
     10     /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
     11     movl      rSELF,%ecx
     12     movzwl    4(rPC),%eax               # eax<- GFED or CCCC
     13     movl      offThread_method(%ecx),%ecx # ecx<- current method
     14     .if       (!$isrange)
     15     andl      $$0xf,%eax                # eax<- D (or stays CCCC)
     16     .endif
     17     movl      offMethod_clazz(%ecx),%ecx # ecx<- method->clazz
     18     GET_VREG_R  %eax %eax               # eax<- "this"
     19     movl      offClassObject_super(%ecx),%ecx # ecx<- method->clazz->super
     20     testl     %eax,%eax                 # null "this"?
     21     je        common_errNullObject      # "this" is null, throw exception
     22     movzwl    2(rPC),%eax               # eax<- BBBB
     23     movl      offClassObject_vtable(%ecx),%ecx # ecx<- vtable
     24     EXPORT_PC
     25     movl      (%ecx,%eax,4),%eax        # eax<- super->vtable[BBBB]
     26     jmp       common_invokeMethod${routine}
     27