1%default { "isrange":"0", "routine":"NoRange" }
2%verify "executed"
3%verify "unknown method"
4    /*
5     * Handle an optimized "super" method call.
6     *
7     * for: [opt] invoke-super-quick, invoke-super-quick/range
8     */
9    /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
10    /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
11    movl      rSELF,%ecx
12    movzwl    4(rPC),%eax               # eax<- GFED or CCCC
13    movl      offThread_method(%ecx),%ecx # ecx<- current method
14    .if       (!$isrange)
15    andl      $$0xf,%eax                # eax<- D (or stays CCCC)
16    .endif
17    movl      offMethod_clazz(%ecx),%ecx # ecx<- method->clazz
18    GET_VREG_R  %eax %eax               # eax<- "this"
19    movl      offClassObject_super(%ecx),%ecx # ecx<- method->clazz->super
20    testl     %eax,%eax                 # null "this"?
21    je        common_errNullObject      # "this" is null, throw exception
22    movl       %eax, TMP_SPILL1(%ebp)
23    movzwl    2(rPC),%eax               # eax<- BBBB
24    movl      offClassObject_vtable(%ecx),%ecx # ecx<- vtable
25    EXPORT_PC
26    movl      (%ecx,%eax,4),%eax        # eax<- super->vtable[BBBB]
27    movl      TMP_SPILL1(%ebp), %ecx
28    jmp       common_invokeMethod${routine}
29