Home | History | Annotate | Download | only in sljit

Lines Matching full:jump

198 static SLJIT_INLINE sljit_ins* detect_jump_type(struct sljit_jump *jump, sljit_ins *code_ptr, sljit_ins *code)
205 if (jump->flags & SLJIT_REWRITABLE_JUMP)
208 if (jump->flags & JUMP_ADDR)
209 target_addr = jump->u.target;
211 SLJIT_ASSERT(jump->flags & JUMP_LABEL);
212 target_addr = (sljit_uw)(code + jump->u.label->size);
214 inst = (sljit_ins*)jump->addr;
217 if (jump->flags & IS_CALL) {
219 jump->flags |= PATCH_CALL;
220 if (jump->flags & IS_MOVABLE) {
223 jump->addr -= sizeof(sljit_ins);
235 if (jump->flags & IS_COND)
238 if (jump->flags & IS_MOVABLE) {
241 jump->flags |= PATCH_B;
243 if (jump->flags & IS_COND) {
251 jump->addr = (sljit_uw)inst;
258 jump->flags |= PATCH_B;
259 if (jump->flags & IS_COND)
264 jump->addr = (sljit_uw)inst;
282 struct sljit_jump *jump;
296 jump = compiler->jumps;
304 SLJIT_ASSERT(!jump || jump->addr >= word_count);
313 if (jump && jump->addr == word_count) {
315 jump->addr = (sljit_uw)(code_ptr - 3);
317 jump->addr = (sljit_uw)(code_ptr - 6);
319 code_ptr = detect_jump_type(jump, code_ptr, code);
320 jump = jump->next;
341 SLJIT_ASSERT(!jump);
345 jump = compiler->jumps;
346 while (jump) {
348 addr = (jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target;
349 buf_ptr = (sljit_ins*)jump->addr;
351 if (jump->flags & PATCH_CALL) {
352 addr = (sljit_sw)(addr - jump->addr) >> 2;
357 if (jump->flags & PATCH_B) {
358 addr = (sljit_sw)(addr - jump->addr) >> 2;
372 jump = jump->next;
1318 struct sljit_jump *jump;
1323 jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
1324 PTR_FAIL_IF(!jump);
1325 set_jump(jump, compiler, type & SLJIT_REWRITABLE_JUMP);
1329 jump->flags |= IS_COND;
1331 jump->flags |= IS_MOVABLE;
1339 jump->flags |= IS_COND;
1341 jump->flags |= IS_MOVABLE;
1349 jump->flags |= IS_MOVABLE;
1351 jump->flags |= IS_CALL;
1356 jump->addr = compiler->size;
1359 return jump;
1364 struct sljit_jump *jump = NULL;
1374 jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
1375 FAIL_IF(!jump);
1376 set_jump(jump, compiler, JUMP_ADDR);
1377 jump->u.target = srcw;
1379 jump->flags |= IS_MOVABLE;
1381 jump->flags |= IS_CALL;
1392 if (jump)
1393 jump->addr = compiler->size;