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

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

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

revision 1505 by zherczeg, Mon Jul 7 07:11:16 2014 UTC revision 1506 by zherczeg, Sat Sep 27 06:25:26 2014 UTC
# Line 72  static SLJIT_CONST sljit_ub reg_map[SLJI Line 72  static SLJIT_CONST sljit_ub reg_map[SLJI
72    
73  #define CHECK_EXTRA_REGS(p, w, do) \  #define CHECK_EXTRA_REGS(p, w, do) \
74          if (p >= SLJIT_R3 && p <= SLJIT_R6) { \          if (p >= SLJIT_R3 && p <= SLJIT_R6) { \
75                  w = FIXED_LOCALS_OFFSET + ((p) - (SLJIT_R3 + 4)) * sizeof(sljit_sw); \                  w = SLJIT_LOCALS_OFFSET + ((p) - (SLJIT_R3 + 4)) * sizeof(sljit_sw); \
76                  p = SLJIT_MEM1(SLJIT_SP); \                  p = SLJIT_MEM1(SLJIT_SP); \
77                  do; \                  do; \
78          }          }
# Line 183  static SLJIT_CONST sljit_ub reg_lmap[SLJ Line 183  static SLJIT_CONST sljit_ub reg_lmap[SLJ
183  #define IMUL_r_rm_i8    0x6b  #define IMUL_r_rm_i8    0x6b
184  #define IMUL_r_rm_i32   0x69  #define IMUL_r_rm_i32   0x69
185  #define JE_i8           0x74  #define JE_i8           0x74
186    #define JNE_i8          0x75
187  #define JMP_i8          0xeb  #define JMP_i8          0xeb
188  #define JMP_i32         0xe9  #define JMP_i32         0xe9
189  #define JMP_rm          (/* GROUP_FF */ 4 << 3)  #define JMP_rm          (/* GROUP_FF */ 4 << 3)
# Line 330  static void get_cpu_features(void) Line 331  static void get_cpu_features(void)
331  static sljit_ub get_jump_code(sljit_si type)  static sljit_ub get_jump_code(sljit_si type)
332  {  {
333          switch (type) {          switch (type) {
334          case SLJIT_C_EQUAL:          case SLJIT_EQUAL:
335          case SLJIT_C_FLOAT_EQUAL:          case SLJIT_D_EQUAL:
336                  return 0x84 /* je */;                  return 0x84 /* je */;
337    
338          case SLJIT_C_NOT_EQUAL:          case SLJIT_NOT_EQUAL:
339          case SLJIT_C_FLOAT_NOT_EQUAL:          case SLJIT_D_NOT_EQUAL:
340                  return 0x85 /* jne */;                  return 0x85 /* jne */;
341    
342          case SLJIT_C_LESS:          case SLJIT_LESS:
343          case SLJIT_C_FLOAT_LESS:          case SLJIT_D_LESS:
344                  return 0x82 /* jc */;                  return 0x82 /* jc */;
345    
346          case SLJIT_C_GREATER_EQUAL:          case SLJIT_GREATER_EQUAL:
347          case SLJIT_C_FLOAT_GREATER_EQUAL:          case SLJIT_D_GREATER_EQUAL:
348                  return 0x83 /* jae */;                  return 0x83 /* jae */;
349    
350          case SLJIT_C_GREATER:          case SLJIT_GREATER:
351          case SLJIT_C_FLOAT_GREATER:          case SLJIT_D_GREATER:
352                  return 0x87 /* jnbe */;                  return 0x87 /* jnbe */;
353    
354          case SLJIT_C_LESS_EQUAL:          case SLJIT_LESS_EQUAL:
355          case SLJIT_C_FLOAT_LESS_EQUAL:          case SLJIT_D_LESS_EQUAL:
356                  return 0x86 /* jbe */;                  return 0x86 /* jbe */;
357    
358          case SLJIT_C_SIG_LESS:          case SLJIT_SIG_LESS:
359                  return 0x8c /* jl */;                  return 0x8c /* jl */;
360    
361          case SLJIT_C_SIG_GREATER_EQUAL:          case SLJIT_SIG_GREATER_EQUAL:
362                  return 0x8d /* jnl */;                  return 0x8d /* jnl */;
363    
364          case SLJIT_C_SIG_GREATER:          case SLJIT_SIG_GREATER:
365                  return 0x8f /* jnle */;                  return 0x8f /* jnle */;
366    
367          case SLJIT_C_SIG_LESS_EQUAL:          case SLJIT_SIG_LESS_EQUAL:
368                  return 0x8e /* jle */;                  return 0x8e /* jle */;
369    
370          case SLJIT_C_OVERFLOW:          case SLJIT_OVERFLOW:
371          case SLJIT_C_MUL_OVERFLOW:          case SLJIT_MUL_OVERFLOW:
372                  return 0x80 /* jo */;                  return 0x80 /* jo */;
373    
374          case SLJIT_C_NOT_OVERFLOW:          case SLJIT_NOT_OVERFLOW:
375          case SLJIT_C_MUL_NOT_OVERFLOW:          case SLJIT_MUL_NOT_OVERFLOW:
376                  return 0x81 /* jno */;                  return 0x81 /* jno */;
377    
378          case SLJIT_C_FLOAT_UNORDERED:          case SLJIT_D_UNORDERED:
379                  return 0x8a /* jp */;                  return 0x8a /* jp */;
380    
381          case SLJIT_C_FLOAT_ORDERED:          case SLJIT_D_ORDERED:
382                  return 0x8b /* jpo */;                  return 0x8b /* jpo */;
383          }          }
384          return 0;          return 0;
# Line 456  SLJIT_API_FUNC_ATTRIBUTE void* sljit_gen Line 457  SLJIT_API_FUNC_ATTRIBUTE void* sljit_gen
457          struct sljit_const *const_;          struct sljit_const *const_;
458    
459          CHECK_ERROR_PTR();          CHECK_ERROR_PTR();
460          check_sljit_generate_code(compiler);          CHECK_PTR(check_sljit_generate_code(compiler));
461          reverse_buf(compiler);          reverse_buf(compiler);
462    
463          /* Second code generation pass. */          /* Second code generation pass. */
# Line 724  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 725  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
725  #endif  #endif
726    
727          CHECK_ERROR();          CHECK_ERROR();
728          check_sljit_emit_op0(compiler, op);          CHECK(check_sljit_emit_op0(compiler, op));
729    
730          switch (GET_OPCODE(op)) {          switch (GET_OPCODE(op)) {
731          case SLJIT_BREAKPOINT:          case SLJIT_BREAKPOINT:
# Line 739  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 740  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
740                  INC_SIZE(1);                  INC_SIZE(1);
741                  *inst = NOP;                  *inst = NOP;
742                  break;                  break;
743          case SLJIT_UMUL:          case SLJIT_LUMUL:
744          case SLJIT_SMUL:          case SLJIT_LSMUL:
745          case SLJIT_UDIV:          case SLJIT_LUDIV:
746          case SLJIT_SDIV:          case SLJIT_LSDIV:
747                  compiler->flags_saved = 0;                  compiler->flags_saved = 0;
748  #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)  #if (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
749  #ifdef _WIN64  #ifdef _WIN64
# Line 762  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 763  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
763  #endif  #endif
764    
765                  op = GET_OPCODE(op);                  op = GET_OPCODE(op);
766                  if (op == SLJIT_UDIV) {                  if (op == SLJIT_LUDIV) {
767  #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) || defined(_WIN64)  #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) || defined(_WIN64)
768                          EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_R1, 0);                          EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_R1, 0);
769                          inst = emit_x86_instruction(compiler, 1, SLJIT_R1, 0, SLJIT_R1, 0);                          inst = emit_x86_instruction(compiler, 1, SLJIT_R1, 0, SLJIT_R1, 0);
# Line 773  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 774  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
774                          *inst = XOR_r_rm;                          *inst = XOR_r_rm;
775                  }                  }
776    
777                  if (op == SLJIT_SDIV) {                  if (op == SLJIT_LSDIV) {
778  #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) || defined(_WIN64)  #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32) || defined(_WIN64)
779                          EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_R1, 0);                          EMIT_MOV(compiler, TMP_REG1, 0, SLJIT_R1, 0);
780  #endif  #endif
# Line 804  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 805  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
805                  FAIL_IF(!inst);                  FAIL_IF(!inst);
806                  INC_SIZE(2);                  INC_SIZE(2);
807                  *inst++ = GROUP_F7;                  *inst++ = GROUP_F7;
808                  *inst = MOD_REG | ((op >= SLJIT_UDIV) ? reg_map[TMP_REG1] : reg_map[SLJIT_R1]);                  *inst = MOD_REG | ((op >= SLJIT_LUDIV) ? reg_map[TMP_REG1] : reg_map[SLJIT_R1]);
809  #else  #else
810  #ifdef _WIN64  #ifdef _WIN64
811                  size = (!compiler->mode32 || op >= SLJIT_UDIV) ? 3 : 2;                  size = (!compiler->mode32 || op >= SLJIT_LUDIV) ? 3 : 2;
812  #else  #else
813                  size = (!compiler->mode32) ? 3 : 2;                  size = (!compiler->mode32) ? 3 : 2;
814  #endif  #endif
# Line 816  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 817  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
817                  INC_SIZE(size);                  INC_SIZE(size);
818  #ifdef _WIN64  #ifdef _WIN64
819                  if (!compiler->mode32)                  if (!compiler->mode32)
820                          *inst++ = REX_W | ((op >= SLJIT_UDIV) ? REX_B : 0);                          *inst++ = REX_W | ((op >= SLJIT_LUDIV) ? REX_B : 0);
821                  else if (op >= SLJIT_UDIV)                  else if (op >= SLJIT_LUDIV)
822                          *inst++ = REX_B;                          *inst++ = REX_B;
823                  *inst++ = GROUP_F7;                  *inst++ = GROUP_F7;
824                  *inst = MOD_REG | ((op >= SLJIT_UDIV) ? reg_lmap[TMP_REG1] : reg_lmap[SLJIT_R1]);                  *inst = MOD_REG | ((op >= SLJIT_LUDIV) ? reg_lmap[TMP_REG1] : reg_lmap[SLJIT_R1]);
825  #else  #else
826                  if (!compiler->mode32)                  if (!compiler->mode32)
827                          *inst++ = REX_W;                          *inst++ = REX_W;
# Line 829  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 830  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
830  #endif  #endif
831  #endif  #endif
832                  switch (op) {                  switch (op) {
833                  case SLJIT_UMUL:                  case SLJIT_LUMUL:
834                          *inst |= MUL;                          *inst |= MUL;
835                          break;                          break;
836                  case SLJIT_SMUL:                  case SLJIT_LSMUL:
837                          *inst |= IMUL;                          *inst |= IMUL;
838                          break;                          break;
839                  case SLJIT_UDIV:                  case SLJIT_LUDIV:
840                          *inst |= DIV;                          *inst |= DIV;
841                          break;                          break;
842                  case SLJIT_SDIV:                  case SLJIT_LSDIV:
843                          *inst |= IDIV;                          *inst |= IDIV;
844                          break;                          break;
845                  }                  }
# Line 1258  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1259  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1259  #endif  #endif
1260    
1261          CHECK_ERROR();          CHECK_ERROR();
1262          check_sljit_emit_op1(compiler, op, dst, dstw, src, srcw);          CHECK(check_sljit_emit_op1(compiler, op, dst, dstw, src, srcw));
1263          ADJUST_LOCAL_OFFSET(dst, dstw);          ADJUST_LOCAL_OFFSET(dst, dstw);
1264          ADJUST_LOCAL_OFFSET(src, srcw);          ADJUST_LOCAL_OFFSET(src, srcw);
1265    
# Line 1743  static sljit_si emit_mul(struct sljit_co Line 1744  static sljit_si emit_mul(struct sljit_co
1744                          *(sljit_si*)inst = (sljit_si)src2w;                          *(sljit_si*)inst = (sljit_si)src2w;
1745                  }                  }
1746                  else {                  else {
1747                          EMIT_MOV(compiler, TMP_REG2, 0, SLJIT_IMM, src1w);                          EMIT_MOV(compiler, TMP_REG2, 0, SLJIT_IMM, src2w);
1748                          if (dst_r != src1)                          if (dst_r != src1)
1749                                  EMIT_MOV(compiler, dst_r, 0, src1, src1w);                                  EMIT_MOV(compiler, dst_r, 0, src1, src1w);
1750                          inst = emit_x86_instruction(compiler, 2, dst_r, 0, TMP_REG2, 0);                          inst = emit_x86_instruction(compiler, 2, dst_r, 0, TMP_REG2, 0);
# Line 2118  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2119  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2119          sljit_si src2, sljit_sw src2w)          sljit_si src2, sljit_sw src2w)
2120  {  {
2121          CHECK_ERROR();          CHECK_ERROR();
2122          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));
2123          ADJUST_LOCAL_OFFSET(dst, dstw);          ADJUST_LOCAL_OFFSET(dst, dstw);
2124          ADJUST_LOCAL_OFFSET(src1, src1w);          ADJUST_LOCAL_OFFSET(src1, src1w);
2125          ADJUST_LOCAL_OFFSET(src2, src2w);          ADJUST_LOCAL_OFFSET(src2, src2w);
# Line 2209  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2210  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2210    
2211  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)
2212  {  {
2213          check_sljit_get_register_index(reg);          CHECK_REG_INDEX(check_sljit_get_register_index(reg));
2214  #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)  #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
2215          if (reg >= SLJIT_R3 && reg <= SLJIT_R6)          if (reg >= SLJIT_R3 && reg <= SLJIT_R6)
2216                  return -1;                  return -1;
# Line 2219  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2220  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2220    
2221  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)
2222  {  {
2223          check_sljit_get_float_register_index(reg);          CHECK_REG_INDEX(check_sljit_get_float_register_index(reg));
2224          return reg;          return reg;
2225  }  }
2226    
# Line 2229  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2230  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2230          sljit_ub *inst;          sljit_ub *inst;
2231    
2232          CHECK_ERROR();          CHECK_ERROR();
2233          check_sljit_emit_op_custom(compiler, instruction, size);          CHECK(check_sljit_emit_op_custom(compiler, instruction, size));
         SLJIT_ASSERT(size > 0 && size < 16);  
2234    
2235          inst = (sljit_ub*)ensure_buf(compiler, 1 + size);          inst = (sljit_ub*)ensure_buf(compiler, 1 + size);
2236          FAIL_IF(!inst);          FAIL_IF(!inst);
# Line 2391  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2391  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2391          CHECK_ERROR();          CHECK_ERROR();
2392          SELECT_FOP1_OPERATION_WITH_CHECKS(compiler, op, dst, dstw, src, srcw);          SELECT_FOP1_OPERATION_WITH_CHECKS(compiler, op, dst, dstw, src, srcw);
2393    
2394          if (GET_OPCODE(op) == SLJIT_MOVD) {          if (GET_OPCODE(op) == SLJIT_DMOV) {
2395                  if (FAST_IS_REG(dst))                  if (FAST_IS_REG(dst))
2396                          return emit_sse2_load(compiler, op & SLJIT_SINGLE_OP, dst, src, srcw);                          return emit_sse2_load(compiler, op & SLJIT_SINGLE_OP, dst, src, srcw);
2397                  if (FAST_IS_REG(src))                  if (FAST_IS_REG(src))
# Line 2430  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2430  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2430          }          }
2431    
2432          switch (GET_OPCODE(op)) {          switch (GET_OPCODE(op)) {
2433          case SLJIT_NEGD:          case SLJIT_DNEG:
2434                  FAIL_IF(emit_sse2_logic(compiler, XORPD_x_xm, 1, dst_r, SLJIT_MEM0(), (sljit_sw)(op & SLJIT_SINGLE_OP ? sse2_buffer : sse2_buffer + 8)));                  FAIL_IF(emit_sse2_logic(compiler, XORPD_x_xm, 1, dst_r, SLJIT_MEM0(), (sljit_sw)(op & SLJIT_SINGLE_OP ? sse2_buffer : sse2_buffer + 8)));
2435                  break;                  break;
2436    
2437          case SLJIT_ABSD:          case SLJIT_DABS:
2438                  FAIL_IF(emit_sse2_logic(compiler, ANDPD_x_xm, 1, dst_r, SLJIT_MEM0(), (sljit_sw)(op & SLJIT_SINGLE_OP ? sse2_buffer + 4 : sse2_buffer + 12)));                  FAIL_IF(emit_sse2_logic(compiler, ANDPD_x_xm, 1, dst_r, SLJIT_MEM0(), (sljit_sw)(op & SLJIT_SINGLE_OP ? sse2_buffer + 4 : sse2_buffer + 12)));
2439                  break;                  break;
2440          }          }
# Line 2452  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2452  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2452          sljit_si dst_r;          sljit_si dst_r;
2453    
2454          CHECK_ERROR();          CHECK_ERROR();
2455          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));
2456          ADJUST_LOCAL_OFFSET(dst, dstw);          ADJUST_LOCAL_OFFSET(dst, dstw);
2457          ADJUST_LOCAL_OFFSET(src1, src1w);          ADJUST_LOCAL_OFFSET(src1, src1w);
2458          ADJUST_LOCAL_OFFSET(src2, src2w);          ADJUST_LOCAL_OFFSET(src2, src2w);
# Line 2465  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2465  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2465                  dst_r = dst;                  dst_r = dst;
2466                  if (dst == src1)                  if (dst == src1)
2467                          ; /* Do nothing here. */                          ; /* Do nothing here. */
2468                  else if (dst == src2 && (op == SLJIT_ADDD || op == SLJIT_MULD)) {                  else if (dst == src2 && (op == SLJIT_DADD || op == SLJIT_DMUL)) {
2469                          /* Swap arguments. */                          /* Swap arguments. */
2470                          src2 = src1;                          src2 = src1;
2471                          src2w = src1w;                          src2w = src1w;
# Line 2483  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2483  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2483          }          }
2484    
2485          switch (GET_OPCODE(op)) {          switch (GET_OPCODE(op)) {
2486          case SLJIT_ADDD:          case SLJIT_DADD:
2487                  FAIL_IF(emit_sse2(compiler, ADDSD_x_xm, op & SLJIT_SINGLE_OP, dst_r, src2, src2w));                  FAIL_IF(emit_sse2(compiler, ADDSD_x_xm, op & SLJIT_SINGLE_OP, dst_r, src2, src2w));
2488                  break;                  break;
2489    
2490          case SLJIT_SUBD:          case SLJIT_DSUB:
2491                  FAIL_IF(emit_sse2(compiler, SUBSD_x_xm, op & SLJIT_SINGLE_OP, dst_r, src2, src2w));                  FAIL_IF(emit_sse2(compiler, SUBSD_x_xm, op & SLJIT_SINGLE_OP, dst_r, src2, src2w));
2492                  break;                  break;
2493    
2494          case SLJIT_MULD:          case SLJIT_DMUL:
2495                  FAIL_IF(emit_sse2(compiler, MULSD_x_xm, op & SLJIT_SINGLE_OP, dst_r, src2, src2w));                  FAIL_IF(emit_sse2(compiler, MULSD_x_xm, op & SLJIT_SINGLE_OP, dst_r, src2, src2w));
2496                  break;                  break;
2497    
2498          case SLJIT_DIVD:          case SLJIT_DDIV:
2499                  FAIL_IF(emit_sse2(compiler, DIVSD_x_xm, op & SLJIT_SINGLE_OP, dst_r, src2, src2w));                  FAIL_IF(emit_sse2(compiler, DIVSD_x_xm, op & SLJIT_SINGLE_OP, dst_r, src2, src2w));
2500                  break;                  break;
2501          }          }
# Line 2515  SLJIT_API_FUNC_ATTRIBUTE struct sljit_la Line 2515  SLJIT_API_FUNC_ATTRIBUTE struct sljit_la
2515          struct sljit_label *label;          struct sljit_label *label;
2516    
2517          CHECK_ERROR_PTR();          CHECK_ERROR_PTR();
2518          check_sljit_emit_label(compiler);          CHECK_PTR(check_sljit_emit_label(compiler));
2519    
2520          /* We should restore the flags before the label,          /* We should restore the flags before the label,
2521             since other taken jumps has their own flags as well. */             since other taken jumps has their own flags as well. */
# Line 2544  SLJIT_API_FUNC_ATTRIBUTE struct sljit_ju Line 2544  SLJIT_API_FUNC_ATTRIBUTE struct sljit_ju
2544          struct sljit_jump *jump;          struct sljit_jump *jump;
2545    
2546          CHECK_ERROR_PTR();          CHECK_ERROR_PTR();
2547          check_sljit_emit_jump(compiler, type);          CHECK_PTR(check_sljit_emit_jump(compiler, type));
2548    
2549          if (SLJIT_UNLIKELY(compiler->flags_saved)) {          if (SLJIT_UNLIKELY(compiler->flags_saved)) {
2550                  if ((type & 0xff) <= SLJIT_JUMP)                  if ((type & 0xff) <= SLJIT_JUMP)
# Line 2581  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2581  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2581          struct sljit_jump *jump;          struct sljit_jump *jump;
2582    
2583          CHECK_ERROR();          CHECK_ERROR();
2584          check_sljit_emit_ijump(compiler, type, src, srcw);          CHECK(check_sljit_emit_ijump(compiler, type, src, srcw));
2585          ADJUST_LOCAL_OFFSET(src, srcw);          ADJUST_LOCAL_OFFSET(src, srcw);
2586    
2587          CHECK_EXTRA_REGS(src, srcw, (void)0);          CHECK_EXTRA_REGS(src, srcw, (void)0);
# Line 2660  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2660  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2660  #endif  #endif
2661    
2662          CHECK_ERROR();          CHECK_ERROR();
2663          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));
2664    
2665          if (dst == SLJIT_UNUSED)          if (dst == SLJIT_UNUSED)
2666                  return SLJIT_SUCCESS;                  return SLJIT_SUCCESS;
# Line 2670  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2670  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2670          if (SLJIT_UNLIKELY(compiler->flags_saved))          if (SLJIT_UNLIKELY(compiler->flags_saved))
2671                  FAIL_IF(emit_restore_flags(compiler, op & SLJIT_KEEP_FLAGS));                  FAIL_IF(emit_restore_flags(compiler, op & SLJIT_KEEP_FLAGS));
2672    
2673            type &= 0xff;
2674          /* setcc = jcc + 0x10. */          /* setcc = jcc + 0x10. */
2675          cond_set = get_jump_code(type) + 0x10;          cond_set = get_jump_code(type) + 0x10;
2676    
# Line 2711  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2712  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2712                  compiler->mode32 = GET_OPCODE(op) != SLJIT_MOV;                  compiler->mode32 = GET_OPCODE(op) != SLJIT_MOV;
2713                  return emit_mov(compiler, dst, dstw, TMP_REG1, 0);                  return emit_mov(compiler, dst, dstw, TMP_REG1, 0);
2714          }          }
2715  #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) || (defined SLJIT_DEBUG && SLJIT_DEBUG)  #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \
2716                    || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS)
2717          compiler->skip_checks = 1;          compiler->skip_checks = 1;
2718  #endif  #endif
2719          return sljit_emit_op2(compiler, op, dst, dstw, dst, dstw, TMP_REG1, 0);          return sljit_emit_op2(compiler, op, dst, dstw, dst, dstw, TMP_REG1, 0);
# Line 2821  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2823  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2823          if (GET_OPCODE(op) < SLJIT_ADD)          if (GET_OPCODE(op) < SLJIT_ADD)
2824                  return emit_mov(compiler, dst, dstw, TMP_REG1, 0);                  return emit_mov(compiler, dst, dstw, TMP_REG1, 0);
2825    
2826  #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) || (defined SLJIT_DEBUG && SLJIT_DEBUG)  #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) \
2827                    || (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS)
2828          compiler->skip_checks = 1;          compiler->skip_checks = 1;
2829  #endif  #endif
2830          return sljit_emit_op2(compiler, op, dst_save, dstw_save, dst_save, dstw_save, TMP_REG1, 0);          return sljit_emit_op2(compiler, op, dst_save, dstw_save, dst_save, dstw_save, TMP_REG1, 0);
# Line 2831  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 2834  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
2834  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_local_base(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw, sljit_sw offset)  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_get_local_base(struct sljit_compiler *compiler, sljit_si dst, sljit_sw dstw, sljit_sw offset)
2835  {  {
2836          CHECK_ERROR();          CHECK_ERROR();
2837          check_sljit_get_local_base(compiler, dst, dstw, offset);          CHECK(check_sljit_get_local_base(compiler, dst, dstw, offset));
2838          ADJUST_LOCAL_OFFSET(dst, dstw);          ADJUST_LOCAL_OFFSET(dst, dstw);
2839    
2840          CHECK_EXTRA_REGS(dst, dstw, (void)0);          CHECK_EXTRA_REGS(dst, dstw, (void)0);
# Line 2868  SLJIT_API_FUNC_ATTRIBUTE struct sljit_co Line 2871  SLJIT_API_FUNC_ATTRIBUTE struct sljit_co
2871  #endif  #endif
2872    
2873          CHECK_ERROR_PTR();          CHECK_ERROR_PTR();
2874          check_sljit_emit_const(compiler, dst, dstw, init_value);          CHECK_PTR(check_sljit_emit_const(compiler, dst, dstw, init_value));
2875          ADJUST_LOCAL_OFFSET(dst, dstw);          ADJUST_LOCAL_OFFSET(dst, dstw);
2876    
2877          CHECK_EXTRA_REGS(dst, dstw, (void)0);          CHECK_EXTRA_REGS(dst, dstw, (void)0);

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

  ViewVC Help
Powered by ViewVC 1.1.5