Lines Matching defs:jump
393 static SLJIT_INLINE sljit_s32 detect_jump_type(struct sljit_jump *jump, sljit_uw *code_ptr, sljit_uw *code, sljit_sw executable_offset)
397 if (jump->flags & SLJIT_REWRITABLE_JUMP)
401 if (jump->flags & IS_BL)
404 if (jump->flags & JUMP_ADDR)
405 diff = ((sljit_sw)jump->u.target - (sljit_sw)(code_ptr + 2) - executable_offset);
407 SLJIT_ASSERT(jump->flags & JUMP_LABEL);
408 diff = ((sljit_sw)(code + jump->u.label->size) - (sljit_sw)(code_ptr + 2));
415 if (jump->flags & IS_BL) {
418 jump->flags |= PATCH_B;
425 jump->flags |= PATCH_B;
429 if (jump->flags & JUMP_ADDR)
430 diff = ((sljit_sw)jump->u.target - (sljit_sw)code_ptr - executable_offset);
432 SLJIT_ASSERT(jump->flags & JUMP_LABEL);
433 diff = ((sljit_sw)(code + jump->u.label->size) - (sljit_sw)code_ptr);
442 *code_ptr = ((jump->flags & IS_BL) ? (BL - CONDITIONAL) : (B - CONDITIONAL)) | (code_ptr[2] & COND_MASK);
443 jump->flags |= PATCH_B;
587 struct sljit_jump *jump;
620 jump = compiler->jumps;
663 SLJIT_ASSERT(!jump || jump->addr >= word_count);
665 if (jump && jump->addr == word_count) {
667 if (detect_jump_type(jump, code_ptr, code, executable_offset))
669 jump->addr = (sljit_uw)code_ptr;
671 jump->addr = (sljit_uw)(code_ptr - 2);
672 if (detect_jump_type(jump, code_ptr, code, executable_offset))
675 jump = jump->next;
715 SLJIT_ASSERT(!jump);
742 jump = compiler->jumps;
743 while (jump) {
744 buf_ptr = (sljit_uw *)jump->addr;
746 if (jump->flags & PATCH_B) {
748 if (!(jump->flags & JUMP_ADDR)) {
749 SLJIT_ASSERT(jump->flags & JUMP_LABEL);
750 SLJIT_ASSERT(((sljit_sw)jump->u.label->addr - jump_addr) <= 0x01ffffff && ((sljit_sw)jump->u.label->addr - jump_addr) >= -0x02000000);
751 *buf_ptr |= (((sljit_sw)jump->u.label->addr - jump_addr) >> 2) & 0x00ffffff;
754 SLJIT_ASSERT(((sljit_sw)jump->u.target - jump_addr) <= 0x01ffffff && ((sljit_sw)jump->u.target - jump_addr) >= -0x02000000);
755 *buf_ptr |= (((sljit_sw)jump->u.target - jump_addr) >> 2) & 0x00ffffff;
758 else if (jump->flags & SLJIT_REWRITABLE_JUMP) {
760 jump->addr = (sljit_uw)code_ptr;
763 inline_set_jump_addr((sljit_uw)code_ptr, executable_offset, (jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target, 0);
766 inline_set_jump_addr((sljit_uw)buf_ptr, executable_offset, (jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target, 0);
771 if (jump->flags & IS_BL)
777 *buf_ptr = (jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target;
779 inline_set_jump_addr((sljit_uw)buf_ptr, executable_offset, (jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target, 0);
782 jump = jump->next;
2134 struct sljit_jump *jump;
2139 jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
2140 PTR_FAIL_IF(!jump);
2141 set_jump(jump, compiler, type & SLJIT_REWRITABLE_JUMP);
2151 if (jump->flags & SLJIT_REWRITABLE_JUMP) {
2152 jump->addr = compiler->size;
2157 jump->flags |= IS_BL;
2161 if (!(jump->flags & SLJIT_REWRITABLE_JUMP))
2162 jump->addr = compiler->size;
2165 jump->flags |= IS_BL;
2168 jump->addr = compiler->size;
2170 return jump;
2175 struct sljit_jump *jump;
2191 jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
2192 FAIL_IF(!jump);
2193 set_jump(jump, compiler, JUMP_ADDR | ((type >= SLJIT_FAST_CALL) ? IS_BL : 0));
2194 jump->u.target = srcw;
2206 jump->addr = compiler->size;