blob: ffa4f472ef082a05764ff9ac6b6574dcf3f7da53 [file] [log] [blame]
Douglas Leung200f0402016-02-25 20:05:47 -08001%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 */
Douglas Leung200f0402016-02-25 20:05:47 -080012 FETCH(a0, 1) # a0 <- bbbb (lo)
13 FETCH(a1, 2) # a1 <- BBBB (hi)
14 GET_OPA(a3) # a3 <- AA
15 sll t0, a1, 16
16 or a0, a0, t0 # a0 <- BBBBbbbb
17 GET_VREG(a1, a3) # a1 <- vAA
18 EAS1(a0, rPC, a0) # a0 <- PC + BBBBbbbb*2
19 JAL($func) # a0 <- code-unit branch offset
20 move rINST, v0
Douglas Leung020b18a2016-06-03 18:05:35 -070021 b MterpCommonTakenBranchNoFlags