1a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham%default { "isrange":"0", "routine":"NoRange" }
2a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham%verify "executed"
3a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham%verify "unknown method"
4a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham%verify "null object"
5a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham    /*
6a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham     * Handle an interface method call.
7a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham     *
8a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham     * for: invoke-interface, invoke-interface/range
9a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham     */
10a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
11a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham    /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
12a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham    FETCH(a2, 2)                           #  a2 <- FEDC or CCCC
13a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham    FETCH(a1, 1)                           #  a1 <- BBBB
14a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham    .if (!$isrange)
15a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham    and       a2, 15                       #  a2 <- C (or stays CCCC)
16a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham    .endif
17a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham    EXPORT_PC()                            #  must export for invoke
18a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham    GET_VREG(rOBJ, a2)                     #  rOBJ <- first arg ("this")
19a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham    LOAD_rSELF_methodClassDex(a3)          #  a3 <- methodClassDex
20a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham    LOAD_rSELF_method(a2)                  #  a2 <- method
21a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham    # null obj?
22a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham    beqz      rOBJ, common_errNullObject   #  yes, fail
23a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham    LOAD_base_offObject_clazz(a0, rOBJ)      #  a0 <- thisPtr->clazz
24a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham    JAL(dvmFindInterfaceMethodInCache)     #  v0 <- call(class, ref, method, dex)
25a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham    move      a0, v0
26a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham    # failed?
27a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham    beqz      v0, common_exceptionThrown   #  yes, handle exception
28a8b91c52fd8a90b784835dfe1f8898035266c4ddRaghu Gandham    b         common_invokeMethod${routine} #  (a0=method, rOBJ="this")
29