void ifThenElse(Vout& v, ConditionCode cc, Vreg sf, Then thenBlock, Else elseBlock) { auto thenLabel = v.makeBlock(); auto elseLabel = v.makeBlock(); auto done = v.makeBlock(); v << jcc{cc, sf, {elseLabel, thenLabel}}; v = thenLabel; thenBlock(v); if (!v.closed()) v << jmp{done}; v = elseLabel; elseBlock(v); if (!v.closed()) v << jmp{done}; v = done; }
void ifZero(Vout& v, unsigned bit, Vreg r, Then thenBlock) { auto then = v.makeBlock(); auto done = v.makeBlock(); v << tbcc{vixl::eq, bit, r, {done, then}}; v = then; thenBlock(v); if (!v.closed()) v << jmp{done}; v = done; }
void ifThen(Vout& v, ConditionCode cc, Vreg sf, Then thenBlock) { auto then = v.makeBlock(); auto done = v.makeBlock(); v << jcc{cc, sf, {done, then}}; v = then; thenBlock(v); if (!v.closed()) v << jmp{done}; v = done; }