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

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

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

revision 1452 by zherczeg, Fri Mar 15 06:58:31 2013 UTC revision 1453 by zherczeg, Thu Jan 30 06:10:21 2014 UTC
# Line 198  static SLJIT_INLINE sljit_ins invert_bra Line 198  static SLJIT_INLINE sljit_ins invert_bra
198          return (flags & IS_BIT26_COND) ? (1 << 26) : (1 << 16);          return (flags & IS_BIT26_COND) ? (1 << 26) : (1 << 16);
199  }  }
200    
201  static SLJIT_INLINE sljit_ins* optimize_jump(struct sljit_jump *jump, sljit_ins *code_ptr, sljit_ins *code)  static SLJIT_INLINE sljit_ins* detect_jump_type(struct sljit_jump *jump, sljit_ins *code_ptr, sljit_ins *code)
202  {  {
203          sljit_sw diff;          sljit_sw diff;
204          sljit_uw target_addr;          sljit_uw target_addr;
# Line 237  static SLJIT_INLINE sljit_ins* optimize_ Line 237  static SLJIT_INLINE sljit_ins* optimize_
237                          return inst;                          return inst;
238                  }                  }
239          }          }
240            else {
241                    diff = ((sljit_sw)target_addr - (sljit_sw)(inst + 1)) >> 2;
242                    if (diff <= SIMM_MAX && diff >= SIMM_MIN) {
243                            jump->flags |= PATCH_B;
244    
245          diff = ((sljit_sw)target_addr - (sljit_sw)(inst + 1)) >> 2;                          if (!(jump->flags & IS_COND)) {
246          if (diff <= SIMM_MAX && diff >= SIMM_MIN) {                                  inst[0] = (jump->flags & IS_JAL) ? BAL : B;
247                  jump->flags |= PATCH_B;                                  inst[1] = NOP;
248                                    return inst + 1;
249                  if (!(jump->flags & IS_COND)) {                          }
250                          inst[0] = (jump->flags & IS_JAL) ? BAL : B;                          inst[0] = inst[0] ^ invert_branch(jump->flags);
251                          inst[1] = NOP;                          inst[1] = NOP;
252                            jump->addr -= sizeof(sljit_ins);
253                          return inst + 1;                          return inst + 1;
254                  }                  }
                 inst[0] = inst[0] ^ invert_branch(jump->flags);  
                 inst[1] = NOP;  
                 jump->addr -= sizeof(sljit_ins);  
                 return inst + 1;  
255          }          }
256    
257          if (jump->flags & IS_COND) {          if (jump->flags & IS_COND) {
258                  if ((target_addr & ~0xfffffff) == ((jump->addr + 3 * sizeof(sljit_ins)) & ~0xfffffff)) {                  if ((jump->flags & IS_MOVABLE) && (target_addr & ~0xfffffff) == ((jump->addr + 2 * sizeof(sljit_ins)) & ~0xfffffff)) {
259                            jump->flags |= PATCH_J;
260                            saved_inst = inst[0];
261                            inst[0] = inst[-1];
262                            inst[-1] = (saved_inst & 0xffff0000) | 3;
263                            inst[1] = J;
264                            inst[2] = NOP;
265                            return inst + 2;
266                    }
267                    else if ((target_addr & ~0xfffffff) == ((jump->addr + 3 * sizeof(sljit_ins)) & ~0xfffffff)) {
268                          jump->flags |= PATCH_J;                          jump->flags |= PATCH_J;
269                          inst[0] = (inst[0] & 0xffff0000) | 3;                          inst[0] = (inst[0] & 0xffff0000) | 3;
270                          inst[1] = NOP;                          inst[1] = NOP;
# Line 267  static SLJIT_INLINE sljit_ins* optimize_ Line 277  static SLJIT_INLINE sljit_ins* optimize_
277          }          }
278    
279          /* J instuctions. */          /* J instuctions. */
280          if (jump->flags & IS_MOVABLE) {          if ((jump->flags & IS_MOVABLE) && (target_addr & ~0xfffffff) == (jump->addr & ~0xfffffff)) {
281                  if ((target_addr & ~0xfffffff) == (jump->addr & ~0xfffffff)) {                  jump->flags |= PATCH_J;
282                          jump->flags |= PATCH_J;                  inst[0] = inst[-1];
283                          inst[0] = inst[-1];                  inst[-1] = (jump->flags & IS_JAL) ? JAL : J;
284                          inst[-1] = (jump->flags & IS_JAL) ? JAL : J;                  jump->addr -= sizeof(sljit_ins);
285                          jump->addr -= sizeof(sljit_ins);                  return inst;
                         return inst;  
                 }  
286          }          }
287    
288          if ((target_addr & ~0xfffffff) == ((jump->addr + sizeof(sljit_ins)) & ~0xfffffff)) {          if ((target_addr & ~0xfffffff) == ((jump->addr + sizeof(sljit_ins)) & ~0xfffffff)) {
# Line 342  SLJIT_API_FUNC_ATTRIBUTE void* sljit_gen Line 350  SLJIT_API_FUNC_ATTRIBUTE void* sljit_gen
350  #else  #else
351  #error "Implementation required"  #error "Implementation required"
352  #endif  #endif
353                                  code_ptr = optimize_jump(jump, code_ptr, code);                                  code_ptr = detect_jump_type(jump, code_ptr, code);
354                                  jump = jump->next;                                  jump = jump->next;
355                          }                          }
356                          if (const_ && const_->addr == word_count) {                          if (const_ && const_->addr == word_count) {
# Line 612  static sljit_si getput_arg_fast(struct s Line 620  static sljit_si getput_arg_fast(struct s
620  {  {
621          SLJIT_ASSERT(arg & SLJIT_MEM);          SLJIT_ASSERT(arg & SLJIT_MEM);
622    
623          if ((!(flags & WRITE_BACK) || !(arg & 0xf)) && !(arg & 0xf0) && argw <= SIMM_MAX && argw >= SIMM_MIN) {          if ((!(flags & WRITE_BACK) || !(arg & REG_MASK)) && !(arg & OFFS_REG_MASK) && argw <= SIMM_MAX && argw >= SIMM_MIN) {
624                  /* Works for both absoulte and relative addresses. */                  /* Works for both absoulte and relative addresses. */
625                  if (SLJIT_UNLIKELY(flags & ARG_TEST))                  if (SLJIT_UNLIKELY(flags & ARG_TEST))
626                          return 1;                          return 1;
627                  FAIL_IF(push_inst(compiler, data_transfer_insts[flags & MEM_MASK] | S(arg & 0xf)                  FAIL_IF(push_inst(compiler, data_transfer_insts[flags & MEM_MASK] | S(arg & REG_MASK)
628                          | TA(reg_ar) | IMM(argw), ((flags & MEM_MASK) <= GPR_REG && (flags & LOAD_DATA)) ? reg_ar : MOVABLE_INS));                          | TA(reg_ar) | IMM(argw), ((flags & MEM_MASK) <= GPR_REG && (flags & LOAD_DATA)) ? reg_ar : MOVABLE_INS));
629                  return -1;                  return -1;
630          }          }
# Line 631  static sljit_si can_cache(sljit_si arg, Line 639  static sljit_si can_cache(sljit_si arg,
639          SLJIT_ASSERT((arg & SLJIT_MEM) && (next_arg & SLJIT_MEM));          SLJIT_ASSERT((arg & SLJIT_MEM) && (next_arg & SLJIT_MEM));
640    
641          /* Simple operation except for updates. */          /* Simple operation except for updates. */
642          if (arg & 0xf0) {          if (arg & OFFS_REG_MASK) {
643                  argw &= 0x3;                  argw &= 0x3;
644                  next_argw &= 0x3;                  next_argw &= 0x3;
645                  if (argw && argw == next_argw && (arg == next_arg || (arg & 0xf0) == (next_arg & 0xf0)))                  if (argw && argw == next_argw && (arg == next_arg || (arg & OFFS_REG_MASK) == (next_arg & OFFS_REG_MASK)))
646                          return 1;                          return 1;
647                  return 0;                  return 0;
648          }          }
# Line 666  static sljit_si getput_arg(struct sljit_ Line 674  static sljit_si getput_arg(struct sljit_
674                  tmp_ar = DR(TMP_REG1);                  tmp_ar = DR(TMP_REG1);
675                  delay_slot = MOVABLE_INS;                  delay_slot = MOVABLE_INS;
676          }          }
677          base = arg & 0xf;          base = arg & REG_MASK;
678    
679          if (SLJIT_UNLIKELY(arg & 0xf0)) {          if (SLJIT_UNLIKELY(arg & OFFS_REG_MASK)) {
680                  argw &= 0x3;                  argw &= 0x3;
681                  if ((flags & WRITE_BACK) && reg_ar == DR(base)) {                  if ((flags & WRITE_BACK) && reg_ar == DR(base)) {
682                          SLJIT_ASSERT(!(flags & LOAD_DATA) && DR(TMP_REG1) != reg_ar);                          SLJIT_ASSERT(!(flags & LOAD_DATA) && DR(TMP_REG1) != reg_ar);
# Line 681  static sljit_si getput_arg(struct sljit_ Line 689  static sljit_si getput_arg(struct sljit_
689                          if (!(flags & WRITE_BACK)) {                          if (!(flags & WRITE_BACK)) {
690                                  if (arg == compiler->cache_arg)                                  if (arg == compiler->cache_arg)
691                                          return push_inst(compiler, data_transfer_insts[flags & MEM_MASK] | S(TMP_REG3) | TA(reg_ar), delay_slot);                                          return push_inst(compiler, data_transfer_insts[flags & MEM_MASK] | S(TMP_REG3) | TA(reg_ar), delay_slot);
692                                  if ((SLJIT_MEM | (arg & 0xf0)) == compiler->cache_arg) {                                  if ((SLJIT_MEM | (arg & OFFS_REG_MASK)) == compiler->cache_arg) {
693                                          if (arg == next_arg && argw == (next_argw & 0x3)) {                                          if (arg == next_arg && argw == (next_argw & 0x3)) {
694                                                  compiler->cache_arg = arg;                                                  compiler->cache_arg = arg;
695                                                  compiler->cache_argw = argw;                                                  compiler->cache_argw = argw;
# Line 693  static sljit_si getput_arg(struct sljit_ Line 701  static sljit_si getput_arg(struct sljit_
701                                  }                                  }
702                          }                          }
703                          else {                          else {
704                                  if ((SLJIT_MEM | (arg & 0xf0)) == compiler->cache_arg) {                                  if ((SLJIT_MEM | (arg & OFFS_REG_MASK)) == compiler->cache_arg) {
705                                          FAIL_IF(push_inst(compiler, ADDU_W | S(base) | T(TMP_REG3) | D(base), DR(base)));                                          FAIL_IF(push_inst(compiler, ADDU_W | S(base) | T(TMP_REG3) | D(base), DR(base)));
706                                          return push_inst(compiler, data_transfer_insts[flags & MEM_MASK] | S(base) | TA(reg_ar), delay_slot);                                          return push_inst(compiler, data_transfer_insts[flags & MEM_MASK] | S(base) | TA(reg_ar), delay_slot);
707                                  }                                  }
# Line 701  static sljit_si getput_arg(struct sljit_ Line 709  static sljit_si getput_arg(struct sljit_
709                  }                  }
710    
711                  if (SLJIT_UNLIKELY(argw)) {                  if (SLJIT_UNLIKELY(argw)) {
712                          compiler->cache_arg = SLJIT_MEM | (arg & 0xf0);                          compiler->cache_arg = SLJIT_MEM | (arg & OFFS_REG_MASK);
713                          compiler->cache_argw = argw;                          compiler->cache_argw = argw;
714                          FAIL_IF(push_inst(compiler, SLL_W | T((arg >> 4) & 0xf) | D(TMP_REG3) | SH_IMM(argw), DR(TMP_REG3)));                          FAIL_IF(push_inst(compiler, SLL_W | T(OFFS_REG(arg)) | D(TMP_REG3) | SH_IMM(argw), DR(TMP_REG3)));
715                  }                  }
716    
717                  if (!(flags & WRITE_BACK)) {                  if (!(flags & WRITE_BACK)) {
718                          if (arg == next_arg && argw == (next_argw & 0x3)) {                          if (arg == next_arg && argw == (next_argw & 0x3)) {
719                                  compiler->cache_arg = arg;                                  compiler->cache_arg = arg;
720                                  compiler->cache_argw = argw;                                  compiler->cache_argw = argw;
721                                  FAIL_IF(push_inst(compiler, ADDU_W | S(base) | T(!argw ? ((arg >> 4) & 0xf) : TMP_REG3) | D(TMP_REG3), DR(TMP_REG3)));                                  FAIL_IF(push_inst(compiler, ADDU_W | S(base) | T(!argw ? OFFS_REG(arg) : TMP_REG3) | D(TMP_REG3), DR(TMP_REG3)));
722                                  tmp_ar = DR(TMP_REG3);                                  tmp_ar = DR(TMP_REG3);
723                          }                          }
724                          else                          else
725                                  FAIL_IF(push_inst(compiler, ADDU_W | S(base) | T(!argw ? ((arg >> 4) & 0xf) : TMP_REG3) | DA(tmp_ar), tmp_ar));                                  FAIL_IF(push_inst(compiler, ADDU_W | S(base) | T(!argw ? OFFS_REG(arg) : TMP_REG3) | DA(tmp_ar), tmp_ar));
726                          return push_inst(compiler, data_transfer_insts[flags & MEM_MASK] | SA(tmp_ar) | TA(reg_ar), delay_slot);                          return push_inst(compiler, data_transfer_insts[flags & MEM_MASK] | SA(tmp_ar) | TA(reg_ar), delay_slot);
727                  }                  }
728                  FAIL_IF(push_inst(compiler, ADDU_W | S(base) | T(!argw ? ((arg >> 4) & 0xf) : TMP_REG3) | D(base), DR(base)));                  FAIL_IF(push_inst(compiler, ADDU_W | S(base) | T(!argw ? OFFS_REG(arg) : TMP_REG3) | D(base), DR(base)));
729                  return push_inst(compiler, data_transfer_insts[flags & MEM_MASK] | S(base) | TA(reg_ar), delay_slot);                  return push_inst(compiler, data_transfer_insts[flags & MEM_MASK] | S(base) | TA(reg_ar), delay_slot);
730          }          }
731    
# Line 829  static sljit_si emit_op(struct sljit_com Line 837  static sljit_si emit_op(struct sljit_com
837                  if (GET_FLAGS(op))                  if (GET_FLAGS(op))
838                          flags |= UNUSED_DEST;                          flags |= UNUSED_DEST;
839          }          }
840          else if (dst <= TMP_REG3) {          else if (FAST_IS_REG(dst)) {
841                  dst_r = dst;                  dst_r = dst;
842                  flags |= REG_DEST;                  flags |= REG_DEST;
843                  if (op >= SLJIT_MOV && op <= SLJIT_MOVU_SI)                  if (op >= SLJIT_MOV && op <= SLJIT_MOVU_SI)
# Line 862  static sljit_si emit_op(struct sljit_com Line 870  static sljit_si emit_op(struct sljit_com
870          }          }
871    
872          /* Source 1. */          /* Source 1. */
873          if (src1 <= TMP_REG3) {          if (FAST_IS_REG(src1)) {
874                  src1_r = src1;                  src1_r = src1;
875                  flags |= REG1_SOURCE;                  flags |= REG1_SOURCE;
876          }          }
# Line 883  static sljit_si emit_op(struct sljit_com Line 891  static sljit_si emit_op(struct sljit_com
891          }          }
892    
893          /* Source 2. */          /* Source 2. */
894          if (src2 <= TMP_REG3) {          if (FAST_IS_REG(src2)) {
895                  src2_r = src2;                  src2_r = src2;
896                  flags |= REG2_SOURCE;                  flags |= REG2_SOURCE;
897                  if (!(flags & REG_DEST) && op >= SLJIT_MOV && op <= SLJIT_MOVU_SI)                  if (!(flags & REG_DEST) && op >= SLJIT_MOV && op <= SLJIT_MOVU_SI)
# Line 1150  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1158  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1158          compiler->cache_argw = 0;          compiler->cache_argw = 0;
1159    
1160          if (GET_OPCODE(op) == SLJIT_CMPD) {          if (GET_OPCODE(op) == SLJIT_CMPD) {
1161                  if (dst > SLJIT_FLOAT_REG6) {                  if (dst & SLJIT_MEM) {
1162                          FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, dst, dstw, src, srcw));                          FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, dst, dstw, src, srcw));
1163                          dst = TMP_FREG1;                          dst = TMP_FREG1;
1164                  }                  }
1165                  else                  else
1166                          dst <<= 1;                          dst <<= 1;
1167    
1168                  if (src > SLJIT_FLOAT_REG6) {                  if (src & SLJIT_MEM) {
1169                          FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src, srcw, 0, 0));                          FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src, srcw, 0, 0));
1170                          src = TMP_FREG2;                          src = TMP_FREG2;
1171                  }                  }
# Line 1185  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1193  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1193                  return push_inst(compiler, C_UN_fmt | FMT(op) | FT(src) | FS(dst), FCSR_FCC);                  return push_inst(compiler, C_UN_fmt | FMT(op) | FT(src) | FS(dst), FCSR_FCC);
1194          }          }
1195    
1196          dst_fr = (dst > SLJIT_FLOAT_REG6) ? TMP_FREG1 : (dst << 1);          dst_fr = FAST_IS_REG(dst) ? (dst << 1) : TMP_FREG1;
1197    
1198          if (src > SLJIT_FLOAT_REG6) {          if (src & SLJIT_MEM) {
1199                  FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, dst_fr, src, srcw, dst, dstw));                  FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(op) | LOAD_DATA, dst_fr, src, srcw, dst, dstw));
1200                  src = dst_fr;                  src = dst_fr;
1201          }          }
# Line 1229  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1237  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1237          compiler->cache_arg = 0;          compiler->cache_arg = 0;
1238          compiler->cache_argw = 0;          compiler->cache_argw = 0;
1239    
1240          dst_fr = (dst > SLJIT_FLOAT_REG6) ? TMP_FREG2 : (dst << 1);          dst_fr = FAST_IS_REG(dst) ? (dst << 1) : TMP_FREG2;
1241    
1242          if (src1 > SLJIT_FLOAT_REG6) {          if (src1 & SLJIT_MEM) {
1243                  if (getput_arg_fast(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w)) {                  if (getput_arg_fast(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG1, src1, src1w)) {
1244                          FAIL_IF(compiler->error);                          FAIL_IF(compiler->error);
1245                          src1 = TMP_FREG1;                          src1 = TMP_FREG1;
# Line 1241  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1249  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1249          else          else
1250                  src1 <<= 1;                  src1 <<= 1;
1251    
1252          if (src2 > SLJIT_FLOAT_REG6) {          if (src2 & SLJIT_MEM) {
1253                  if (getput_arg_fast(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w)) {                  if (getput_arg_fast(compiler, FLOAT_DATA(op) | LOAD_DATA, TMP_FREG2, src2, src2w)) {
1254                          FAIL_IF(compiler->error);                          FAIL_IF(compiler->error);
1255                          src2 = TMP_FREG2;                          src2 = TMP_FREG2;
# Line 1309  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1317  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1317          if (dst == SLJIT_UNUSED)          if (dst == SLJIT_UNUSED)
1318                  return SLJIT_SUCCESS;                  return SLJIT_SUCCESS;
1319    
1320          if (dst <= TMP_REG3)          if (FAST_IS_REG(dst))
1321                  return push_inst(compiler, ADDU_W | SA(RETURN_ADDR_REG) | TA(0) | D(dst), DR(dst));                  return push_inst(compiler, ADDU_W | SA(RETURN_ADDR_REG) | TA(0) | D(dst), DR(dst));
1322    
1323          /* Memory. */          /* Memory. */
# Line 1322  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1330  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1330          check_sljit_emit_fast_return(compiler, src, srcw);          check_sljit_emit_fast_return(compiler, src, srcw);
1331          ADJUST_LOCAL_OFFSET(src, srcw);          ADJUST_LOCAL_OFFSET(src, srcw);
1332    
1333          if (src <= TMP_REG3)          if (FAST_IS_REG(src))
1334                  FAIL_IF(push_inst(compiler, ADDU_W | S(src) | TA(0) | DA(RETURN_ADDR_REG), RETURN_ADDR_REG));                  FAIL_IF(push_inst(compiler, ADDU_W | S(src) | TA(0) | DA(RETURN_ADDR_REG), RETURN_ADDR_REG));
1335          else if (src & SLJIT_MEM)          else if (src & SLJIT_MEM)
1336                  FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, RETURN_ADDR_REG, src, srcw));                  FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, RETURN_ADDR_REG, src, srcw));
# Line 1631  SLJIT_API_FUNC_ATTRIBUTE struct sljit_ju Line 1639  SLJIT_API_FUNC_ATTRIBUTE struct sljit_ju
1639          compiler->cache_arg = 0;          compiler->cache_arg = 0;
1640          compiler->cache_argw = 0;          compiler->cache_argw = 0;
1641    
1642          if (src1 > SLJIT_FLOAT_REG6) {          if (src1 & SLJIT_MEM) {
1643                  PTR_FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(type) | LOAD_DATA, TMP_FREG1, src1, src1w, src2, src2w));                  PTR_FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(type) | LOAD_DATA, TMP_FREG1, src1, src1w, src2, src2w));
1644                  src1 = TMP_FREG1;                  src1 = TMP_FREG1;
1645          }          }
1646          else          else
1647                  src1 <<= 1;                  src1 <<= 1;
1648    
1649          if (src2 > SLJIT_FLOAT_REG6) {          if (src2 & SLJIT_MEM) {
1650                  PTR_FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(type) | LOAD_DATA, TMP_FREG2, src2, src2w, 0, 0));                  PTR_FAIL_IF(emit_op_mem2(compiler, FLOAT_DATA(type) | LOAD_DATA, TMP_FREG2, src2, src2w, 0, 0));
1651                  src2 = TMP_FREG2;                  src2 = TMP_FREG2;
1652          }          }
# Line 1714  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1722  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1722          check_sljit_emit_ijump(compiler, type, src, srcw);          check_sljit_emit_ijump(compiler, type, src, srcw);
1723          ADJUST_LOCAL_OFFSET(src, srcw);          ADJUST_LOCAL_OFFSET(src, srcw);
1724    
1725          if (src <= TMP_REG3) {          if (FAST_IS_REG(src)) {
1726                  if (DR(src) != 4)                  if (DR(src) != 4)
1727                          src_r = src;                          src_r = src;
1728                  else                  else
# Line 1779  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1787  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1787                  return SLJIT_SUCCESS;                  return SLJIT_SUCCESS;
1788    
1789          op = GET_OPCODE(op);          op = GET_OPCODE(op);
1790          sugg_dst_ar = DR((op < SLJIT_ADD && dst <= TMP_REG3) ? dst : TMP_REG2);          sugg_dst_ar = DR((op < SLJIT_ADD && FAST_IS_REG(dst)) ? dst : TMP_REG2);
1791    
1792          compiler->cache_arg = 0;          compiler->cache_arg = 0;
1793          compiler->cache_argw = 0;          compiler->cache_argw = 0;
# Line 1877  SLJIT_API_FUNC_ATTRIBUTE struct sljit_co Line 1885  SLJIT_API_FUNC_ATTRIBUTE struct sljit_co
1885          PTR_FAIL_IF(!const_);          PTR_FAIL_IF(!const_);
1886          set_const(const_, compiler);          set_const(const_, compiler);
1887    
1888          reg = (dst <= TMP_REG3) ? dst : TMP_REG2;          reg = SLOW_IS_REG(dst) ? dst : TMP_REG2;
1889    
1890          PTR_FAIL_IF(emit_const(compiler, reg, init_value));          PTR_FAIL_IF(emit_const(compiler, reg, init_value));
1891    

Legend:
Removed from v.1452  
changed lines
  Added in v.1453

  ViewVC Help
Powered by ViewVC 1.1.5