Home | History | Annotate | Download | only in sljit_src

Lines Matching defs:jump

218 static SLJIT_INLINE sljit_ins* detect_jump_type(struct sljit_jump *jump, sljit_ins *code_ptr, sljit_ins *code, sljit_sw executable_offset)
226 if (jump->flags & (SLJIT_REWRITABLE_JUMP | IS_CALL))
229 if (jump->flags & SLJIT_REWRITABLE_JUMP)
233 if (jump->flags & JUMP_ADDR)
234 target_addr = jump->u.target;
236 SLJIT_ASSERT(jump->flags & JUMP_LABEL);
237 target_addr = (sljit_uw)(code + jump->u.label->size) + (sljit_uw)executable_offset;
240 inst = (sljit_ins *)jump->addr;
241 if (jump->flags & IS_COND)
245 if (jump->flags & IS_CALL)
250 if (jump->flags & IS_MOVABLE) {
253 jump->flags |= PATCH_B;
255 if (!(jump->flags & IS_COND)) {
257 inst[-1] = (jump->flags & IS_JAL) ? BAL : B;
258 jump->addr -= sizeof(sljit_ins);
263 inst[-1] = saved_inst ^ invert_branch(jump->flags);
264 jump->addr -= 2 * sizeof(sljit_ins);
271 jump->flags |= PATCH_B;
273 if (!(jump->flags & IS_COND)) {
274 inst[0] = (jump->flags & IS_JAL) ? BAL : B;
278 inst[0] = inst[0] ^ invert_branch(jump->flags);
280 jump->addr -= sizeof(sljit_ins);
285 if (jump->flags & IS_COND) {
286 if ((jump->flags & IS_MOVABLE) && (target_addr & ~0xfffffff) == ((jump->addr + 2 * sizeof(sljit_ins)) & ~0xfffffff)) {
287 jump->flags |= PATCH_J;
295 else if ((target_addr & ~0xfffffff) == ((jump->addr + 3 * sizeof(sljit_ins)) & ~0xfffffff)) {
296 jump->flags |= PATCH_J;
301 jump->addr += sizeof(sljit_ins);
307 if ((jump->flags & IS_MOVABLE) && (target_addr & ~0xfffffff) == (jump->addr & ~0xfffffff)) {
308 jump->flags |= PATCH_J;
310 inst[-1] = (jump->flags & IS_JAL) ? JAL : J;
311 jump->addr -= sizeof(sljit_ins);
315 if ((target_addr & ~0xfffffff) == ((jump->addr + sizeof(sljit_ins)) & ~0xfffffff)) {
316 jump->flags |= PATCH_J;
317 inst[0] = (jump->flags & IS_JAL) ? JAL : J;
326 jump->flags |= PATCH_ABS32;
327 if (jump->flags & IS_COND) {
336 jump->flags |= PATCH_ABS48;
337 if (jump->flags & IS_COND) {
369 struct sljit_jump *jump;
385 jump = compiler->jumps;
394 SLJIT_ASSERT(!jump || jump->addr >= word_count);
402 if (jump && jump->addr == word_count) {
404 jump->addr = (sljit_uw)(code_ptr - 3);
406 jump->addr = (sljit_uw)(code_ptr - 7);
408 code_ptr = detect_jump_type(jump, code_ptr, code, executable_offset);
409 jump = jump->next;
430 SLJIT_ASSERT(!jump);
434 jump = compiler->jumps;
435 while (jump) {
437 addr = (jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target;
438 buf_ptr = (sljit_ins *)jump->addr;
440 if (jump->flags & PATCH_B) {
446 if (jump->flags & PATCH_J) {
457 if (jump->flags & PATCH_ABS32) {
462 else if (jump->flags & PATCH_ABS48) {
476 jump = jump->next;
1604 struct sljit_jump *jump;
1612 jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
1613 PTR_FAIL_IF(!jump);
1614 set_jump(jump, compiler, type & SLJIT_REWRITABLE_JUMP);
1658 jump->flags |= flags;
1660 jump->flags |= IS_MOVABLE;
1668 jump->addr = compiler->size;
1673 jump->flags |= IS_JAL | (type >= SLJIT_CALL0 ? IS_CALL : 0);
1675 jump->addr = compiler->size;
1679 return jump;
1706 struct sljit_jump *jump;
1727 jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
1728 PTR_FAIL_IF(!jump);
1729 set_jump(jump, compiler, type & SLJIT_REWRITABLE_JUMP);
1735 jump->flags |= IS_BIT26_COND;
1737 jump->flags |= IS_MOVABLE;
1747 jump->flags |= IS_BIT26_COND;
1751 jump->flags |= IS_BIT26_COND;
1755 jump->flags |= IS_BIT16_COND;
1759 jump->flags |= IS_BIT16_COND;
1769 jump->flags |= IS_BIT16_COND;
1773 jump->flags |= IS_BIT16_COND;
1777 jump->flags |= IS_BIT26_COND;
1781 jump->flags |= IS_BIT26_COND;
1809 jump->flags |= IS_BIT26_COND;
1815 jump->addr = compiler->size;
1817 return jump;
1835 struct sljit_jump *jump = NULL;
1870 jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
1871 FAIL_IF(!jump);
1872 set_jump(jump, compiler, JUMP_ADDR | ((type >= SLJIT_FAST_CALL) ? IS_JAL : 0));
1873 jump->u.target = srcw;
1876 jump->flags |= IS_MOVABLE;
1884 if (jump)
1885 jump->addr = compiler->size;