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 two-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-eq, if-ne, if-lt, if-ge, if-gt, if-le |
| 6 | */ |
| 7 | /* if-cmp vA, vB, +CCCC */ |
| 8 | GET_OPA4(a0) # a0 <- A+ |
| 9 | GET_OPB(a1) # a1 <- B |
| 10 | GET_VREG(a3, a1) # a3 <- vB |
Douglas Leung | 020b18a | 2016-06-03 18:05:35 -0700 | [diff] [blame] | 11 | GET_VREG(a0, a0) # a0 <- vA |
Douglas Leung | 200f040 | 2016-02-25 20:05:47 -0800 | [diff] [blame] | 12 | FETCH_S(rINST, 1) # rINST<- branch offset, in code units |
Douglas Leung | 020b18a | 2016-06-03 18:05:35 -0700 | [diff] [blame] | 13 | b${condition} a0, a3, MterpCommonTakenBranchNoFlags # compare (vA, vB) |
| 14 | li t0, JIT_CHECK_OSR |
| 15 | beq rPROFILE, t0, .L_check_not_taken_osr |
| 16 | FETCH_ADVANCE_INST(2) # advance rPC, load rINST |
Douglas Leung | 200f040 | 2016-02-25 20:05:47 -0800 | [diff] [blame] | 17 | GET_INST_OPCODE(t0) # extract opcode from rINST |
| 18 | GOTO_OPCODE(t0) # jump to next instruction |