11452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee /* 21d011d9306fd4ff57d72411775d415a86f5ed398Bill Buzbee * Generic two-operand compare-and-branch operation. Provide a "condition" 31d011d9306fd4ff57d72411775d415a86f5ed398Bill Buzbee * fragment that specifies the comparison to perform. 41452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee * 51452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le 61452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee */ 71452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee /* if-cmp vA, vB, +CCCC */ 81452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee mov r1, rINST, lsr #12 @ r1<- B 91452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee ubfx r0, rINST, #8, #4 @ r0<- A 101452bee8f06b9f76a333ddf4760e4beaa82f8099buzbee GET_VREG r3, r1 @ r3<- vB 111d011d9306fd4ff57d72411775d415a86f5ed398Bill Buzbee GET_VREG r0, r0 @ r0<- vA 12fd522f9039befff986701ff05054ffdd1be1dd33Bill Buzbee FETCH_S rINST, 1 @ rINST<- branch offset, in code units 131d011d9306fd4ff57d72411775d415a86f5ed398Bill Buzbee cmp r0, r3 @ compare (vA, vB) 141d011d9306fd4ff57d72411775d415a86f5ed398Bill Buzbee b${condition} MterpCommonTakenBranchNoFlags 151d011d9306fd4ff57d72411775d415a86f5ed398Bill Buzbee cmp rPROFILE, #JIT_CHECK_OSR @ possible OSR re-entry? 161d011d9306fd4ff57d72411775d415a86f5ed398Bill Buzbee beq .L_check_not_taken_osr 171d011d9306fd4ff57d72411775d415a86f5ed398Bill Buzbee FETCH_ADVANCE_INST 2 18fd522f9039befff986701ff05054ffdd1be1dd33Bill Buzbee GET_INST_OPCODE ip @ extract opcode from rINST 19fd522f9039befff986701ff05054ffdd1be1dd33Bill Buzbee GOTO_OPCODE ip @ jump to next instruction 20