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 FETCH(a0, 1) # a0 <- bbbb (lo) 13 FETCH(a1, 2) # a1 <- BBBB (hi) 14 GET_OPA(a3) # a3 <- AA 15 INSERT_HIGH_HALF(a0, a1) # a0 <- BBBBbbbb 16 GET_VREG(a1, a3) # a1 <- vAA 17 EAS1(a0, rPC, a0) # a0 <- PC + BBBBbbbb*2 18 JAL($func) # a0 <- code-unit branch offset 19 move rINST, v0 20 b MterpCommonTakenBranchNoFlags 21