Home | History | Annotate | Download | only in x86
      1 %default { "func":"MterpDoPackedSwitch" }
      2 /*
      3  * Handle a packed-switch or sparse-switch instruction.  In both cases
      4  * we decode it and hand it off to a helper function.
      5  *
      6  * We don't really expect backward branches in a switch statement, but
      7  * they're perfectly legal, so we check for them here.
      8  *
      9  * for: packed-switch, sparse-switch
     10  */
     11     /* op vAA, +BBBB */
     12     movl    2(rPC), %ecx                    # ecx <- BBBBbbbb
     13     GET_VREG %eax, rINST                    # eax <- vAA
     14     leal    (rPC,%ecx,2), %ecx              # ecx <- PC + BBBBbbbb*2
     15     movl    %eax, OUT_ARG1(%esp)            # ARG1 <- vAA
     16     movl    %ecx, OUT_ARG0(%esp)            # ARG0 <- switchData
     17     call    SYMBOL($func)
     18     REFRESH_IBASE
     19     testl   %eax, %eax
     20     movl    %eax, rINST
     21     jmp     MterpCommonTakenBranch
     22