/[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 1505 by zherczeg, Mon Aug 11 06:42:28 2014 UTC revision 1506 by zherczeg, Sat Sep 27 06:25:26 2014 UTC
# Line 283  SLJIT_API_FUNC_ATTRIBUTE void* sljit_gen Line 283  SLJIT_API_FUNC_ATTRIBUTE void* sljit_gen
283          struct sljit_const *const_;          struct sljit_const *const_;
284    
285          CHECK_ERROR_PTR();          CHECK_ERROR_PTR();
286          check_sljit_generate_code(compiler);          CHECK_PTR(check_sljit_generate_code(compiler));
287          reverse_buf(compiler);          reverse_buf(compiler);
288    
289          code = (sljit_ins*)SLJIT_MALLOC_EXEC(compiler->size * sizeof(sljit_ins));          code = (sljit_ins*)SLJIT_MALLOC_EXEC(compiler->size * sizeof(sljit_ins));
# Line 423  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 423  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
423          sljit_si fscratches, sljit_si fsaveds, sljit_si local_size)          sljit_si fscratches, sljit_si fsaveds, sljit_si local_size)
424  {  {
425          CHECK_ERROR();          CHECK_ERROR();
426          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));
427            set_emit_enter(compiler, options, args, scratches, saveds, fscratches, fsaveds, local_size);
428    
429          compiler->options = options;          local_size = (local_size + SLJIT_LOCALS_OFFSET + 7) & ~0x7;
         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  
   
         local_size = (local_size + FIXED_LOCALS_OFFSET + 7) & ~0x7;  
430          compiler->local_size = local_size;          compiler->local_size = local_size;
431    
432          if (local_size <= SIMM_MAX) {          if (local_size <= SIMM_MAX) {
# Line 450  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 442  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
442          return SLJIT_SUCCESS;          return SLJIT_SUCCESS;
443  }  }
444    
445  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,
446          sljit_si options, sljit_si args, sljit_si scratches, sljit_si saveds,          sljit_si options, sljit_si args, sljit_si scratches, sljit_si saveds,
447          sljit_si fscratches, sljit_si fsaveds, sljit_si local_size)          sljit_si fscratches, sljit_si fsaveds, sljit_si local_size)
448  {  {
449          CHECK_ERROR_VOID();          CHECK_ERROR();
450          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));
451            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  
452    
453          compiler->local_size = (local_size + FIXED_LOCALS_OFFSET + 7) & ~0x7;          compiler->local_size = (local_size + SLJIT_LOCALS_OFFSET + 7) & ~0x7;
454            return SLJIT_SUCCESS;
455  }  }
456    
457  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)
458  {  {
459          CHECK_ERROR();          CHECK_ERROR();
460          check_sljit_emit_return(compiler, op, src, srcw);          CHECK(check_sljit_emit_return(compiler, op, src, srcw));
461    
462          if (op != SLJIT_MOV || !FAST_IS_REG(src)) {          if (op != SLJIT_MOV || !FAST_IS_REG(src)) {
463                  FAIL_IF(emit_mov_before_return(compiler, op, src, srcw));                  FAIL_IF(emit_mov_before_return(compiler, op, src, srcw));
# Line 776  static sljit_si emit_op(struct sljit_com Line 761  static sljit_si emit_op(struct sljit_com
761  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op0(struct sljit_compiler *compiler, sljit_si op)  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_emit_op0(struct sljit_compiler *compiler, sljit_si op)
762  {  {
763          CHECK_ERROR();          CHECK_ERROR();
764          check_sljit_emit_op0(compiler, op);          CHECK(check_sljit_emit_op0(compiler, op));
765    
766          op = GET_OPCODE(op);          op = GET_OPCODE(op);
767          switch (op) {          switch (op) {
# Line 784  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 769  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
769                  return push_inst(compiler, TA, UNMOVABLE_INS);                  return push_inst(compiler, TA, UNMOVABLE_INS);
770          case SLJIT_NOP:          case SLJIT_NOP:
771                  return push_inst(compiler, NOP, UNMOVABLE_INS);                  return push_inst(compiler, NOP, UNMOVABLE_INS);
772          case SLJIT_UMUL:          case SLJIT_LUMUL:
773          case SLJIT_SMUL:          case SLJIT_LSMUL:
774  #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)  #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
775                  FAIL_IF(push_inst(compiler, (op == SLJIT_UMUL ? UMUL : SMUL) | D(SLJIT_R0) | S1(SLJIT_R0) | S2(SLJIT_R1), DR(SLJIT_R0)));                  FAIL_IF(push_inst(compiler, (op == SLJIT_LUMUL ? UMUL : SMUL) | D(SLJIT_R0) | S1(SLJIT_R0) | S2(SLJIT_R1), DR(SLJIT_R0)));
776                  return push_inst(compiler, RDY | D(SLJIT_R1), DR(SLJIT_R1));                  return push_inst(compiler, RDY | D(SLJIT_R1), DR(SLJIT_R1));
777  #else  #else
778  #error "Implementation required"  #error "Implementation required"
779  #endif  #endif
780          case SLJIT_UDIV:          case SLJIT_LUDIV:
781          case SLJIT_SDIV:          case SLJIT_LSDIV:
782  #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)  #if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
783                  if (op == SLJIT_UDIV)                  if (op == SLJIT_LUDIV)
784                          FAIL_IF(push_inst(compiler, WRY | S1(0), MOVABLE_INS));                          FAIL_IF(push_inst(compiler, WRY | S1(0), MOVABLE_INS));
785                  else {                  else {
786                          FAIL_IF(push_inst(compiler, SRA | D(TMP_REG1) | S1(SLJIT_R0) | IMM(31), DR(TMP_REG1)));                          FAIL_IF(push_inst(compiler, SRA | D(TMP_REG1) | S1(SLJIT_R0) | IMM(31), DR(TMP_REG1)));
787                          FAIL_IF(push_inst(compiler, WRY | S1(TMP_REG1), MOVABLE_INS));                          FAIL_IF(push_inst(compiler, WRY | S1(TMP_REG1), MOVABLE_INS));
788                  }                  }
789                  FAIL_IF(push_inst(compiler, OR | D(TMP_REG2) | S1(0) | S2(SLJIT_R0), DR(TMP_REG2)));                  FAIL_IF(push_inst(compiler, OR | D(TMP_REG2) | S1(0) | S2(SLJIT_R0), DR(TMP_REG2)));
790                  FAIL_IF(push_inst(compiler, (op == SLJIT_UDIV ? UDIV : SDIV) | D(SLJIT_R0) | S1(SLJIT_R0) | S2(SLJIT_R1), DR(SLJIT_R0)));                  FAIL_IF(push_inst(compiler, (op == SLJIT_LUDIV ? UDIV : SDIV) | D(SLJIT_R0) | S1(SLJIT_R0) | S2(SLJIT_R1), DR(SLJIT_R0)));
791                  FAIL_IF(push_inst(compiler, SMUL | D(SLJIT_R1) | S1(SLJIT_R0) | S2(SLJIT_R1), DR(SLJIT_R1)));                  FAIL_IF(push_inst(compiler, SMUL | D(SLJIT_R1) | S1(SLJIT_R0) | S2(SLJIT_R1), DR(SLJIT_R1)));
792                  FAIL_IF(push_inst(compiler, SUB | D(SLJIT_R1) | S1(TMP_REG2) | S2(SLJIT_R1), DR(SLJIT_R1)));                  FAIL_IF(push_inst(compiler, SUB | D(SLJIT_R1) | S1(TMP_REG2) | S2(SLJIT_R1), DR(SLJIT_R1)));
793                  return SLJIT_SUCCESS;                  return SLJIT_SUCCESS;
# Line 821  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 806  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
806          sljit_si flags = GET_FLAGS(op) ? SET_FLAGS : 0;          sljit_si flags = GET_FLAGS(op) ? SET_FLAGS : 0;
807    
808          CHECK_ERROR();          CHECK_ERROR();
809          check_sljit_emit_op1(compiler, op, dst, dstw, src, srcw);          CHECK(check_sljit_emit_op1(compiler, op, dst, dstw, src, srcw));
810          ADJUST_LOCAL_OFFSET(dst, dstw);          ADJUST_LOCAL_OFFSET(dst, dstw);
811          ADJUST_LOCAL_OFFSET(src, srcw);          ADJUST_LOCAL_OFFSET(src, srcw);
812    
# Line 890  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 875  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
875          sljit_si flags = GET_FLAGS(op) ? SET_FLAGS : 0;          sljit_si flags = GET_FLAGS(op) ? SET_FLAGS : 0;
876    
877          CHECK_ERROR();          CHECK_ERROR();
878          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));
879          ADJUST_LOCAL_OFFSET(dst, dstw);          ADJUST_LOCAL_OFFSET(dst, dstw);
880          ADJUST_LOCAL_OFFSET(src1, src1w);          ADJUST_LOCAL_OFFSET(src1, src1w);
881          ADJUST_LOCAL_OFFSET(src2, src2w);          ADJUST_LOCAL_OFFSET(src2, src2w);
# Line 926  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 911  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
911    
912  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)
913  {  {
914          check_sljit_get_register_index(reg);          CHECK_REG_INDEX(check_sljit_get_register_index(reg));
915          return reg_map[reg];          return reg_map[reg];
916  }  }
917    
918  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)
919  {  {
920          check_sljit_get_float_register_index(reg);          CHECK_REG_INDEX(check_sljit_get_float_register_index(reg));
921          return reg << 1;          return reg << 1;
922  }  }
923    
# Line 940  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 925  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
925          void *instruction, sljit_si size)          void *instruction, sljit_si size)
926  {  {
927          CHECK_ERROR();          CHECK_ERROR();
928          check_sljit_emit_op_custom(compiler, instruction, size);          CHECK(check_sljit_emit_op_custom(compiler, instruction, size));
         SLJIT_ASSERT(size == 4);  
929    
930          return push_inst(compiler, *(sljit_ins*)instruction, UNMOVABLE_INS);          return push_inst(compiler, *(sljit_ins*)instruction, UNMOVABLE_INS);
931  }  }
# Line 1066  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1050  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1050                  src <<= 1;                  src <<= 1;
1051    
1052          switch (GET_OPCODE(op)) {          switch (GET_OPCODE(op)) {
1053          case SLJIT_MOVD:          case SLJIT_DMOV:
1054                  if (src != dst_r) {                  if (src != dst_r) {
1055                          if (dst_r != TMP_FREG1) {                          if (dst_r != TMP_FREG1) {
1056                                  FAIL_IF(push_inst(compiler, FMOVS | DA(dst_r) | S2A(src), MOVABLE_INS));                                  FAIL_IF(push_inst(compiler, FMOVS | DA(dst_r) | S2A(src), MOVABLE_INS));
# Line 1077  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1061  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1061                                  dst_r = src;                                  dst_r = src;
1062                  }                  }
1063                  break;                  break;
1064          case SLJIT_NEGD:          case SLJIT_DNEG:
1065                  FAIL_IF(push_inst(compiler, FNEGS | DA(dst_r) | S2A(src), MOVABLE_INS));                  FAIL_IF(push_inst(compiler, FNEGS | DA(dst_r) | S2A(src), MOVABLE_INS));
1066                  if (dst_r != src && !(op & SLJIT_SINGLE_OP))                  if (dst_r != src && !(op & SLJIT_SINGLE_OP))
1067                          FAIL_IF(push_inst(compiler, FMOVS | DA(dst_r | 1) | S2A(src | 1), MOVABLE_INS));                          FAIL_IF(push_inst(compiler, FMOVS | DA(dst_r | 1) | S2A(src | 1), MOVABLE_INS));
1068                  break;                  break;
1069          case SLJIT_ABSD:          case SLJIT_DABS:
1070                  FAIL_IF(push_inst(compiler, FABSS | DA(dst_r) | S2A(src), MOVABLE_INS));                  FAIL_IF(push_inst(compiler, FABSS | DA(dst_r) | S2A(src), MOVABLE_INS));
1071                  if (dst_r != src && !(op & SLJIT_SINGLE_OP))                  if (dst_r != src && !(op & SLJIT_SINGLE_OP))
1072                          FAIL_IF(push_inst(compiler, FMOVS | DA(dst_r | 1) | S2A(src | 1), MOVABLE_INS));                          FAIL_IF(push_inst(compiler, FMOVS | DA(dst_r | 1) | S2A(src | 1), MOVABLE_INS));
# Line 1106  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1090  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1090          sljit_si dst_r, flags = 0;          sljit_si dst_r, flags = 0;
1091    
1092          CHECK_ERROR();          CHECK_ERROR();
1093          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));
1094          ADJUST_LOCAL_OFFSET(dst, dstw);          ADJUST_LOCAL_OFFSET(dst, dstw);
1095          ADJUST_LOCAL_OFFSET(src1, src1w);          ADJUST_LOCAL_OFFSET(src1, src1w);
1096          ADJUST_LOCAL_OFFSET(src2, src2w);          ADJUST_LOCAL_OFFSET(src2, src2w);
# Line 1157  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1141  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1141                  src2 = TMP_FREG2;                  src2 = TMP_FREG2;
1142    
1143          switch (GET_OPCODE(op)) {          switch (GET_OPCODE(op)) {
1144          case SLJIT_ADDD:          case SLJIT_DADD:
1145                  FAIL_IF(push_inst(compiler, SELECT_FOP(op, FADDS, FADDD) | DA(dst_r) | S1A(src1) | S2A(src2), MOVABLE_INS));                  FAIL_IF(push_inst(compiler, SELECT_FOP(op, FADDS, FADDD) | DA(dst_r) | S1A(src1) | S2A(src2), MOVABLE_INS));
1146                  break;                  break;
1147    
1148          case SLJIT_SUBD:          case SLJIT_DSUB:
1149                  FAIL_IF(push_inst(compiler, SELECT_FOP(op, FSUBS, FSUBD) | DA(dst_r) | S1A(src1) | S2A(src2), MOVABLE_INS));                  FAIL_IF(push_inst(compiler, SELECT_FOP(op, FSUBS, FSUBD) | DA(dst_r) | S1A(src1) | S2A(src2), MOVABLE_INS));
1150                  break;                  break;
1151    
1152          case SLJIT_MULD:          case SLJIT_DMUL:
1153                  FAIL_IF(push_inst(compiler, SELECT_FOP(op, FMULS, FMULD) | DA(dst_r) | S1A(src1) | S2A(src2), MOVABLE_INS));                  FAIL_IF(push_inst(compiler, SELECT_FOP(op, FMULS, FMULD) | DA(dst_r) | S1A(src1) | S2A(src2), MOVABLE_INS));
1154                  break;                  break;
1155    
1156          case SLJIT_DIVD:          case SLJIT_DDIV:
1157                  FAIL_IF(push_inst(compiler, SELECT_FOP(op, FDIVS, FDIVD) | DA(dst_r) | S1A(src1) | S2A(src2), MOVABLE_INS));                  FAIL_IF(push_inst(compiler, SELECT_FOP(op, FDIVS, FDIVD) | DA(dst_r) | S1A(src1) | S2A(src2), MOVABLE_INS));
1158                  break;                  break;
1159          }          }
# Line 1190  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1174  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1174  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)
1175  {  {
1176          CHECK_ERROR();          CHECK_ERROR();
1177          check_sljit_emit_fast_enter(compiler, dst, dstw);          CHECK(check_sljit_emit_fast_enter(compiler, dst, dstw));
1178          ADJUST_LOCAL_OFFSET(dst, dstw);          ADJUST_LOCAL_OFFSET(dst, dstw);
1179    
1180          /* For UNUSED dst. Uncommon, but possible. */          /* For UNUSED dst. Uncommon, but possible. */
# Line 1207  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1191  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1191  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)
1192  {  {
1193          CHECK_ERROR();          CHECK_ERROR();
1194          check_sljit_emit_fast_return(compiler, src, srcw);          CHECK(check_sljit_emit_fast_return(compiler, src, srcw));
1195          ADJUST_LOCAL_OFFSET(src, srcw);          ADJUST_LOCAL_OFFSET(src, srcw);
1196    
1197          if (FAST_IS_REG(src))          if (FAST_IS_REG(src))
# Line 1230  SLJIT_API_FUNC_ATTRIBUTE struct sljit_la Line 1214  SLJIT_API_FUNC_ATTRIBUTE struct sljit_la
1214          struct sljit_label *label;          struct sljit_label *label;
1215    
1216          CHECK_ERROR_PTR();          CHECK_ERROR_PTR();
1217          check_sljit_emit_label(compiler);          CHECK_PTR(check_sljit_emit_label(compiler));
1218    
1219          if (compiler->last_label && compiler->last_label->size == compiler->size)          if (compiler->last_label && compiler->last_label->size == compiler->size)
1220                  return compiler->last_label;                  return compiler->last_label;
# Line 1245  SLJIT_API_FUNC_ATTRIBUTE struct sljit_la Line 1229  SLJIT_API_FUNC_ATTRIBUTE struct sljit_la
1229  static sljit_ins get_cc(sljit_si type)  static sljit_ins get_cc(sljit_si type)
1230  {  {
1231          switch (type) {          switch (type) {
1232          case SLJIT_C_EQUAL:          case SLJIT_EQUAL:
1233          case SLJIT_C_MUL_NOT_OVERFLOW:          case SLJIT_MUL_NOT_OVERFLOW:
1234            case SLJIT_D_NOT_EQUAL: /* Unordered. */
1235                  return DA(0x1);                  return DA(0x1);
1236    
1237          case SLJIT_C_NOT_EQUAL:          case SLJIT_NOT_EQUAL:
1238          case SLJIT_C_MUL_OVERFLOW:          case SLJIT_MUL_OVERFLOW:
1239            case SLJIT_D_EQUAL:
1240                  return DA(0x9);                  return DA(0x9);
1241    
1242          case SLJIT_C_LESS:          case SLJIT_LESS:
1243            case SLJIT_D_GREATER: /* Unordered. */
1244                  return DA(0x5);                  return DA(0x5);
1245    
1246          case SLJIT_C_GREATER_EQUAL:          case SLJIT_GREATER_EQUAL:
1247            case SLJIT_D_LESS_EQUAL:
1248                  return DA(0xd);                  return DA(0xd);
1249    
1250          case SLJIT_C_GREATER:          case SLJIT_GREATER:
1251            case SLJIT_D_GREATER_EQUAL: /* Unordered. */
1252                  return DA(0xc);                  return DA(0xc);
1253    
1254          case SLJIT_C_LESS_EQUAL:          case SLJIT_LESS_EQUAL:
1255            case SLJIT_D_LESS:
1256                  return DA(0x4);                  return DA(0x4);
1257    
1258          case SLJIT_C_SIG_LESS:          case SLJIT_SIG_LESS:
1259                  return DA(0x3);                  return DA(0x3);
1260    
1261          case SLJIT_C_SIG_GREATER_EQUAL:          case SLJIT_SIG_GREATER_EQUAL:
1262                  return DA(0xb);                  return DA(0xb);
1263    
1264          case SLJIT_C_SIG_GREATER:          case SLJIT_SIG_GREATER:
1265                  return DA(0xa);                  return DA(0xa);
1266    
1267          case SLJIT_C_SIG_LESS_EQUAL:          case SLJIT_SIG_LESS_EQUAL:
1268                  return DA(0x2);                  return DA(0x2);
1269    
1270          case SLJIT_C_OVERFLOW:          case SLJIT_OVERFLOW:
1271            case SLJIT_D_UNORDERED:
1272                  return DA(0x7);                  return DA(0x7);
1273    
1274          case SLJIT_C_NOT_OVERFLOW:          case SLJIT_NOT_OVERFLOW:
1275                  return DA(0xf);          case SLJIT_D_ORDERED:
   
         case SLJIT_C_FLOAT_EQUAL:  
                 return DA(0x9);  
   
         case SLJIT_C_FLOAT_NOT_EQUAL: /* Unordered. */  
                 return DA(0x1);  
   
         case SLJIT_C_FLOAT_LESS:  
                 return DA(0x4);  
   
         case SLJIT_C_FLOAT_GREATER_EQUAL: /* Unordered. */  
                 return DA(0xc);  
   
         case SLJIT_C_FLOAT_LESS_EQUAL:  
                 return DA(0xd);  
   
         case SLJIT_C_FLOAT_GREATER: /* Unordered. */  
                 return DA(0x5);  
   
         case SLJIT_C_FLOAT_UNORDERED:  
                 return DA(0x7);  
   
         case SLJIT_C_FLOAT_ORDERED:  
1276                  return DA(0xf);                  return DA(0xf);
1277    
1278          default:          default:
# Line 1318  SLJIT_API_FUNC_ATTRIBUTE struct sljit_ju Line 1286  SLJIT_API_FUNC_ATTRIBUTE struct sljit_ju
1286          struct sljit_jump *jump;          struct sljit_jump *jump;
1287    
1288          CHECK_ERROR_PTR();          CHECK_ERROR_PTR();
1289          check_sljit_emit_jump(compiler, type);          CHECK_PTR(check_sljit_emit_jump(compiler, type));
1290    
1291          jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));          jump = (struct sljit_jump*)ensure_abuf(compiler, sizeof(struct sljit_jump));
1292          PTR_FAIL_IF(!jump);          PTR_FAIL_IF(!jump);
1293          set_jump(jump, compiler, type & SLJIT_REWRITABLE_JUMP);          set_jump(jump, compiler, type & SLJIT_REWRITABLE_JUMP);
1294          type &= 0xff;          type &= 0xff;
1295    
1296          if (type < SLJIT_C_FLOAT_EQUAL) {          if (type < SLJIT_D_EQUAL) {
1297                  jump->flags |= IS_COND;                  jump->flags |= IS_COND;
1298                  if (((compiler->delay_slot & DST_INS_MASK) != UNMOVABLE_INS) && !(compiler->delay_slot & ICC_IS_SET))                  if (((compiler->delay_slot & DST_INS_MASK) != UNMOVABLE_INS) && !(compiler->delay_slot & ICC_IS_SET))
1299                          jump->flags |= IS_MOVABLE;                          jump->flags |= IS_MOVABLE;
# Line 1365  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1333  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1333          sljit_si src_r;          sljit_si src_r;
1334    
1335          CHECK_ERROR();          CHECK_ERROR();
1336          check_sljit_emit_ijump(compiler, type, src, srcw);          CHECK(check_sljit_emit_ijump(compiler, type, src, srcw));
1337          ADJUST_LOCAL_OFFSET(src, srcw);          ADJUST_LOCAL_OFFSET(src, srcw);
1338    
1339          if (FAST_IS_REG(src))          if (FAST_IS_REG(src))
# Line 1402  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1370  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1370          sljit_si reg, flags = (GET_FLAGS(op) ? SET_FLAGS : 0);          sljit_si reg, flags = (GET_FLAGS(op) ? SET_FLAGS : 0);
1371    
1372          CHECK_ERROR();          CHECK_ERROR();
1373          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));
1374          ADJUST_LOCAL_OFFSET(dst, dstw);          ADJUST_LOCAL_OFFSET(dst, dstw);
1375    
1376          if (dst == SLJIT_UNUSED)          if (dst == SLJIT_UNUSED)
# Line 1421  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_ Line 1389  SLJIT_API_FUNC_ATTRIBUTE sljit_si sljit_
1389                  srcw = 0;                  srcw = 0;
1390          }          }
1391    
1392          if (type < SLJIT_C_FLOAT_EQUAL)          type &= 0xff;
1393            if (type < SLJIT_D_EQUAL)
1394                  FAIL_IF(push_inst(compiler, BICC | get_cc(type) | 3, UNMOVABLE_INS));                  FAIL_IF(push_inst(compiler, BICC | get_cc(type) | 3, UNMOVABLE_INS));
1395          else          else
1396                  FAIL_IF(push_inst(compiler, FBFCC | get_cc(type) | 3, UNMOVABLE_INS));                  FAIL_IF(push_inst(compiler, FBFCC | get_cc(type) | 3, UNMOVABLE_INS));
# Line 1444  SLJIT_API_FUNC_ATTRIBUTE struct sljit_co Line 1413  SLJIT_API_FUNC_ATTRIBUTE struct sljit_co
1413          struct sljit_const *const_;          struct sljit_const *const_;
1414    
1415          CHECK_ERROR_PTR();          CHECK_ERROR_PTR();
1416          check_sljit_emit_const(compiler, dst, dstw, init_value);          CHECK_PTR(check_sljit_emit_const(compiler, dst, dstw, init_value));
1417          ADJUST_LOCAL_OFFSET(dst, dstw);          ADJUST_LOCAL_OFFSET(dst, dstw);
1418    
1419          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