blob: c762a8b2ef8b0f3cea62a414823272a202b2287d [file] [log] [blame]
%default { "func":"dvmInterpHandlePackedSwitch" }
%verify executed
/*
* Handle a packed-switch or sparse-switch instruction. In both cases
* we decode it and hand it off to a helper function.
*
* We don't really expect backward branches in a switch statement, but
* they're perfectly legal, so we check for them here.
*
* for: packed-switch, sparse-switch
*/
/* op vAA, +BBBB */
movl 2(rPC),%ecx # ecx<- BBBBbbbb
GET_VREG_R %eax rINST # eax<- vAA
leal (rPC,%ecx,2),%ecx # ecx<- PC + BBBBbbbb*2
movl %eax,OUT_ARG1(%esp) # ARG1<- vAA
movl %ecx,OUT_ARG0(%esp) # ARG0<- switchData
call $func
movl rSELF,%ecx
ADVANCE_PC_INDEXED %eax
movl offThread_curHandlerTable(%ecx),rIBASE
FETCH_INST
GOTO_NEXT