/[pcre]/code/trunk/sljit/sljitNativeARM_32.c
ViewVC logotype

Diff of /code/trunk/sljit/sljitNativeARM_32.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1505 by zherczeg, Mon Aug 11 06:42:28 2014 UTC revision 1506 by zherczeg, Sat Sep 27 06:25:26 2014 UTC
# Line 574  SLJIT_API_FUNC_ATTRIBUTE void* sljit_gen Line 574  SLJIT_API_FUNC_ATTRIBUTE void* sljit_gen
574          struct sljit_const *const_;          struct sljit_const *const_;
575    
576          CHECK_ERROR_PTR();          CHECK_ERROR_PTR();
577          check_sljit_generate_code(compiler);          CHECK_PTR(check_sljit_generate_code(compiler));
578          reverse_buf(compiler);          reverse_buf(compiler);
579    
580          /* Second code generation pass. */          /* Second code generation pass. */
# Line 831  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 831  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
831          sljit_uw push;          sljit_uw push;
832    
833          CHECK_ERROR();          CHECK_ERROR();
834          check_sljit_emit_enter(compiler, options, args, scratches, saveds, fscratches, fsaveds, local_size);          CHECK(check_sljit_emit_enter(compiler, options, args, scratches, saveds, fscratches, fsaveds, local_size));
835            set_emit_enter(compiler, options, args, scratches, saveds, fscratches, fsaveds, local_size);
         compiler->options = options;  
         compiler->scratches = scratches;  
         compiler->saveds = saveds;  
         compiler->fscratches = fscratches;  
         compiler->fsaveds = fsaveds;  
 #if (defined SLJIT_DEBUG && SLJIT_DEBUG)  
         compiler->logical_local_size = local_size;  
 #endif  
836    
837          /* Push saved registers, temporary registers          /* Push saved registers, temporary registers
838             stmdb sp!, {..., lr} */             stmdb sp!, {..., lr} */
# Line 872  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 864  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
864          return SLJIT_SUCCESS;          return SLJIT_SUCCESS;
865  }  }
866    
867  SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler,  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_set_context(struct sljit_compiler *compiler,
868          sljit_si options, sljit_si args, sljit_si scratches, sljit_si saveds,          sljit_si options, sljit_si args, sljit_si scratches, sljit_si saveds,
869          sljit_si fscratches, sljit_si fsaveds, sljit_si local_size)          sljit_si fscratches, sljit_si fsaveds, sljit_si local_size)
870  {  {
871          sljit_si size;          sljit_si size;
872    
873          CHECK_ERROR_VOID();          CHECK_ERROR();
874          check_sljit_set_context(compiler, options, args, scratches, saveds, fscratches, fsaveds, local_size);          CHECK(check_sljit_set_context(compiler, options, args, scratches, saveds, fscratches, fsaveds, local_size));
875            set_set_context(compiler, options, args, scratches, saveds, fscratches, fsaveds, local_size);
         compiler->options = options;  
         compiler->scratches = scratches;  
         compiler->saveds = saveds;  
         compiler->fscratches = fscratches;  
         compiler->fsaveds = fsaveds;  
 #if (defined SLJIT_DEBUG && SLJIT_DEBUG)  
         compiler->logical_local_size = local_size;  
 #endif  
876    
877          size = GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1);          size = GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1);
878          compiler->local_size = ((size + local_size + 7) & ~7) - size;          compiler->local_size = ((size + local_size + 7) & ~7) - size;
879            return SLJIT_SUCCESS;
880  }  }
881    
882  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_return(struct sljit_compiler *compiler, sljit_si op, sljit_si src, sljit_sw srcw)  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_return(struct sljit_compiler *compiler, sljit_si op, sljit_si src, sljit_sw srcw)
# Line 900  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 885  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
885          sljit_uw pop;          sljit_uw pop;
886    
887          CHECK_ERROR();          CHECK_ERROR();
888          check_sljit_emit_return(compiler, op, src, srcw);          CHECK(check_sljit_emit_return(compiler, op, src, srcw));
889    
890          FAIL_IF(emit_mov_before_return(compiler, op, src, srcw));          FAIL_IF(emit_mov_before_return(compiler, op, src, srcw));
891    
# Line 1820  extern int __aeabi_idivmod(int numerator Line 1805  extern int __aeabi_idivmod(int numerator
1805  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op0(struct sljit_compiler *compiler, sljit_si op)  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op0(struct sljit_compiler *compiler, sljit_si op)
1806  {  {
1807          CHECK_ERROR();          CHECK_ERROR();
1808          check_sljit_emit_op0(compiler, op);          CHECK(check_sljit_emit_op0(compiler, op));
1809    
1810          op = GET_OPCODE(op);          op = GET_OPCODE(op);
1811          switch (op) {          switch (op) {
# Line 1830  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1815  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1815          case SLJIT_NOP:          case SLJIT_NOP:
1816                  FAIL_IF(push_inst(compiler, NOP));                  FAIL_IF(push_inst(compiler, NOP));
1817                  break;                  break;
1818          case SLJIT_UMUL:          case SLJIT_LUMUL:
1819          case SLJIT_SMUL:          case SLJIT_LSMUL:
1820  #if (defined SLJIT_CONFIG_ARM_V7 && SLJIT_CONFIG_ARM_V7)  #if (defined SLJIT_CONFIG_ARM_V7 && SLJIT_CONFIG_ARM_V7)
1821                  return push_inst(compiler, (op == SLJIT_UMUL ? UMULL : SMULL)                  return push_inst(compiler, (op == SLJIT_LUMUL ? UMULL : SMULL)
1822                          | (reg_map[SLJIT_R1] << 16)                          | (reg_map[SLJIT_R1] << 16)
1823                          | (reg_map[SLJIT_R0] << 12)                          | (reg_map[SLJIT_R0] << 12)
1824                          | (reg_map[SLJIT_R0] << 8)                          | (reg_map[SLJIT_R0] << 8)
1825                          | reg_map[SLJIT_R1]);                          | reg_map[SLJIT_R1]);
1826  #else  #else
1827                  FAIL_IF(push_inst(compiler, EMIT_DATA_PROCESS_INS(MOV_DP, 0, TMP_REG1, SLJIT_UNUSED, RM(SLJIT_R1))));                  FAIL_IF(push_inst(compiler, EMIT_DATA_PROCESS_INS(MOV_DP, 0, TMP_REG1, SLJIT_UNUSED, RM(SLJIT_R1))));
1828                  return push_inst(compiler, (op == SLJIT_UMUL ? UMULL : SMULL)                  return push_inst(compiler, (op == SLJIT_LUMUL ? UMULL : SMULL)
1829                          | (reg_map[SLJIT_R1] << 16)                          | (reg_map[SLJIT_R1] << 16)
1830                          | (reg_map[SLJIT_R0] << 12)                          | (reg_map[SLJIT_R0] << 12)
1831                          | (reg_map[SLJIT_R0] << 8)                          | (reg_map[SLJIT_R0] << 8)
1832                          | reg_map[TMP_REG1]);                          | reg_map[TMP_REG1]);
1833  #endif  #endif
1834          case SLJIT_UDIV:          case SLJIT_LUDIV:
1835          case SLJIT_SDIV:          case SLJIT_LSDIV:
1836                  if (compiler->scratches >= 3)                  if (compiler->scratches >= 3)
1837                          FAIL_IF(push_inst(compiler, 0xe52d2008 /* str r2, [sp, #-8]! */));                          FAIL_IF(push_inst(compiler, 0xe52d2008 /* str r2, [sp, #-8]! */));
1838  #if defined(__GNUC__)  #if defined(__GNUC__)
1839                  FAIL_IF(sljit_emit_ijump(compiler, SLJIT_FAST_CALL, SLJIT_IMM,                  FAIL_IF(sljit_emit_ijump(compiler, SLJIT_FAST_CALL, SLJIT_IMM,
1840                          (op == SLJIT_UDIV ? SLJIT_FUNC_OFFSET(__aeabi_uidivmod) : SLJIT_FUNC_OFFSET(__aeabi_idivmod))));                          (op == SLJIT_LUDIV ? SLJIT_FUNC_OFFSET(__aeabi_uidivmod) : SLJIT_FUNC_OFFSET(__aeabi_idivmod))));
1841  #else  #else
1842  #error "Software divmod functions are needed"  #error "Software divmod functions are needed"
1843  #endif  #endif
# Line 1869  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1854  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1854          sljit_si src, sljit_sw srcw)          sljit_si src, sljit_sw srcw)
1855  {  {
1856          CHECK_ERROR();          CHECK_ERROR();
1857          check_sljit_emit_op1(compiler, op, dst, dstw, src, srcw);          CHECK(check_sljit_emit_op1(compiler, op, dst, dstw, src, srcw));
1858          ADJUST_LOCAL_OFFSET(dst, dstw);          ADJUST_LOCAL_OFFSET(dst, dstw);
1859          ADJUST_LOCAL_OFFSET(src, srcw);          ADJUST_LOCAL_OFFSET(src, srcw);
1860    
# Line 1914  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1899  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1899                  return emit_op(compiler, op, ALLOW_ANY_IMM, dst, dstw, TMP_REG1, 0, src, srcw);                  return emit_op(compiler, op, ALLOW_ANY_IMM, dst, dstw, TMP_REG1, 0, src, srcw);
1900    
1901          case SLJIT_NEG:          case SLJIT_NEG:
1902  #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) || (defined SLJIT_DEBUG && SLJIT_DEBUG)  #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \
1903                            || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS)
1904                  compiler->skip_checks = 1;                  compiler->skip_checks = 1;
1905  #endif  #endif
1906                  return sljit_emit_op2(compiler, SLJIT_SUB | GET_ALL_FLAGS(op), dst, dstw, SLJIT_IMM, 0, src, srcw);                  return sljit_emit_op2(compiler, SLJIT_SUB | GET_ALL_FLAGS(op), dst, dstw, SLJIT_IMM, 0, src, srcw);
# Line 1932  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1918  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1918          sljit_si src2, sljit_sw src2w)          sljit_si src2, sljit_sw src2w)
1919  {  {
1920          CHECK_ERROR();          CHECK_ERROR();
1921          check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w);          CHECK(check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w));
1922          ADJUST_LOCAL_OFFSET(dst, dstw);          ADJUST_LOCAL_OFFSET(dst, dstw);
1923          ADJUST_LOCAL_OFFSET(src1, src1w);          ADJUST_LOCAL_OFFSET(src1, src1w);
1924          ADJUST_LOCAL_OFFSET(src2, src2w);          ADJUST_LOCAL_OFFSET(src2, src2w);
# Line 1970  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1956  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1956    
1957  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_register_index(sljit_si reg)  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_register_index(sljit_si reg)
1958  {  {
1959          check_sljit_get_register_index(reg);          CHECK_REG_INDEX(check_sljit_get_register_index(reg));
1960          return reg_map[reg];          return reg_map[reg];
1961  }  }
1962    
1963  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_float_register_index(sljit_si reg)  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_float_register_index(sljit_si reg)
1964  {  {
1965          check_sljit_get_float_register_index(reg);          CHECK_REG_INDEX(check_sljit_get_float_register_index(reg));
1966          return reg << 1;          return reg << 1;
1967  }  }
1968    
# Line 1984  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1970  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1970          void *instruction, sljit_si size)          void *instruction, sljit_si size)
1971  {  {
1972          CHECK_ERROR();          CHECK_ERROR();
1973          check_sljit_emit_op_custom(compiler, instruction, size);          CHECK(check_sljit_emit_op_custom(compiler, instruction, size));
         SLJIT_ASSERT(size == 4);  
1974    
1975          return push_inst(compiler, *(sljit_uw*)instruction);          return push_inst(compiler, *(sljit_uw*)instruction);
1976  }  }
# Line 2188  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2173  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2173          }          }
2174    
2175          switch (GET_OPCODE(op)) {          switch (GET_OPCODE(op)) {
2176          case SLJIT_MOVD:          case SLJIT_DMOV:
2177                  if (src != dst_r) {                  if (src != dst_r) {
2178                          if (dst_r != TMP_FREG1)                          if (dst_r != TMP_FREG1)
2179                                  FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VMOV_F32, op & SLJIT_SINGLE_OP, dst_r, src, 0)));                                  FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VMOV_F32, op & SLJIT_SINGLE_OP, dst_r, src, 0)));
# Line 2196  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2181  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2181                                  dst_r = src;                                  dst_r = src;
2182                  }                  }
2183                  break;                  break;
2184          case SLJIT_NEGD:          case SLJIT_DNEG:
2185                  FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VNEG_F32, op & SLJIT_SINGLE_OP, dst_r, src, 0)));                  FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VNEG_F32, op & SLJIT_SINGLE_OP, dst_r, src, 0)));
2186                  break;                  break;
2187          case SLJIT_ABSD:          case SLJIT_DABS:
2188                  FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VABS_F32, op & SLJIT_SINGLE_OP, dst_r, src, 0)));                  FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VABS_F32, op & SLJIT_SINGLE_OP, dst_r, src, 0)));
2189                  break;                  break;
2190          case SLJIT_CONVD_FROMS:          case SLJIT_CONVD_FROMS:
# Line 2221  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2206  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2206          sljit_si dst_r;          sljit_si dst_r;
2207    
2208          CHECK_ERROR();          CHECK_ERROR();
2209          check_sljit_emit_fop2(compiler, op, dst, dstw, src1, src1w, src2, src2w);          CHECK(check_sljit_emit_fop2(compiler, op, dst, dstw, src1, src1w, src2, src2w));
2210          ADJUST_LOCAL_OFFSET(dst, dstw);          ADJUST_LOCAL_OFFSET(dst, dstw);
2211          ADJUST_LOCAL_OFFSET(src1, src1w);          ADJUST_LOCAL_OFFSET(src1, src1w);
2212          ADJUST_LOCAL_OFFSET(src2, src2w);          ADJUST_LOCAL_OFFSET(src2, src2w);
# Line 2243  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2228  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2228          }          }
2229    
2230          switch (GET_OPCODE(op)) {          switch (GET_OPCODE(op)) {
2231          case SLJIT_ADDD:          case SLJIT_DADD:
2232                  FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VADD_F32, op & SLJIT_SINGLE_OP, dst_r, src2, src1)));                  FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VADD_F32, op & SLJIT_SINGLE_OP, dst_r, src2, src1)));
2233                  break;                  break;
2234    
2235          case SLJIT_SUBD:          case SLJIT_DSUB:
2236                  FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VSUB_F32, op & SLJIT_SINGLE_OP, dst_r, src2, src1)));                  FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VSUB_F32, op & SLJIT_SINGLE_OP, dst_r, src2, src1)));
2237                  break;                  break;
2238    
2239          case SLJIT_MULD:          case SLJIT_DMUL:
2240                  FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VMUL_F32, op & SLJIT_SINGLE_OP, dst_r, src2, src1)));                  FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VMUL_F32, op & SLJIT_SINGLE_OP, dst_r, src2, src1)));
2241                  break;                  break;
2242    
2243          case SLJIT_DIVD:          case SLJIT_DDIV:
2244                  FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VDIV_F32, op & SLJIT_SINGLE_OP, dst_r, src2, src1)));                  FAIL_IF(push_inst(compiler, EMIT_FPU_OPERATION(VDIV_F32, op & SLJIT_SINGLE_OP, dst_r, src2, src1)));
2245                  break;                  break;
2246          }          }
# Line 2277  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2262  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2262  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fast_enter(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw)  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fast_enter(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw)
2263  {  {
2264          CHECK_ERROR();          CHECK_ERROR();
2265          check_sljit_emit_fast_enter(compiler, dst, dstw);          CHECK(check_sljit_emit_fast_enter(compiler, dst, dstw));
2266          ADJUST_LOCAL_OFFSET(dst, dstw);          ADJUST_LOCAL_OFFSET(dst, dstw);
2267    
2268          /* For UNUSED dst. Uncommon, but possible. */          /* For UNUSED dst. Uncommon, but possible. */
# Line 2300  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2285  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2285  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fast_return(struct sljit_compiler *compiler, sljit_si src, sljit_sw srcw)  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_fast_return(struct sljit_compiler *compiler, sljit_si src, sljit_sw srcw)
2286  {  {
2287          CHECK_ERROR();          CHECK_ERROR();
2288          check_sljit_emit_fast_return(compiler, src, srcw);          CHECK(check_sljit_emit_fast_return(compiler, src, srcw));
2289          ADJUST_LOCAL_OFFSET(src, srcw);          ADJUST_LOCAL_OFFSET(src, srcw);
2290    
2291          if (FAST_IS_REG(src))          if (FAST_IS_REG(src))
# Line 2327  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2312  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2312  static sljit_uw get_cc(sljit_si type)  static sljit_uw get_cc(sljit_si type)
2313  {  {
2314          switch (type) {          switch (type) {
2315          case SLJIT_C_EQUAL:          case SLJIT_EQUAL:
2316          case SLJIT_C_MUL_NOT_OVERFLOW:          case SLJIT_MUL_NOT_OVERFLOW:
2317          case SLJIT_C_FLOAT_EQUAL:          case SLJIT_D_EQUAL:
2318                  return 0x00000000;                  return 0x00000000;
2319    
2320          case SLJIT_C_NOT_EQUAL:          case SLJIT_NOT_EQUAL:
2321          case SLJIT_C_MUL_OVERFLOW:          case SLJIT_MUL_OVERFLOW:
2322          case SLJIT_C_FLOAT_NOT_EQUAL:          case SLJIT_D_NOT_EQUAL:
2323                  return 0x10000000;                  return 0x10000000;
2324    
2325          case SLJIT_C_LESS:          case SLJIT_LESS:
2326          case SLJIT_C_FLOAT_LESS:          case SLJIT_D_LESS:
2327                  return 0x30000000;                  return 0x30000000;
2328    
2329          case SLJIT_C_GREATER_EQUAL:          case SLJIT_GREATER_EQUAL:
2330          case SLJIT_C_FLOAT_GREATER_EQUAL:          case SLJIT_D_GREATER_EQUAL:
2331                  return 0x20000000;                  return 0x20000000;
2332    
2333          case SLJIT_C_GREATER:          case SLJIT_GREATER:
2334          case SLJIT_C_FLOAT_GREATER:          case SLJIT_D_GREATER:
2335                  return 0x80000000;                  return 0x80000000;
2336    
2337          case SLJIT_C_LESS_EQUAL:          case SLJIT_LESS_EQUAL:
2338          case SLJIT_C_FLOAT_LESS_EQUAL:          case SLJIT_D_LESS_EQUAL:
2339                  return 0x90000000;                  return 0x90000000;
2340    
2341          case SLJIT_C_SIG_LESS:          case SLJIT_SIG_LESS:
2342                  return 0xb0000000;                  return 0xb0000000;
2343    
2344          case SLJIT_C_SIG_GREATER_EQUAL:          case SLJIT_SIG_GREATER_EQUAL:
2345                  return 0xa0000000;                  return 0xa0000000;
2346    
2347          case SLJIT_C_SIG_GREATER:          case SLJIT_SIG_GREATER:
2348                  return 0xc0000000;                  return 0xc0000000;
2349    
2350          case SLJIT_C_SIG_LESS_EQUAL:          case SLJIT_SIG_LESS_EQUAL:
2351                  return 0xd0000000;                  return 0xd0000000;
2352    
2353          case SLJIT_C_OVERFLOW:          case SLJIT_OVERFLOW:
2354          case SLJIT_C_FLOAT_UNORDERED:          case SLJIT_D_UNORDERED:
2355                  return 0x60000000;                  return 0x60000000;
2356    
2357          case SLJIT_C_NOT_OVERFLOW:          case SLJIT_NOT_OVERFLOW:
2358          case SLJIT_C_FLOAT_ORDERED:          case SLJIT_D_ORDERED:
2359                  return 0x70000000;                  return 0x70000000;
2360    
2361          default: /* SLJIT_JUMP */          default:
2362                    SLJIT_ASSERT(type >= SLJIT_JUMP && type <= SLJIT_CALL3);
2363                  return 0xe0000000;                  return 0xe0000000;
2364          }          }
2365  }  }
# Line 2383  SLJIT_API_FUNC_ATTRIBUTE struct sljit_la Line 2369  SLJIT_API_FUNC_ATTRIBUTE struct sljit_la
2369          struct sljit_label *label;          struct sljit_label *label;
2370    
2371          CHECK_ERROR_PTR();          CHECK_ERROR_PTR();
2372          check_sljit_emit_label(compiler);          CHECK_PTR(check_sljit_emit_label(compiler));
2373    
2374          if (compiler->last_label && compiler->last_label->size == compiler->size)          if (compiler->last_label && compiler->last_label->size == compiler->size)
2375                  return compiler->last_label;                  return compiler->last_label;
# Line 2399  SLJIT_API_FUNC_ATTRIBUTE struct sljit_ju Line 2385  SLJIT_API_FUNC_ATTRIBUTE struct sljit_ju
2385          struct sljit_jump *jump;          struct sljit_jump *jump;
2386    
2387          CHECK_ERROR_PTR();          CHECK_ERROR_PTR();
2388          check_sljit_emit_jump(compiler, type);          CHECK_PTR(check_sljit_emit_jump(compiler, type));
2389    
2390          jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));          jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
2391          PTR_FAIL_IF(!jump);          PTR_FAIL_IF(!jump);
# Line 2440  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2426  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2426          struct sljit_jump *jump;          struct sljit_jump *jump;
2427    
2428          CHECK_ERROR();          CHECK_ERROR();
2429          check_sljit_emit_ijump(compiler, type, src, srcw);          CHECK(check_sljit_emit_ijump(compiler, type, src, srcw));
2430          ADJUST_LOCAL_OFFSET(src, srcw);          ADJUST_LOCAL_OFFSET(src, srcw);
2431    
2432          /* In ARM, we don't need to touch the arguments. */          /* In ARM, we don't need to touch the arguments. */
# Line 2481  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2467  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2467          sljit_uw cc, ins;          sljit_uw cc, ins;
2468    
2469          CHECK_ERROR();          CHECK_ERROR();
2470          check_sljit_emit_op_flags(compiler, op, dst, dstw, src, srcw, type);          CHECK(check_sljit_emit_op_flags(compiler, op, dst, dstw, src, srcw, type));
2471          ADJUST_LOCAL_OFFSET(dst, dstw);          ADJUST_LOCAL_OFFSET(dst, dstw);
2472          ADJUST_LOCAL_OFFSET(src, srcw);          ADJUST_LOCAL_OFFSET(src, srcw);
2473    
# Line 2489  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2475  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2475                  return SLJIT_SUCCESS;                  return SLJIT_SUCCESS;
2476    
2477          op = GET_OPCODE(op);          op = GET_OPCODE(op);
2478          cc = get_cc(type);          cc = get_cc(type & 0xff);
2479          dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2;          dst_r = FAST_IS_REG(dst) ? dst : TMP_REG2;
2480    
2481          if (op < SLJIT_ADD) {          if (op < SLJIT_ADD) {
# Line 2531  SLJIT_API_FUNC_ATTRIBUTE struct sljit_co Line 2517  SLJIT_API_FUNC_ATTRIBUTE struct sljit_co
2517          sljit_si reg;          sljit_si reg;
2518    
2519          CHECK_ERROR_PTR();          CHECK_ERROR_PTR();
2520          check_sljit_emit_const(compiler, dst, dstw, init_value);          CHECK_PTR(check_sljit_emit_const(compiler, dst, dstw, init_value));
2521          ADJUST_LOCAL_OFFSET(dst, dstw);          ADJUST_LOCAL_OFFSET(dst, dstw);
2522    
2523          const_ = (struct sljit_const*)ensure_abuf(compiler, sizeof(struct sljit_const));          const_ = (struct sljit_const*)ensure_abuf(compiler, sizeof(struct sljit_const));

Legend:
Removed from v.1505  
changed lines
  Added in v.1506

  ViewVC Help
Powered by ViewVC 1.1.5