Lines Matching full:jump
903 static SLJIT_INLINE sljit_ins * detect_jump_type(struct sljit_jump *jump, sljit_ins *code_ptr, sljit_ins *code)
910 if (jump->flags & SLJIT_REWRITABLE_JUMP)
913 if (jump->flags & JUMP_ADDR)
914 target_addr = jump->u.target;
916 SLJIT_ASSERT(jump->flags & JUMP_LABEL);
917 target_addr = (sljit_uw)(code + jump->u.label->size);
920 inst = (sljit_ins *)jump->addr;
921 if (jump->flags & IS_COND)
926 jump->flags |= PATCH_B;
928 if (!(jump->flags & IS_COND)) {
929 if (jump->flags & IS_JAL) {
930 jump->flags &= ~(PATCH_B);
931 jump->flags |= PATCH_J;
956 jump->addr -= sizeof(sljit_ins);
960 if (jump->flags & IS_COND) {
961 if ((target_addr & ~0x3FFFFFFFL) == ((jump->addr + sizeof(sljit_ins)) & ~0x3FFFFFFFL)) {
962 jump->flags |= PATCH_J;
971 if ((target_addr & ~0x3FFFFFFFL) == ((jump->addr + sizeof(sljit_ins)) & ~0x3FFFFFFFL)) {
972 jump->flags |= PATCH_J;
974 if (jump->flags & IS_JAL) {
1008 struct sljit_jump *jump;
1022 jump = compiler->jumps;
1030 SLJIT_ASSERT(!jump || jump->addr >= word_count);
1040 if (jump && jump->addr == word_count) {
1041 if (jump->flags & IS_JAL)
1042 jump->addr = (sljit_uw)(code_ptr - 4);
1044 jump->addr = (sljit_uw)(code_ptr - 3);
1046 code_ptr = detect_jump_type(jump, code_ptr, code);
1047 jump = jump->next;
1070 SLJIT_ASSERT(!jump);
1074 jump = compiler->jumps;
1075 while (jump) {
1077 addr = (jump->flags & JUMP_LABEL) ? jump->u.label->addr : jump->u.target;
1078 buf_ptr = (sljit_ins *)jump->addr;
1080 if (jump->flags & PATCH_B) {
1081 addr = (sljit_sw)(addr - (jump->addr)) >> 3;
1092 if (jump->flags & PATCH_J) {
1093 SLJIT_ASSERT((addr & ~0x3FFFFFFFL) == ((jump->addr + sizeof(sljit_ins)) & ~0x3FFFFFFFL));
1094 addr = (sljit_sw)(addr - (jump->addr)) >> 3;
1104 SLJIT_ASSERT(!(jump->flags & IS_JAL));
1112 jump = jump->next;
2358 struct sljit_jump *jump = NULL;
2406 jump = (struct sljit_jump *)ensure_abuf(compiler, sizeof(struct sljit_jump));
2407 FAIL_IF(!jump);
2408 set_jump(jump, compiler, JUMP_ADDR | ((type >= SLJIT_FAST_CALL) ? IS_JAL : 0));
2409 jump->u.target = srcw;
2414 jump->addr = compiler->size;
2417 jump->addr = compiler->size;
2428 if (jump)
2429 jump->addr = compiler->size;
2444 struct sljit_jump *jump;
2453 jump = (struct sljit_jump *)ensure_abuf(compiler, sizeof(struct sljit_jump));
2454 PTR_FAIL_IF(!jump);
2455 set_jump(jump, compiler, type & SLJIT_REWRITABLE_JUMP);
2509 jump->flags |= flags;
2518 jump->addr = compiler->size;
2523 jump->flags |= IS_JAL | (type >= SLJIT_CALL0 ? SLJIT_REWRITABLE_JUMP : 0);
2525 jump->addr = compiler->size;
2529 return jump;