Home | History | Annotate | Download | only in x86
      1 %default { "routine":"NoRange","isrange":"0" }
      2 %verify "executed"
      3 %verify "unknown method"
      4     /*
      5      * Handle a static method call.
      6      *
      7      * for: invoke-static, invoke-static/range
      8      */
      9     /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
     10     /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
     11     movl      rSELF,%ecx
     12     movzwl    2(rPC),%eax               # eax<- BBBB
     13     movl      offThread_methodClassDex(%ecx),%ecx # ecx<- pDvmDex
     14     EXPORT_PC
     15     movl      offDvmDex_pResMethods(%ecx),%ecx  # ecx<- pDvmDex->pResMethods
     16     movl      (%ecx,%eax,4),%eax        # eax<- resolved methodToCall
     17     testl     %eax,%eax
     18     jne       common_invokeMethod${routine}
     19     movl      rSELF,%ecx
     20     movl      offThread_method(%ecx),%ecx # ecx<- self->method
     21     movzwl    2(rPC),%eax
     22     movl      offMethod_clazz(%ecx),%ecx# ecx<- method->clazz
     23     movl      %eax,OUT_ARG1(%esp)       # arg1<- BBBB
     24     movl      %ecx,OUT_ARG0(%esp)       # arg0<- clazz
     25     movl      $$METHOD_STATIC,%eax
     26     movl      %eax,OUT_ARG2(%esp)       # arg2<- flags
     27     call      dvmResolveMethod          # call(clazz,ref,flags)
     28     testl     %eax,%eax                 # got null?
     29     jne       common_invokeMethod${routine}
     30     jmp       common_exceptionThrown
     31