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