Douglas Leung | 200f040 | 2016-02-25 20:05:47 -0800 | [diff] [blame] | 1 | /* |
Douglas Leung | 020b18a | 2016-06-03 18:05:35 -0700 | [diff] [blame] | 2 | * Generic one-operand compare-and-branch operation. Provide a "condition" |
| 3 | * fragment that specifies the comparison to perform. |
Douglas Leung | 200f040 | 2016-02-25 20:05:47 -0800 | [diff] [blame] | 4 | * |
| 5 | * for: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez |
| 6 | */ |
| 7 | /* if-cmp vAA, +BBBB */ |
| 8 | GET_OPA(a0) # a0 <- AA |
Douglas Leung | 020b18a | 2016-06-03 18:05:35 -0700 | [diff] [blame] | 9 | GET_VREG(a0, a0) # a0 <- vAA |
Douglas Leung | 200f040 | 2016-02-25 20:05:47 -0800 | [diff] [blame] | 10 | FETCH_S(rINST, 1) # rINST <- branch offset, in code units |
Douglas Leung | 020b18a | 2016-06-03 18:05:35 -0700 | [diff] [blame] | 11 | b${condition} a0, zero, MterpCommonTakenBranchNoFlags |
| 12 | li t0, JIT_CHECK_OSR # possible OSR re-entry? |
| 13 | beq rPROFILE, t0, .L_check_not_taken_osr |
| 14 | FETCH_ADVANCE_INST(2) # advance rPC, load rINST |
Douglas Leung | 200f040 | 2016-02-25 20:05:47 -0800 | [diff] [blame] | 15 | GET_INST_OPCODE(t0) # extract opcode from rINST |
| 16 | GOTO_OPCODE(t0) # jump to next instruction |