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

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

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

revision 1195 by zherczeg, Thu Nov 1 15:21:27 2012 UTC revision 1222 by zherczeg, Mon Nov 19 08:04:03 2012 UTC
# Line 153  static SLJIT_CONST sljit_ub reg_map[SLJI Line 153  static SLJIT_CONST sljit_ub reg_map[SLJI
153     Useful for reordering instructions in the delay slot. */     Useful for reordering instructions in the delay slot. */
154  static sljit_si push_inst(struct sljit_compiler *compiler, sljit_ins ins, sljit_si delay_slot)  static sljit_si push_inst(struct sljit_compiler *compiler, sljit_ins ins, sljit_si delay_slot)
155  {  {
156            sljit_ins *ptr;
157          SLJIT_ASSERT((delay_slot & DST_INS_MASK) == UNMOVABLE_INS          SLJIT_ASSERT((delay_slot & DST_INS_MASK) == UNMOVABLE_INS
158                  || (delay_slot & DST_INS_MASK) == MOVABLE_INS                  || (delay_slot & DST_INS_MASK) == MOVABLE_INS
159                  || (delay_slot & DST_INS_MASK) == ((ins >> 25) & 0x1f));                  || (delay_slot & DST_INS_MASK) == ((ins >> 25) & 0x1f));
160          sljit_ins *ptr = (sljit_ins*)ensure_buf(compiler, sizeof(sljit_ins));          ptr = (sljit_ins*)ensure_buf(compiler, sizeof(sljit_ins));
161          FAIL_IF(!ptr);          FAIL_IF(!ptr);
162          *ptr = ins;          *ptr = ins;
163          compiler->size++;          compiler->size++;
# Line 367  SLJIT_API_FUNC_ATTRIBUTE void* sljit_gen Line 368  SLJIT_API_FUNC_ATTRIBUTE void* sljit_gen
368    
369  #define WRITE_BACK      0x00020  #define WRITE_BACK      0x00020
370  #define ARG_TEST        0x00040  #define ARG_TEST        0x00040
371  #define CUMULATIVE_OP   0x00080  #define ALT_KEEP_CACHE  0x00080
372  #define IMM_OP          0x00100  #define CUMULATIVE_OP   0x00100
373  #define SRC2_IMM        0x00200  #define IMM_OP          0x00200
374    #define SRC2_IMM        0x00400
375  #define REG_DEST        0x00400  
376  #define REG2_SOURCE     0x00800  #define REG_DEST        0x00800
377  #define SLOW_SRC1       0x01000  #define REG2_SOURCE     0x01000
378  #define SLOW_SRC2       0x02000  #define SLOW_SRC1       0x02000
379  #define SLOW_DEST       0x04000  #define SLOW_SRC2       0x04000
380    #define SLOW_DEST       0x08000
381    
382  /* SET_FLAGS (0x10 << 19) also belong here! */  /* SET_FLAGS (0x10 << 19) also belong here! */
383    
384  #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)  #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
# Line 384  SLJIT_API_FUNC_ATTRIBUTE void* sljit_gen Line 387  SLJIT_API_FUNC_ATTRIBUTE void* sljit_gen
387  #include "sljitNativeSPARC_64.c"  #include "sljitNativeSPARC_64.c"
388  #endif  #endif
389    
390  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_enter(struct sljit_compiler *compiler, sljit_si args, sljit_si temporaries, sljit_si saveds, sljit_si local_size)  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_enter(struct sljit_compiler *compiler, sljit_si args, sljit_si scratches, sljit_si saveds, sljit_si local_size)
391  {  {
392          CHECK_ERROR();          CHECK_ERROR();
393          check_sljit_emit_enter(compiler, args, temporaries, saveds, local_size);          check_sljit_emit_enter(compiler, args, scratches, saveds, local_size);
394    
395          compiler->temporaries = temporaries;          compiler->scratches = scratches;
396          compiler->saveds = saveds;          compiler->saveds = saveds;
397  #if (defined SLJIT_DEBUG && SLJIT_DEBUG)  #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
398          compiler->logical_local_size = local_size;          compiler->logical_local_size = local_size;
# Line 417  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 420  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
420          return SLJIT_SUCCESS;          return SLJIT_SUCCESS;
421  }  }
422    
423  SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, sljit_si args, sljit_si temporaries, sljit_si saveds, sljit_si local_size)  SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, sljit_si args, sljit_si scratches, sljit_si saveds, sljit_si local_size)
424  {  {
425          CHECK_ERROR_VOID();          CHECK_ERROR_VOID();
426          check_sljit_set_context(compiler, args, temporaries, saveds, local_size);          check_sljit_set_context(compiler, args, scratches, saveds, local_size);
427    
428          compiler->temporaries = temporaries;          compiler->scratches = scratches;
429          compiler->saveds = saveds;          compiler->saveds = saveds;
430  #if (defined SLJIT_DEBUG && SLJIT_DEBUG)  #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
431          compiler->logical_local_size = local_size;          compiler->logical_local_size = local_size;
# Line 437  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 440  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
440          CHECK_ERROR();          CHECK_ERROR();
441          check_sljit_emit_return(compiler, op, src, srcw);          check_sljit_emit_return(compiler, op, src, srcw);
442    
443          if (op != SLJIT_MOV || !(src >= SLJIT_TEMPORARY_REG1 && src <= SLJIT_NO_REGISTERS)) {          if (op != SLJIT_MOV || !(src <= TMP_REG3)) {
444                  FAIL_IF(emit_mov_before_return(compiler, op, src, srcw));                  FAIL_IF(emit_mov_before_return(compiler, op, src, srcw));
445                  src = SLJIT_TEMPORARY_REG1;                  src = SLJIT_SCRATCH_REG1;
446          }          }
447    
448          FAIL_IF(push_inst(compiler, JMPL | D(0) | S1A(31) | IMM(8), UNMOVABLE_INS));          FAIL_IF(push_inst(compiler, JMPL | D(0) | S1A(31) | IMM(8), UNMOVABLE_INS));
449          return push_inst(compiler, RESTORE | D(SLJIT_TEMPORARY_REG1) | S1(src) | S2(0), UNMOVABLE_INS);          return push_inst(compiler, RESTORE | D(SLJIT_SCRATCH_REG1) | S1(src) | S2(0), UNMOVABLE_INS);
450  }  }
451    
452  /* --------------------------------------------------------------------- */  /* --------------------------------------------------------------------- */
# Line 488  static sljit_si getput_arg_fast(struct s Line 491  static sljit_si getput_arg_fast(struct s
491  {  {
492          SLJIT_ASSERT(arg & SLJIT_MEM);          SLJIT_ASSERT(arg & SLJIT_MEM);
493    
494          if (!(flags & WRITE_BACK)) {          if (!(flags & WRITE_BACK) || !(arg & 0xf)) {
495                  if ((!(arg & 0xf0) && argw <= SIMM_MAX && argw >= SIMM_MIN)                  if ((!(arg & 0xf0) && argw <= SIMM_MAX && argw >= SIMM_MIN)
496                                  || ((arg & 0xf0) && (argw & 0x3) == 0)) {                                  || ((arg & 0xf0) && (argw & 0x3) == 0)) {
497                          /* Works for both absoulte and relative addresses (immediate case). */                          /* Works for both absoulte and relative addresses (immediate case). */
# Line 621  static sljit_si emit_op(struct sljit_com Line 624  static sljit_si emit_op(struct sljit_com
624          sljit_sw src2_r = 0;          sljit_sw src2_r = 0;
625          sljit_si sugg_src2_r = TMP_REG2;          sljit_si sugg_src2_r = TMP_REG2;
626    
627          compiler->cache_arg = 0;          if (!(flags & ALT_KEEP_CACHE)) {
628          compiler->cache_argw = 0;                  compiler->cache_arg = 0;
629                    compiler->cache_argw = 0;
630            }
631    
632          if (dst >= SLJIT_TEMPORARY_REG1 && dst <= TMP_REG3) {          if (SLJIT_UNLIKELY(dst == SLJIT_UNUSED)) {
633                    if (op >= SLJIT_MOV && op <= SLJIT_MOVU_SI && !(src2 & SLJIT_MEM))
634                            return SLJIT_SUCCESS;
635            }
636            else if (dst <= TMP_REG3) {
637                  dst_r = dst;                  dst_r = dst;
638                  flags |= REG_DEST;                  flags |= REG_DEST;
639                  if (GET_OPCODE(op) >= SLJIT_MOV && GET_OPCODE(op) <= SLJIT_MOVU_SI)                  if (op >= SLJIT_MOV && op <= SLJIT_MOVU_SI)
640                          sugg_src2_r = dst_r;                          sugg_src2_r = dst_r;
641          }          }
         else if (dst == SLJIT_UNUSED) {  
                 if (op >= SLJIT_MOV && op <= SLJIT_MOVU_SI && !(src2 & SLJIT_MEM))  
                         return SLJIT_SUCCESS;  
         }  
642          else if ((dst & SLJIT_MEM) && !getput_arg_fast(compiler, flags | ARG_TEST, TMP_REG1, dst, dstw))          else if ((dst & SLJIT_MEM) && !getput_arg_fast(compiler, flags | ARG_TEST, TMP_REG1, dst, dstw))
643                  flags |= SLOW_DEST;                  flags |= SLOW_DEST;
644    
# Line 659  static sljit_si emit_op(struct sljit_com Line 664  static sljit_si emit_op(struct sljit_com
664          }          }
665    
666          /* Source 1. */          /* Source 1. */
667          if (src1 >= SLJIT_TEMPORARY_REG1 && src1 <= TMP_REG3)          if (src1 <= TMP_REG3)
668                  src1_r = src1;                  src1_r = src1;
669          else if (src1 & SLJIT_IMM) {          else if (src1 & SLJIT_IMM) {
670                  if (src1w) {                  if (src1w) {
# Line 678  static sljit_si emit_op(struct sljit_com Line 683  static sljit_si emit_op(struct sljit_com
683          }          }
684    
685          /* Source 2. */          /* Source 2. */
686          if (src2 >= SLJIT_TEMPORARY_REG1 && src2 <= TMP_REG3) {          if (src2 <= TMP_REG3) {
687                  src2_r = src2;                  src2_r = src2;
688                  flags |= REG2_SOURCE;                  flags |= REG2_SOURCE;
689                  if (!(flags & REG_DEST) && GET_OPCODE(op) >= SLJIT_MOV && GET_OPCODE(op) <= SLJIT_MOVU_SI)                  if (!(flags & REG_DEST) && op >= SLJIT_MOV && op <= SLJIT_MOVU_SI)
690                          dst_r = src2_r;                          dst_r = src2_r;
691          }          }
692          else if (src2 & SLJIT_IMM) {          else if (src2 & SLJIT_IMM) {
693                  if (!(flags & SRC2_IMM)) {                  if (!(flags & SRC2_IMM)) {
694                          if (src2w || (GET_OPCODE(op) >= SLJIT_MOV && GET_OPCODE(op) <= SLJIT_MOVU_SI)) {                          if (src2w) {
695                                  FAIL_IF(load_immediate(compiler, sugg_src2_r, src2w));                                  FAIL_IF(load_immediate(compiler, sugg_src2_r, src2w));
696                                  src2_r = sugg_src2_r;                                  src2_r = sugg_src2_r;
697                          }                          }
698                          else                          else {
699                                  src2_r = 0;                                  src2_r = 0;
700                                    if ((op >= SLJIT_MOV && op <= SLJIT_MOVU_SI) && (dst & SLJIT_MEM))
701                                            dst_r = 0;
702                            }
703                  }                  }
704          }          }
705          else {          else {
# Line 745  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 753  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
753          case SLJIT_UMUL:          case SLJIT_UMUL:
754          case SLJIT_SMUL:          case SLJIT_SMUL:
755  #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)  #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
756                  FAIL_IF(push_inst(compiler, (op == SLJIT_UMUL ? UMUL : SMUL) | D(SLJIT_TEMPORARY_REG1) | S1(SLJIT_TEMPORARY_REG1) | S2(SLJIT_TEMPORARY_REG2), DR(SLJIT_TEMPORARY_REG1)));                  FAIL_IF(push_inst(compiler, (op == SLJIT_UMUL ? UMUL : SMUL) | D(SLJIT_SCRATCH_REG1) | S1(SLJIT_SCRATCH_REG1) | S2(SLJIT_SCRATCH_REG2), DR(SLJIT_SCRATCH_REG1)));
757                  return push_inst(compiler, RDY | D(SLJIT_TEMPORARY_REG2), DR(SLJIT_TEMPORARY_REG2));                  return push_inst(compiler, RDY | D(SLJIT_SCRATCH_REG2), DR(SLJIT_SCRATCH_REG2));
758  #else  #else
759  #error "Implementation required"  #error "Implementation required"
760  #endif  #endif
# Line 756  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 764  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
764                  if (op == SLJIT_UDIV)                  if (op == SLJIT_UDIV)
765                          FAIL_IF(push_inst(compiler, WRY | S1(0), MOVABLE_INS));                          FAIL_IF(push_inst(compiler, WRY | S1(0), MOVABLE_INS));
766                  else {                  else {
767                          FAIL_IF(push_inst(compiler, SRA | D(TMP_REG1) | S1(SLJIT_TEMPORARY_REG1) | IMM(31), DR(TMP_REG1)));                          FAIL_IF(push_inst(compiler, SRA | D(TMP_REG1) | S1(SLJIT_SCRATCH_REG1) | IMM(31), DR(TMP_REG1)));
768                          FAIL_IF(push_inst(compiler, WRY | S1(TMP_REG1), MOVABLE_INS));                          FAIL_IF(push_inst(compiler, WRY | S1(TMP_REG1), MOVABLE_INS));
769                  }                  }
770                  FAIL_IF(push_inst(compiler, OR | D(TMP_REG2) | S1(0) | S2(SLJIT_TEMPORARY_REG1), DR(TMP_REG2)));                  FAIL_IF(push_inst(compiler, OR | D(TMP_REG2) | S1(0) | S2(SLJIT_SCRATCH_REG1), DR(TMP_REG2)));
771                  FAIL_IF(push_inst(compiler, (op == SLJIT_UDIV ? UDIV : SDIV) | D(SLJIT_TEMPORARY_REG1) | S1(SLJIT_TEMPORARY_REG1) | S2(SLJIT_TEMPORARY_REG2), DR(SLJIT_TEMPORARY_REG1)));                  FAIL_IF(push_inst(compiler, (op == SLJIT_UDIV ? UDIV : SDIV) | D(SLJIT_SCRATCH_REG1) | S1(SLJIT_SCRATCH_REG1) | S2(SLJIT_SCRATCH_REG2), DR(SLJIT_SCRATCH_REG1)));
772                  FAIL_IF(push_inst(compiler, SMUL | D(SLJIT_TEMPORARY_REG2) | S1(SLJIT_TEMPORARY_REG1) | S2(SLJIT_TEMPORARY_REG2), DR(SLJIT_TEMPORARY_REG2)));                  FAIL_IF(push_inst(compiler, SMUL | D(SLJIT_SCRATCH_REG2) | S1(SLJIT_SCRATCH_REG1) | S2(SLJIT_SCRATCH_REG2), DR(SLJIT_SCRATCH_REG2)));
773                  FAIL_IF(push_inst(compiler, SUB | D(SLJIT_TEMPORARY_REG2) | S1(TMP_REG2) | S2(SLJIT_TEMPORARY_REG2), DR(SLJIT_TEMPORARY_REG2)));                  FAIL_IF(push_inst(compiler, SUB | D(SLJIT_SCRATCH_REG2) | S1(TMP_REG2) | S2(SLJIT_SCRATCH_REG2), DR(SLJIT_SCRATCH_REG2)));
774                  return SLJIT_SUCCESS;                  return SLJIT_SUCCESS;
775  #else  #else
776  #error "Implementation required"  #error "Implementation required"
# Line 1071  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1079  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1079          check_sljit_emit_fast_enter(compiler, dst, dstw);          check_sljit_emit_fast_enter(compiler, dst, dstw);
1080          ADJUST_LOCAL_OFFSET(dst, dstw);          ADJUST_LOCAL_OFFSET(dst, dstw);
1081    
1082          if (dst >= SLJIT_TEMPORARY_REG1 && dst <= SLJIT_NO_REGISTERS)          /* For UNUSED dst. Uncommon, but possible. */
1083            if (dst == SLJIT_UNUSED)
1084                    return SLJIT_SUCCESS;
1085    
1086            if (dst <= TMP_REG3)
1087                  return push_inst(compiler, OR | D(dst) | S1(0) | S2(LINK_REG), DR(dst));                  return push_inst(compiler, OR | D(dst) | S1(0) | S2(LINK_REG), DR(dst));
         else if (dst & SLJIT_MEM)  
                 return emit_op_mem(compiler, WORD_DATA, LINK_REG, dst, dstw);  
1088    
1089          /* SLJIT_UNUSED is also possible, although highly unlikely. */          /* Memory. */
1090          return SLJIT_SUCCESS;          return emit_op_mem(compiler, WORD_DATA, LINK_REG, dst, dstw);
1091  }  }
1092    
1093  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)
# Line 1086  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1096  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1096          check_sljit_emit_fast_return(compiler, src, srcw);          check_sljit_emit_fast_return(compiler, src, srcw);
1097          ADJUST_LOCAL_OFFSET(src, srcw);          ADJUST_LOCAL_OFFSET(src, srcw);
1098    
1099          if (src >= SLJIT_TEMPORARY_REG1 && src <= SLJIT_NO_REGISTERS)          if (src <= TMP_REG3)
1100                  FAIL_IF(push_inst(compiler, OR | D(LINK_REG) | S1(0) | S2(src), DR(LINK_REG)));                  FAIL_IF(push_inst(compiler, OR | D(LINK_REG) | S1(0) | S2(src), DR(LINK_REG)));
1101          else if (src & SLJIT_MEM)          else if (src & SLJIT_MEM)
1102                  FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, LINK_REG, src, srcw));                  FAIL_IF(emit_op_mem(compiler, WORD_DATA | LOAD_DATA, LINK_REG, src, srcw));
# Line 1244  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1254  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1254          check_sljit_emit_ijump(compiler, type, src, srcw);          check_sljit_emit_ijump(compiler, type, src, srcw);
1255          ADJUST_LOCAL_OFFSET(src, srcw);          ADJUST_LOCAL_OFFSET(src, srcw);
1256    
1257          if (src >= SLJIT_TEMPORARY_REG1 && src <= SLJIT_NO_REGISTERS)          if (src <= TMP_REG3)
1258                  src_r = src;                  src_r = src;
1259          else if (src & SLJIT_IMM) {          else if (src & SLJIT_IMM) {
1260                  jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));                  jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
# Line 1270  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1280  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1280          return push_inst(compiler, NOP, UNMOVABLE_INS);          return push_inst(compiler, NOP, UNMOVABLE_INS);
1281  }  }
1282    
1283  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_cond_value(struct sljit_compiler *compiler, sljit_si op, sljit_si dst, sljit_sw dstw, sljit_si type)  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op_flags(struct sljit_compiler *compiler, sljit_si op,
1284            sljit_si dst, sljit_sw dstw,
1285            sljit_si src, sljit_sw srcw,
1286            sljit_si type)
1287  {  {
1288          sljit_si reg;          sljit_si reg, flags = (GET_FLAGS(op) ? SET_FLAGS : 0);
1289    
1290          CHECK_ERROR();          CHECK_ERROR();
1291          check_sljit_emit_cond_value(compiler, op, dst, dstw, type);          check_sljit_emit_op_flags(compiler, op, dst, dstw, src, srcw, type);
1292          ADJUST_LOCAL_OFFSET(dst, dstw);          ADJUST_LOCAL_OFFSET(dst, dstw);
1293    
1294          if (dst == SLJIT_UNUSED)          if (dst == SLJIT_UNUSED)
1295                  return SLJIT_SUCCESS;                  return SLJIT_SUCCESS;
1296    
1297  #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)  #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
1298          reg = (op == SLJIT_MOV && dst >= SLJIT_TEMPORARY_REG1 && dst <= SLJIT_NO_REGISTERS) ? dst : TMP_REG2;          op = GET_OPCODE(op);
1299            reg = (op < SLJIT_ADD && dst <= TMP_REG3) ? dst : TMP_REG2;
1300    
1301            compiler->cache_arg = 0;
1302            compiler->cache_argw = 0;
1303            if (op >= SLJIT_ADD && (src & SLJIT_MEM)) {
1304                    ADJUST_LOCAL_OFFSET(src, srcw);
1305                    FAIL_IF(emit_op_mem2(compiler, WORD_DATA | LOAD_DATA, TMP_REG1, src, srcw, dst, dstw));
1306                    src = TMP_REG1;
1307                    srcw = 0;
1308            }
1309    
1310          if (type < SLJIT_C_FLOAT_EQUAL)          if (type < SLJIT_C_FLOAT_EQUAL)
1311                  FAIL_IF(push_inst(compiler, BICC | get_cc(type) | 3, UNMOVABLE_INS));                  FAIL_IF(push_inst(compiler, BICC | get_cc(type) | 3, UNMOVABLE_INS));
# Line 1292  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1315  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1315          FAIL_IF(push_inst(compiler, OR | D(reg) | S1(0) | IMM(1), UNMOVABLE_INS));          FAIL_IF(push_inst(compiler, OR | D(reg) | S1(0) | IMM(1), UNMOVABLE_INS));
1316          FAIL_IF(push_inst(compiler, OR | D(reg) | S1(0) | IMM(0), UNMOVABLE_INS));          FAIL_IF(push_inst(compiler, OR | D(reg) | S1(0) | IMM(0), UNMOVABLE_INS));
1317    
1318          if (GET_OPCODE(op) == SLJIT_OR)          if (op >= SLJIT_ADD)
1319                  return emit_op(compiler, SLJIT_OR, (GET_FLAGS(op) ? SET_FLAGS : 0) | CUMULATIVE_OP | IMM_OP, dst, dstw, dst, dstw, TMP_REG2, 0);                  return emit_op(compiler, op, flags | CUMULATIVE_OP | IMM_OP | ALT_KEEP_CACHE, dst, dstw, src, srcw, TMP_REG2, 0);
1320    
1321          return (reg == TMP_REG2) ? emit_op_mem(compiler, WORD_DATA, TMP_REG2, dst, dstw) : SLJIT_SUCCESS;          return (reg == TMP_REG2) ? emit_op_mem(compiler, WORD_DATA, TMP_REG2, dst, dstw) : SLJIT_SUCCESS;
1322  #else  #else
# Line 1314  SLJIT_API_FUNC_ATTRIBUTE struct sljit_co Line 1337  SLJIT_API_FUNC_ATTRIBUTE struct sljit_co
1337          PTR_FAIL_IF(!const_);          PTR_FAIL_IF(!const_);
1338          set_const(const_, compiler);          set_const(const_, compiler);
1339    
1340          reg = (dst >= SLJIT_TEMPORARY_REG1 && dst <= SLJIT_NO_REGISTERS) ? dst : TMP_REG2;          reg = (dst <= TMP_REG3) ? dst : TMP_REG2;
1341    
1342          PTR_FAIL_IF(emit_const(compiler, reg, init_value));          PTR_FAIL_IF(emit_const(compiler, reg, init_value));
1343    

Legend:
Removed from v.1195  
changed lines
  Added in v.1222

  ViewVC Help
Powered by ViewVC 1.1.5