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

Diff of /code/trunk/sljit/sljitNativePPC_common.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 329  SLJIT_API_FUNC_ATTRIBUTE void* sljit_gen Line 329  SLJIT_API_FUNC_ATTRIBUTE void* sljit_gen
329          struct sljit_const *const_;          struct sljit_const *const_;
330    
331          CHECK_ERROR_PTR();          CHECK_ERROR_PTR();
332          check_sljit_generate_code(compiler);          CHECK_PTR(check_sljit_generate_code(compiler));
333          reverse_buf(compiler);          reverse_buf(compiler);
334    
335  #if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)  #if (defined SLJIT_INDIRECT_CALL && SLJIT_INDIRECT_CALL)
# Line 578  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 578  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
578          sljit_si i, tmp, offs;          sljit_si i, tmp, offs;
579    
580          CHECK_ERROR();          CHECK_ERROR();
581          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));
582            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  
583    
584          FAIL_IF(push_inst(compiler, MFLR | D(0)));          FAIL_IF(push_inst(compiler, MFLR | D(0)));
585          offs = -(sljit_si)(sizeof(sljit_sw));          offs = -(sljit_si)(sizeof(sljit_sw));
# Line 620  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 612  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
612          if (args >= 3)          if (args >= 3)
613                  FAIL_IF(push_inst(compiler, OR | S(SLJIT_R2) | A(SLJIT_S2) | B(SLJIT_R2)));                  FAIL_IF(push_inst(compiler, OR | S(SLJIT_R2) | A(SLJIT_S2) | B(SLJIT_R2)));
614    
615          local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1) + FIXED_LOCALS_OFFSET;          local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1) + SLJIT_LOCALS_OFFSET;
616          local_size = (local_size + 15) & ~0xf;          local_size = (local_size + 15) & ~0xf;
617          compiler->local_size = local_size;          compiler->local_size = local_size;
618    
# Line 643  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 635  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
635          return SLJIT_SUCCESS;          return SLJIT_SUCCESS;
636  }  }
637    
638  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,
639          sljit_si options, sljit_si args, sljit_si scratches, sljit_si saveds,          sljit_si options, sljit_si args, sljit_si scratches, sljit_si saveds,
640          sljit_si fscratches, sljit_si fsaveds, sljit_si local_size)          sljit_si fscratches, sljit_si fsaveds, sljit_si local_size)
641  {  {
642          CHECK_ERROR_VOID();          CHECK_ERROR();
643          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));
644            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  
645    
646          local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1) + FIXED_LOCALS_OFFSET;          local_size += GET_SAVED_REGISTERS_SIZE(scratches, saveds, 1) + SLJIT_LOCALS_OFFSET;
647          compiler->local_size = (local_size + 15) & ~0xf;          compiler->local_size = (local_size + 15) & ~0xf;
648            return SLJIT_SUCCESS;
649  }  }
650    
651  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 668  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 653  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
653          sljit_si i, tmp, offs;          sljit_si i, tmp, offs;
654    
655          CHECK_ERROR();          CHECK_ERROR();
656          check_sljit_emit_return(compiler, op, src, srcw);          CHECK(check_sljit_emit_return(compiler, op, src, srcw));
657    
658          FAIL_IF(emit_mov_before_return(compiler, op, src, srcw));          FAIL_IF(emit_mov_before_return(compiler, op, src, srcw));
659    
# Line 1265  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1250  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1250  #endif  #endif
1251    
1252          CHECK_ERROR();          CHECK_ERROR();
1253          check_sljit_emit_op0(compiler, op);          CHECK(check_sljit_emit_op0(compiler, op));
1254    
1255          op = GET_OPCODE(op);          op = GET_OPCODE(op);
1256          switch (op) {          switch (op) {
1257          case SLJIT_BREAKPOINT:          case SLJIT_BREAKPOINT:
1258          case SLJIT_NOP:          case SLJIT_NOP:
1259                  return push_inst(compiler, NOP);                  return push_inst(compiler, NOP);
1260          case SLJIT_UMUL:          case SLJIT_LUMUL:
1261          case SLJIT_SMUL:          case SLJIT_LSMUL:
1262                  FAIL_IF(push_inst(compiler, OR | S(SLJIT_R0) | A(TMP_REG1) | B(SLJIT_R0)));                  FAIL_IF(push_inst(compiler, OR | S(SLJIT_R0) | A(TMP_REG1) | B(SLJIT_R0)));
1263  #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)  #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1264                  FAIL_IF(push_inst(compiler, MULLD | D(SLJIT_R0) | A(TMP_REG1) | B(SLJIT_R1)));                  FAIL_IF(push_inst(compiler, MULLD | D(SLJIT_R0) | A(TMP_REG1) | B(SLJIT_R1)));
1265                  return push_inst(compiler, (op == SLJIT_UMUL ? MULHDU : MULHD) | D(SLJIT_R1) | A(TMP_REG1) | B(SLJIT_R1));                  return push_inst(compiler, (op == SLJIT_LUMUL ? MULHDU : MULHD) | D(SLJIT_R1) | A(TMP_REG1) | B(SLJIT_R1));
1266  #else  #else
1267                  FAIL_IF(push_inst(compiler, MULLW | D(SLJIT_R0) | A(TMP_REG1) | B(SLJIT_R1)));                  FAIL_IF(push_inst(compiler, MULLW | D(SLJIT_R0) | A(TMP_REG1) | B(SLJIT_R1)));
1268                  return push_inst(compiler, (op == SLJIT_UMUL ? MULHWU : MULHW) | D(SLJIT_R1) | A(TMP_REG1) | B(SLJIT_R1));                  return push_inst(compiler, (op == SLJIT_LUMUL ? MULHWU : MULHW) | D(SLJIT_R1) | A(TMP_REG1) | B(SLJIT_R1));
1269  #endif  #endif
1270          case SLJIT_UDIV:          case SLJIT_LUDIV:
1271          case SLJIT_SDIV:          case SLJIT_LSDIV:
1272                  FAIL_IF(push_inst(compiler, OR | S(SLJIT_R0) | A(TMP_REG1) | B(SLJIT_R0)));                  FAIL_IF(push_inst(compiler, OR | S(SLJIT_R0) | A(TMP_REG1) | B(SLJIT_R0)));
1273  #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)  #if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
1274                  if (int_op) {                  if (int_op) {
1275                          FAIL_IF(push_inst(compiler, (op == SLJIT_UDIV ? DIVWU : DIVW) | D(SLJIT_R0) | A(TMP_REG1) | B(SLJIT_R1)));                          FAIL_IF(push_inst(compiler, (op == SLJIT_LUDIV ? DIVWU : DIVW) | D(SLJIT_R0) | A(TMP_REG1) | B(SLJIT_R1)));
1276                          FAIL_IF(push_inst(compiler, MULLW | D(SLJIT_R1) | A(SLJIT_R0) | B(SLJIT_R1)));                          FAIL_IF(push_inst(compiler, MULLW | D(SLJIT_R1) | A(SLJIT_R0) | B(SLJIT_R1)));
1277                  } else {                  } else {
1278                          FAIL_IF(push_inst(compiler, (op == SLJIT_UDIV ? DIVDU : DIVD) | D(SLJIT_R0) | A(TMP_REG1) | B(SLJIT_R1)));                          FAIL_IF(push_inst(compiler, (op == SLJIT_LUDIV ? DIVDU : DIVD) | D(SLJIT_R0) | A(TMP_REG1) | B(SLJIT_R1)));
1279                          FAIL_IF(push_inst(compiler, MULLD | D(SLJIT_R1) | A(SLJIT_R0) | B(SLJIT_R1)));                          FAIL_IF(push_inst(compiler, MULLD | D(SLJIT_R1) | A(SLJIT_R0) | B(SLJIT_R1)));
1280                  }                  }
1281                  return push_inst(compiler, SUBF | D(SLJIT_R1) | A(SLJIT_R1) | B(TMP_REG1));                  return push_inst(compiler, SUBF | D(SLJIT_R1) | A(SLJIT_R1) | B(TMP_REG1));
1282  #else  #else
1283                  FAIL_IF(push_inst(compiler, (op == SLJIT_UDIV ? DIVWU : DIVW) | D(SLJIT_R0) | A(TMP_REG1) | B(SLJIT_R1)));                  FAIL_IF(push_inst(compiler, (op == SLJIT_LUDIV ? DIVWU : DIVW) | D(SLJIT_R0) | A(TMP_REG1) | B(SLJIT_R1)));
1284                  FAIL_IF(push_inst(compiler, MULLW | D(SLJIT_R1) | A(SLJIT_R0) | B(SLJIT_R1)));                  FAIL_IF(push_inst(compiler, MULLW | D(SLJIT_R1) | A(SLJIT_R0) | B(SLJIT_R1)));
1285                  return push_inst(compiler, SUBF | D(SLJIT_R1) | A(SLJIT_R1) | B(TMP_REG1));                  return push_inst(compiler, SUBF | D(SLJIT_R1) | A(SLJIT_R1) | B(TMP_REG1));
1286  #endif  #endif
# Line 1315  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1300  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1300          sljit_si op_flags = GET_ALL_FLAGS(op);          sljit_si op_flags = GET_ALL_FLAGS(op);
1301    
1302          CHECK_ERROR();          CHECK_ERROR();
1303          check_sljit_emit_op1(compiler, op, dst, dstw, src, srcw);          CHECK(check_sljit_emit_op1(compiler, op, dst, dstw, src, srcw));
1304          ADJUST_LOCAL_OFFSET(dst, dstw);          ADJUST_LOCAL_OFFSET(dst, dstw);
1305          ADJUST_LOCAL_OFFSET(src, srcw);          ADJUST_LOCAL_OFFSET(src, srcw);
1306    
# Line 1470  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1455  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1455          sljit_si flags = GET_FLAGS(op) ? ALT_SET_FLAGS : 0;          sljit_si flags = GET_FLAGS(op) ? ALT_SET_FLAGS : 0;
1456    
1457          CHECK_ERROR();          CHECK_ERROR();
1458          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));
1459          ADJUST_LOCAL_OFFSET(dst, dstw);          ADJUST_LOCAL_OFFSET(dst, dstw);
1460          ADJUST_LOCAL_OFFSET(src1, src1w);          ADJUST_LOCAL_OFFSET(src1, src1w);
1461          ADJUST_LOCAL_OFFSET(src2, src2w);          ADJUST_LOCAL_OFFSET(src2, src2w);
# Line 1672  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1657  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1657    
1658  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)
1659  {  {
1660          check_sljit_get_register_index(reg);          CHECK_REG_INDEX(check_sljit_get_register_index(reg));
1661          return reg_map[reg];          return reg_map[reg];
1662  }  }
1663    
1664  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)
1665  {  {
1666          check_sljit_get_float_register_index(reg);          CHECK_REG_INDEX(check_sljit_get_float_register_index(reg));
1667          return reg;          return reg;
1668  }  }
1669    
# Line 1686  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1671  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1671          void *instruction, sljit_si size)          void *instruction, sljit_si size)
1672  {  {
1673          CHECK_ERROR();          CHECK_ERROR();
1674          check_sljit_emit_op_custom(compiler, instruction, size);          CHECK(check_sljit_emit_op_custom(compiler, instruction, size));
         SLJIT_ASSERT(size == 4);  
1675    
1676          return push_inst(compiler, *(sljit_ins*)instruction);          return push_inst(compiler, *(sljit_ins*)instruction);
1677  }  }
# Line 1918  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1902  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1902                          break;                          break;
1903                  }                  }
1904                  /* Fall through. */                  /* Fall through. */
1905          case SLJIT_MOVD:          case SLJIT_DMOV:
1906                  if (src != dst_r) {                  if (src != dst_r) {
1907                          if (dst_r != TMP_FREG1)                          if (dst_r != TMP_FREG1)
1908                                  FAIL_IF(push_inst(compiler, FMR | FD(dst_r) | FB(src)));                                  FAIL_IF(push_inst(compiler, FMR | FD(dst_r) | FB(src)));
# Line 1926  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1910  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1910                                  dst_r = src;                                  dst_r = src;
1911                  }                  }
1912                  break;                  break;
1913          case SLJIT_NEGD:          case SLJIT_DNEG:
1914                  FAIL_IF(push_inst(compiler, FNEG | FD(dst_r) | FB(src)));                  FAIL_IF(push_inst(compiler, FNEG | FD(dst_r) | FB(src)));
1915                  break;                  break;
1916          case SLJIT_ABSD:          case SLJIT_DABS:
1917                  FAIL_IF(push_inst(compiler, FABS | FD(dst_r) | FB(src)));                  FAIL_IF(push_inst(compiler, FABS | FD(dst_r) | FB(src)));
1918                  break;                  break;
1919          }          }
# Line 1947  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1931  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1931          sljit_si dst_r, flags = 0;          sljit_si dst_r, flags = 0;
1932    
1933          CHECK_ERROR();          CHECK_ERROR();
1934          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));
1935          ADJUST_LOCAL_OFFSET(dst, dstw);          ADJUST_LOCAL_OFFSET(dst, dstw);
1936          ADJUST_LOCAL_OFFSET(src1, src1w);          ADJUST_LOCAL_OFFSET(src1, src1w);
1937          ADJUST_LOCAL_OFFSET(src2, src2w);          ADJUST_LOCAL_OFFSET(src2, src2w);
# Line 1994  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1978  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1978                  src2 = TMP_FREG2;                  src2 = TMP_FREG2;
1979    
1980          switch (GET_OPCODE(op)) {          switch (GET_OPCODE(op)) {
1981          case SLJIT_ADDD:          case SLJIT_DADD:
1982                  FAIL_IF(push_inst(compiler, SELECT_FOP(op, FADDS, FADD) | FD(dst_r) | FA(src1) | FB(src2)));                  FAIL_IF(push_inst(compiler, SELECT_FOP(op, FADDS, FADD) | FD(dst_r) | FA(src1) | FB(src2)));
1983                  break;                  break;
1984    
1985          case SLJIT_SUBD:          case SLJIT_DSUB:
1986                  FAIL_IF(push_inst(compiler, SELECT_FOP(op, FSUBS, FSUB) | FD(dst_r) | FA(src1) | FB(src2)));                  FAIL_IF(push_inst(compiler, SELECT_FOP(op, FSUBS, FSUB) | FD(dst_r) | FA(src1) | FB(src2)));
1987                  break;                  break;
1988    
1989          case SLJIT_MULD:          case SLJIT_DMUL:
1990                  FAIL_IF(push_inst(compiler, SELECT_FOP(op, FMULS, FMUL) | FD(dst_r) | FA(src1) | FC(src2) /* FMUL use FC as src2 */));                  FAIL_IF(push_inst(compiler, SELECT_FOP(op, FMULS, FMUL) | FD(dst_r) | FA(src1) | FC(src2) /* FMUL use FC as src2 */));
1991                  break;                  break;
1992    
1993          case SLJIT_DIVD:          case SLJIT_DDIV:
1994                  FAIL_IF(push_inst(compiler, SELECT_FOP(op, FDIVS, FDIV) | FD(dst_r) | FA(src1) | FB(src2)));                  FAIL_IF(push_inst(compiler, SELECT_FOP(op, FDIVS, FDIV) | FD(dst_r) | FA(src1) | FB(src2)));
1995                  break;                  break;
1996          }          }
# Line 2027  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2011  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2011  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)
2012  {  {
2013          CHECK_ERROR();          CHECK_ERROR();
2014          check_sljit_emit_fast_enter(compiler, dst, dstw);          CHECK(check_sljit_emit_fast_enter(compiler, dst, dstw));
2015          ADJUST_LOCAL_OFFSET(dst, dstw);          ADJUST_LOCAL_OFFSET(dst, dstw);
2016    
2017          /* For UNUSED dst. Uncommon, but possible. */          /* For UNUSED dst. Uncommon, but possible. */
# Line 2045  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2029  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2029  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)
2030  {  {
2031          CHECK_ERROR();          CHECK_ERROR();
2032          check_sljit_emit_fast_return(compiler, src, srcw);          CHECK(check_sljit_emit_fast_return(compiler, src, srcw));
2033          ADJUST_LOCAL_OFFSET(src, srcw);          ADJUST_LOCAL_OFFSET(src, srcw);
2034    
2035          if (FAST_IS_REG(src))          if (FAST_IS_REG(src))
# Line 2069  SLJIT_API_FUNC_ATTRIBUTE struct sljit_la Line 2053  SLJIT_API_FUNC_ATTRIBUTE struct sljit_la
2053          struct sljit_label *label;          struct sljit_label *label;
2054    
2055          CHECK_ERROR_PTR();          CHECK_ERROR_PTR();
2056          check_sljit_emit_label(compiler);          CHECK_PTR(check_sljit_emit_label(compiler));
2057    
2058          if (compiler->last_label && compiler->last_label->size == compiler->size)          if (compiler->last_label && compiler->last_label->size == compiler->size)
2059                  return compiler->last_label;                  return compiler->last_label;
# Line 2083  SLJIT_API_FUNC_ATTRIBUTE struct sljit_la Line 2067  SLJIT_API_FUNC_ATTRIBUTE struct sljit_la
2067  static sljit_ins get_bo_bi_flags(sljit_si type)  static sljit_ins get_bo_bi_flags(sljit_si type)
2068  {  {
2069          switch (type) {          switch (type) {
2070          case SLJIT_C_EQUAL:          case SLJIT_EQUAL:
2071                  return (12 << 21) | (2 << 16);                  return (12 << 21) | (2 << 16);
2072    
2073          case SLJIT_C_NOT_EQUAL:          case SLJIT_NOT_EQUAL:
2074                  return (4 << 21) | (2 << 16);                  return (4 << 21) | (2 << 16);
2075    
2076          case SLJIT_C_LESS:          case SLJIT_LESS:
2077          case SLJIT_C_FLOAT_LESS:          case SLJIT_D_LESS:
2078                  return (12 << 21) | ((4 + 0) << 16);                  return (12 << 21) | ((4 + 0) << 16);
2079    
2080          case SLJIT_C_GREATER_EQUAL:          case SLJIT_GREATER_EQUAL:
2081          case SLJIT_C_FLOAT_GREATER_EQUAL:          case SLJIT_D_GREATER_EQUAL:
2082                  return (4 << 21) | ((4 + 0) << 16);                  return (4 << 21) | ((4 + 0) << 16);
2083    
2084          case SLJIT_C_GREATER:          case SLJIT_GREATER:
2085          case SLJIT_C_FLOAT_GREATER:          case SLJIT_D_GREATER:
2086                  return (12 << 21) | ((4 + 1) << 16);                  return (12 << 21) | ((4 + 1) << 16);
2087    
2088          case SLJIT_C_LESS_EQUAL:          case SLJIT_LESS_EQUAL:
2089          case SLJIT_C_FLOAT_LESS_EQUAL:          case SLJIT_D_LESS_EQUAL:
2090                  return (4 << 21) | ((4 + 1) << 16);                  return (4 << 21) | ((4 + 1) << 16);
2091    
2092          case SLJIT_C_SIG_LESS:          case SLJIT_SIG_LESS:
2093                  return (12 << 21) | (0 << 16);                  return (12 << 21) | (0 << 16);
2094    
2095          case SLJIT_C_SIG_GREATER_EQUAL:          case SLJIT_SIG_GREATER_EQUAL:
2096                  return (4 << 21) | (0 << 16);                  return (4 << 21) | (0 << 16);
2097    
2098          case SLJIT_C_SIG_GREATER:          case SLJIT_SIG_GREATER:
2099                  return (12 << 21) | (1 << 16);                  return (12 << 21) | (1 << 16);
2100    
2101          case SLJIT_C_SIG_LESS_EQUAL:          case SLJIT_SIG_LESS_EQUAL:
2102                  return (4 << 21) | (1 << 16);                  return (4 << 21) | (1 << 16);
2103    
2104          case SLJIT_C_OVERFLOW:          case SLJIT_OVERFLOW:
2105          case SLJIT_C_MUL_OVERFLOW:          case SLJIT_MUL_OVERFLOW:
2106                  return (12 << 21) | (3 << 16);                  return (12 << 21) | (3 << 16);
2107    
2108          case SLJIT_C_NOT_OVERFLOW:          case SLJIT_NOT_OVERFLOW:
2109          case SLJIT_C_MUL_NOT_OVERFLOW:          case SLJIT_MUL_NOT_OVERFLOW:
2110                  return (4 << 21) | (3 << 16);                  return (4 << 21) | (3 << 16);
2111    
2112          case SLJIT_C_FLOAT_EQUAL:          case SLJIT_D_EQUAL:
2113                  return (12 << 21) | ((4 + 2) << 16);                  return (12 << 21) | ((4 + 2) << 16);
2114    
2115          case SLJIT_C_FLOAT_NOT_EQUAL:          case SLJIT_D_NOT_EQUAL:
2116                  return (4 << 21) | ((4 + 2) << 16);                  return (4 << 21) | ((4 + 2) << 16);
2117    
2118          case SLJIT_C_FLOAT_UNORDERED:          case SLJIT_D_UNORDERED:
2119                  return (12 << 21) | ((4 + 3) << 16);                  return (12 << 21) | ((4 + 3) << 16);
2120    
2121          case SLJIT_C_FLOAT_ORDERED:          case SLJIT_D_ORDERED:
2122                  return (4 << 21) | ((4 + 3) << 16);                  return (4 << 21) | ((4 + 3) << 16);
2123    
2124          default:          default:
# Line 2149  SLJIT_API_FUNC_ATTRIBUTE struct sljit_ju Line 2133  SLJIT_API_FUNC_ATTRIBUTE struct sljit_ju
2133          sljit_ins bo_bi_flags;          sljit_ins bo_bi_flags;
2134    
2135          CHECK_ERROR_PTR();          CHECK_ERROR_PTR();
2136          check_sljit_emit_jump(compiler, type);          CHECK_PTR(check_sljit_emit_jump(compiler, type));
2137    
2138          bo_bi_flags = get_bo_bi_flags(type & 0xff);          bo_bi_flags = get_bo_bi_flags(type & 0xff);
2139          if (!bo_bi_flags)          if (!bo_bi_flags)
# Line 2181  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2165  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2165          sljit_si src_r;          sljit_si src_r;
2166    
2167          CHECK_ERROR();          CHECK_ERROR();
2168          check_sljit_emit_ijump(compiler, type, src, srcw);          CHECK(check_sljit_emit_ijump(compiler, type, src, srcw));
2169          ADJUST_LOCAL_OFFSET(src, srcw);          ADJUST_LOCAL_OFFSET(src, srcw);
2170    
2171          if (FAST_IS_REG(src)) {          if (FAST_IS_REG(src)) {
# Line 2236  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2220  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2220          sljit_sw original_dstw = dstw;          sljit_sw original_dstw = dstw;
2221    
2222          CHECK_ERROR();          CHECK_ERROR();
2223          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));
2224          ADJUST_LOCAL_OFFSET(dst, dstw);          ADJUST_LOCAL_OFFSET(dst, dstw);
2225    
2226          if (dst == SLJIT_UNUSED)          if (dst == SLJIT_UNUSED)
# Line 2259  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2243  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2243                  srcw = 0;                  srcw = 0;
2244          }          }
2245    
2246          switch (type) {          switch (type & 0xff) {
2247          case SLJIT_C_EQUAL:          case SLJIT_EQUAL:
2248                  GET_CR_BIT(2, reg);                  GET_CR_BIT(2, reg);
2249                  break;                  break;
2250    
2251          case SLJIT_C_NOT_EQUAL:          case SLJIT_NOT_EQUAL:
2252                  GET_CR_BIT(2, reg);                  GET_CR_BIT(2, reg);
2253                  INVERT_BIT(reg);                  INVERT_BIT(reg);
2254                  break;                  break;
2255    
2256          case SLJIT_C_LESS:          case SLJIT_LESS:
2257          case SLJIT_C_FLOAT_LESS:          case SLJIT_D_LESS:
2258                  GET_CR_BIT(4 + 0, reg);                  GET_CR_BIT(4 + 0, reg);
2259                  break;                  break;
2260    
2261          case SLJIT_C_GREATER_EQUAL:          case SLJIT_GREATER_EQUAL:
2262          case SLJIT_C_FLOAT_GREATER_EQUAL:          case SLJIT_D_GREATER_EQUAL:
2263                  GET_CR_BIT(4 + 0, reg);                  GET_CR_BIT(4 + 0, reg);
2264                  INVERT_BIT(reg);                  INVERT_BIT(reg);
2265                  break;                  break;
2266    
2267          case SLJIT_C_GREATER:          case SLJIT_GREATER:
2268          case SLJIT_C_FLOAT_GREATER:          case SLJIT_D_GREATER:
2269                  GET_CR_BIT(4 + 1, reg);                  GET_CR_BIT(4 + 1, reg);
2270                  break;                  break;
2271    
2272          case SLJIT_C_LESS_EQUAL:          case SLJIT_LESS_EQUAL:
2273          case SLJIT_C_FLOAT_LESS_EQUAL:          case SLJIT_D_LESS_EQUAL:
2274                  GET_CR_BIT(4 + 1, reg);                  GET_CR_BIT(4 + 1, reg);
2275                  INVERT_BIT(reg);                  INVERT_BIT(reg);
2276                  break;                  break;
2277    
2278          case SLJIT_C_SIG_LESS:          case SLJIT_SIG_LESS:
2279                  GET_CR_BIT(0, reg);                  GET_CR_BIT(0, reg);
2280                  break;                  break;
2281    
2282          case SLJIT_C_SIG_GREATER_EQUAL:          case SLJIT_SIG_GREATER_EQUAL:
2283                  GET_CR_BIT(0, reg);                  GET_CR_BIT(0, reg);
2284                  INVERT_BIT(reg);                  INVERT_BIT(reg);
2285                  break;                  break;
2286    
2287          case SLJIT_C_SIG_GREATER:          case SLJIT_SIG_GREATER:
2288                  GET_CR_BIT(1, reg);                  GET_CR_BIT(1, reg);
2289                  break;                  break;
2290    
2291          case SLJIT_C_SIG_LESS_EQUAL:          case SLJIT_SIG_LESS_EQUAL:
2292                  GET_CR_BIT(1, reg);                  GET_CR_BIT(1, reg);
2293                  INVERT_BIT(reg);                  INVERT_BIT(reg);
2294                  break;                  break;
2295    
2296          case SLJIT_C_OVERFLOW:          case SLJIT_OVERFLOW:
2297          case SLJIT_C_MUL_OVERFLOW:          case SLJIT_MUL_OVERFLOW:
2298                  GET_CR_BIT(3, reg);                  GET_CR_BIT(3, reg);
2299                  break;                  break;
2300    
2301          case SLJIT_C_NOT_OVERFLOW:          case SLJIT_NOT_OVERFLOW:
2302          case SLJIT_C_MUL_NOT_OVERFLOW:          case SLJIT_MUL_NOT_OVERFLOW:
2303                  GET_CR_BIT(3, reg);                  GET_CR_BIT(3, reg);
2304                  INVERT_BIT(reg);                  INVERT_BIT(reg);
2305                  break;                  break;
2306    
2307          case SLJIT_C_FLOAT_EQUAL:          case SLJIT_D_EQUAL:
2308                  GET_CR_BIT(4 + 2, reg);                  GET_CR_BIT(4 + 2, reg);
2309                  break;                  break;
2310    
2311          case SLJIT_C_FLOAT_NOT_EQUAL:          case SLJIT_D_NOT_EQUAL:
2312                  GET_CR_BIT(4 + 2, reg);                  GET_CR_BIT(4 + 2, reg);
2313                  INVERT_BIT(reg);                  INVERT_BIT(reg);
2314                  break;                  break;
2315    
2316          case SLJIT_C_FLOAT_UNORDERED:          case SLJIT_D_UNORDERED:
2317                  GET_CR_BIT(4 + 3, reg);                  GET_CR_BIT(4 + 3, reg);
2318                  break;                  break;
2319    
2320          case SLJIT_C_FLOAT_ORDERED:          case SLJIT_D_ORDERED:
2321                  GET_CR_BIT(4 + 3, reg);                  GET_CR_BIT(4 + 3, reg);
2322                  INVERT_BIT(reg);                  INVERT_BIT(reg);
2323                  break;                  break;
# Line 2360  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2344  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2344                  return emit_op(compiler, op, input_flags, dst, dstw, TMP_REG1, 0, TMP_REG2, 0);                  return emit_op(compiler, op, input_flags, dst, dstw, TMP_REG1, 0, TMP_REG2, 0);
2345          }          }
2346    
2347  #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) || (defined SLJIT_DEBUG && SLJIT_DEBUG)  #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \
2348                    || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS)
2349          compiler->skip_checks = 1;          compiler->skip_checks = 1;
2350  #endif  #endif
2351          return sljit_emit_op2(compiler, op | flags, dst, original_dstw, src, srcw, TMP_REG2, 0);          return sljit_emit_op2(compiler, op | flags, dst, original_dstw, src, srcw, TMP_REG2, 0);
# Line 2372  SLJIT_API_FUNC_ATTRIBUTE struct sljit_co Line 2357  SLJIT_API_FUNC_ATTRIBUTE struct sljit_co
2357          sljit_si reg;          sljit_si reg;
2358    
2359          CHECK_ERROR_PTR();          CHECK_ERROR_PTR();
2360          check_sljit_emit_const(compiler, dst, dstw, init_value);          CHECK_PTR(check_sljit_emit_const(compiler, dst, dstw, init_value));
2361          ADJUST_LOCAL_OFFSET(dst, dstw);          ADJUST_LOCAL_OFFSET(dst, dstw);
2362    
2363          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