189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project%default { "isrange":"0", "routine":"NoRange" }
289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project%verify "executed"
389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project%verify "unknown method"
489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project%verify "null object"
589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    /*
689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project     * Handle an interface method call.
789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project     *
889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project     * for: invoke-interface, invoke-interface/range
989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project     */
1089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
1189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
1289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    movzwl     4(rPC),%eax              # eax<- FEDC or CCCC
139f601a917c8878204482c37aec7005054b6776fabuzbee    movl       rSELF,%ecx
1489c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    .if        (!$isrange)
1589c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    andl       $$0xf,%eax               # eax<- C (or stays CCCC)
1689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    .endif
17f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    GET_VREG_R   %eax %eax              # eax<- "this"
18f3e177289ac078f18401cfd8eebafe584dd0d01fbuzbee    EXPORT_PC
1989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    testl      %eax,%eax                # null this?
2089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    je         common_errNullObject     # yes, fail
210c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen    movl       %eax, TMP_SPILL1(%ebp)
2289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    movl       offObject_clazz(%eax),%eax# eax<- thisPtr->clazz
2389c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    movl       %eax,OUT_ARG0(%esp)                 # arg0<- class
249f601a917c8878204482c37aec7005054b6776fabuzbee    movl       offThread_methodClassDex(%ecx),%eax   # eax<- methodClassDex
259f601a917c8878204482c37aec7005054b6776fabuzbee    movl       offThread_method(%ecx),%ecx           # ecx<- method
2689c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    movl       %eax,OUT_ARG3(%esp)                 # arg3<- dex
2789c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    movzwl     2(rPC),%eax                         # eax<- BBBB
2889c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    movl       %ecx,OUT_ARG2(%esp)                 # arg2<- method
2989c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    movl       %eax,OUT_ARG1(%esp)                 # arg1<- BBBB
3089c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    call       dvmFindInterfaceMethodInCache # eax<- call(class, ref, method, dex)
3189c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    testl      %eax,%eax
3289c1feb0a69a7707b271086e749975b3f7acacf7The Android Open Source Project    je         common_exceptionThrown
330c2dc522d0e120f346cf0a40c8cf0c93346131c2Dong-Yuan Chen    movl       TMP_SPILL1(%ebp), %ecx
34c4080f6bdeda19901a508cc75f96ac7e07903918Johnnie Birch    jmp        common_invokeMethod${routine}
35