189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project%default { "routine":"NoRange","isrange":"0" }
289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project%verify "executed"
389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project%verify "unknown method"
489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    /*
589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project     * Handle a static method call.
689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project     *
789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project     * for: invoke-static, invoke-static/range
889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project     */
989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
1089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
1189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    GET_GLUE(%ecx)
1289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    movzwl    2(rPC),%eax               # eax<- BBBB
1389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    movl      offGlue_methodClassDex(%ecx),%ecx # ecx<- pDvmDex
1489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    EXPORT_PC()
1589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    movl      offDvmDex_pResMethods(%ecx),%ecx  # ecx<- pDvmDex->pResMethods
1689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    movl      (%ecx,%eax,4),%eax        # eax<- resolved methodToCall
1789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    testl     %eax,%eax
18c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    jne       common_invokeMethod${routine}
1989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    GET_GLUE(%ecx)
2089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    movl      offGlue_method(%ecx),%ecx # ecx<- glue->method
2189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    movzwl    2(rPC),%eax
2289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    movl      offMethod_clazz(%ecx),%ecx# ecx<- method->clazz
2389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    movl      %eax,OUT_ARG1(%esp)       # arg1<- BBBB
2489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    movl      %ecx,OUT_ARG0(%esp)       # arg0<- clazz
2589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    jmp       .L${opcode}_continue
2689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project%break
2789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project
2889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project.L${opcode}_continue:
2989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    movl      $$METHOD_STATIC,%eax
3089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    movl      %eax,OUT_ARG2(%esp)       # arg2<- flags
3189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    SPILL(rPC)
3289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    call      dvmResolveMethod          # call(clazz,ref,flags)
3389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    UNSPILL(rPC)
3489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    testl     %eax,%eax                 # got null?
35c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    jne       common_invokeMethod${routine}
3689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    jmp       common_exceptionThrown
37