Diff for /embedaddon/pcre/sljit/sljitLir.c between versions 1.1.1.1 and 1.1.1.2

version 1.1.1.1, 2012/02/21 23:05:52 version 1.1.1.2, 2012/02/21 23:50:25
Line 1 Line 1
 /*  /*
  *    Stack-less Just-In-Time compiler   *    Stack-less Just-In-Time compiler
  *   *
 *    Copyright 2009-2010 Zoltan Herczeg (hzmester@freemail.hu). All rights reserved. *    Copyright 2009-2012 Zoltan Herczeg (hzmester@freemail.hu). All rights reserved.
  *   *
  * Redistribution and use in source and binary forms, with or without modification, are   * Redistribution and use in source and binary forms, with or without modification, are
  * permitted provided that the following conditions are met:   * permitted provided that the following conditions are met:
Line 228  SLJIT_API_FUNC_ATTRIBUTE struct sljit_compiler* sljit_ Line 228  SLJIT_API_FUNC_ATTRIBUTE struct sljit_compiler* sljit_
         compiler->abuf->used_size = 0;          compiler->abuf->used_size = 0;
   
         compiler->temporaries = -1;          compiler->temporaries = -1;
        compiler->generals = -1;        compiler->saveds = -1;
   
 #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)  #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
         compiler->args = -1;          compiler->args = -1;
Line 475  static SLJIT_INLINE void set_const(struct sljit_const  Line 475  static SLJIT_INLINE void set_const(struct sljit_const 
 #define FUNCTION_CHECK_IS_REG(r) \  #define FUNCTION_CHECK_IS_REG(r) \
         ((r) == SLJIT_UNUSED || (r) == SLJIT_LOCALS_REG || \          ((r) == SLJIT_UNUSED || (r) == SLJIT_LOCALS_REG || \
         ((r) >= SLJIT_TEMPORARY_REG1 && (r) <= SLJIT_TEMPORARY_REG3 && (r) <= SLJIT_TEMPORARY_REG1 - 1 + compiler->temporaries) || \          ((r) >= SLJIT_TEMPORARY_REG1 && (r) <= SLJIT_TEMPORARY_REG3 && (r) <= SLJIT_TEMPORARY_REG1 - 1 + compiler->temporaries) || \
        ((r) >= SLJIT_GENERAL_REG1 && (r) <= SLJIT_GENERAL_REG3 && (r) <= SLJIT_GENERAL_REG1 - 1 + compiler->generals)) \        ((r) >= SLJIT_SAVED_REG1 && (r) <= SLJIT_SAVED_REG3 && (r) <= SLJIT_SAVED_REG1 - 1 + compiler->saveds)) \
   
 #define FUNCTION_CHECK_SRC(p, i) \  #define FUNCTION_CHECK_SRC(p, i) \
        SLJIT_ASSERT(compiler->temporaries != -1 && compiler->generals != -1); \        SLJIT_ASSERT(compiler->temporaries != -1 && compiler->saveds != -1); \
         if (((p) >= SLJIT_TEMPORARY_REG1 && (p) <= SLJIT_TEMPORARY_REG1 - 1 + compiler->temporaries) || \          if (((p) >= SLJIT_TEMPORARY_REG1 && (p) <= SLJIT_TEMPORARY_REG1 - 1 + compiler->temporaries) || \
                        ((p) >= SLJIT_GENERAL_REG1 && (p) <= SLJIT_GENERAL_REG1 - 1 + compiler->generals) || \                        ((p) >= SLJIT_SAVED_REG1 && (p) <= SLJIT_SAVED_REG1 - 1 + compiler->saveds) || \
                         (p) == SLJIT_LOCALS_REG) \                          (p) == SLJIT_LOCALS_REG) \
                 SLJIT_ASSERT(i == 0); \                  SLJIT_ASSERT(i == 0); \
         else if ((p) == SLJIT_IMM) \          else if ((p) == SLJIT_IMM) \
Line 498  static SLJIT_INLINE void set_const(struct sljit_const  Line 498  static SLJIT_INLINE void set_const(struct sljit_const 
                 SLJIT_ASSERT_STOP();                  SLJIT_ASSERT_STOP();
   
 #define FUNCTION_CHECK_DST(p, i) \  #define FUNCTION_CHECK_DST(p, i) \
        SLJIT_ASSERT(compiler->temporaries != -1 && compiler->generals != -1); \        SLJIT_ASSERT(compiler->temporaries != -1 && compiler->saveds != -1); \
         if (((p) >= SLJIT_TEMPORARY_REG1 && (p) <= SLJIT_TEMPORARY_REG1 - 1 + compiler->temporaries) || \          if (((p) >= SLJIT_TEMPORARY_REG1 && (p) <= SLJIT_TEMPORARY_REG1 - 1 + compiler->temporaries) || \
                        ((p) >= SLJIT_GENERAL_REG1 && (p) <= SLJIT_GENERAL_REG1 - 1 + compiler->generals) || \                        ((p) >= SLJIT_SAVED_REG1 && (p) <= SLJIT_SAVED_REG1 - 1 + compiler->saveds) || \
                         (p) == SLJIT_UNUSED) \                          (p) == SLJIT_UNUSED) \
                 SLJIT_ASSERT(i == 0); \                  SLJIT_ASSERT(i == 0); \
         else if ((p) & SLJIT_MEM) { \          else if ((p) & SLJIT_MEM) { \
Line 551  SLJIT_API_FUNC_ATTRIBUTE void sljit_compiler_verbose(s Line 551  SLJIT_API_FUNC_ATTRIBUTE void sljit_compiler_verbose(s
 }  }
   
 static char* reg_names[] = {  static char* reg_names[] = {
        (char*)"<noreg>", (char*)"tmp_r1", (char*)"tmp_r2", (char*)"tmp_r3",        (char*)"<noreg>", (char*)"t1", (char*)"t2", (char*)"t3",
        (char*)"tmp_er1", (char*)"tmp_er2", (char*)"gen_r1", (char*)"gen_r2",        (char*)"te1", (char*)"te2", (char*)"s1", (char*)"s2",
        (char*)"gen_r3", (char*)"gen_er1", (char*)"gen_er2", (char*)"stack_r"        (char*)"s3", (char*)"se1", (char*)"se2", (char*)"lcr"
 };  };
   
 static char* freg_names[] = {  static char* freg_names[] = {
Line 616  static char* freg_names[] = { Line 616  static char* freg_names[] = {
 static SLJIT_CONST char* op_names[] = {  static SLJIT_CONST char* op_names[] = {
         /* op0 */          /* op0 */
         (char*)"breakpoint", (char*)"nop",          (char*)"breakpoint", (char*)"nop",
           (char*)"umul", (char*)"smul", (char*)"udiv", (char*)"sdiv",
         /* op1 */          /* op1 */
         (char*)"mov", (char*)"mov.ub", (char*)"mov.sb", (char*)"mov.uh",          (char*)"mov", (char*)"mov.ub", (char*)"mov.sb", (char*)"mov.uh",
         (char*)"mov.sh", (char*)"mov.ui", (char*)"mov.si", (char*)"movu",          (char*)"mov.sh", (char*)"mov.ui", (char*)"mov.si", (char*)"movu",
Line 673  static SLJIT_INLINE void check_sljit_generate_code(str Line 674  static SLJIT_INLINE void check_sljit_generate_code(str
 #endif  #endif
 }  }
   
static SLJIT_INLINE void check_sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int generals, int local_size)static SLJIT_INLINE void check_sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
 {  {
         /* If debug and verbose are disabled, all arguments are unused. */          /* If debug and verbose are disabled, all arguments are unused. */
         SLJIT_UNUSED_ARG(compiler);          SLJIT_UNUSED_ARG(compiler);
         SLJIT_UNUSED_ARG(args);          SLJIT_UNUSED_ARG(args);
         SLJIT_UNUSED_ARG(temporaries);          SLJIT_UNUSED_ARG(temporaries);
        SLJIT_UNUSED_ARG(generals);        SLJIT_UNUSED_ARG(saveds);
         SLJIT_UNUSED_ARG(local_size);          SLJIT_UNUSED_ARG(local_size);
   
         SLJIT_ASSERT(args >= 0 && args <= 3);          SLJIT_ASSERT(args >= 0 && args <= 3);
         SLJIT_ASSERT(temporaries >= 0 && temporaries <= SLJIT_NO_TMP_REGISTERS);          SLJIT_ASSERT(temporaries >= 0 && temporaries <= SLJIT_NO_TMP_REGISTERS);
        SLJIT_ASSERT(generals >= 0 && generals <= SLJIT_NO_GEN_REGISTERS);        SLJIT_ASSERT(saveds >= 0 && saveds <= SLJIT_NO_GEN_REGISTERS);
        SLJIT_ASSERT(args <= generals);        SLJIT_ASSERT(args <= saveds);
         SLJIT_ASSERT(local_size >= 0 && local_size <= SLJIT_MAX_LOCAL_SIZE);          SLJIT_ASSERT(local_size >= 0 && local_size <= SLJIT_MAX_LOCAL_SIZE);
 #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)  #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
         if (SLJIT_UNLIKELY(!!compiler->verbose))          if (SLJIT_UNLIKELY(!!compiler->verbose))
                fprintf(compiler->verbose, "  enter args=%d temporaries=%d generals=%d local_size=%d\n", args, temporaries, generals, local_size);                fprintf(compiler->verbose, "  enter args=%d temporaries=%d saveds=%d local_size=%d\n", args, temporaries, saveds, local_size);
 #endif  #endif
 }  }
   
static SLJIT_INLINE void check_sljit_fake_enter(struct sljit_compiler *compiler, int args, int temporaries, int generals, int local_size)static SLJIT_INLINE void check_sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
 {  {
         /* If debug and verbose are disabled, all arguments are unused. */          /* If debug and verbose are disabled, all arguments are unused. */
         SLJIT_UNUSED_ARG(compiler);          SLJIT_UNUSED_ARG(compiler);
         SLJIT_UNUSED_ARG(args);          SLJIT_UNUSED_ARG(args);
         SLJIT_UNUSED_ARG(temporaries);          SLJIT_UNUSED_ARG(temporaries);
        SLJIT_UNUSED_ARG(generals);        SLJIT_UNUSED_ARG(saveds);
         SLJIT_UNUSED_ARG(local_size);          SLJIT_UNUSED_ARG(local_size);
   
         SLJIT_ASSERT(args >= 0 && args <= 3);          SLJIT_ASSERT(args >= 0 && args <= 3);
         SLJIT_ASSERT(temporaries >= 0 && temporaries <= SLJIT_NO_TMP_REGISTERS);          SLJIT_ASSERT(temporaries >= 0 && temporaries <= SLJIT_NO_TMP_REGISTERS);
        SLJIT_ASSERT(generals >= 0 && generals <= SLJIT_NO_GEN_REGISTERS);        SLJIT_ASSERT(saveds >= 0 && saveds <= SLJIT_NO_GEN_REGISTERS);
        SLJIT_ASSERT(args <= generals);        SLJIT_ASSERT(args <= saveds);
         SLJIT_ASSERT(local_size >= 0 && local_size <= SLJIT_MAX_LOCAL_SIZE);          SLJIT_ASSERT(local_size >= 0 && local_size <= SLJIT_MAX_LOCAL_SIZE);
 #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)  #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
         if (SLJIT_UNLIKELY(!!compiler->verbose))          if (SLJIT_UNLIKELY(!!compiler->verbose))
                fprintf(compiler->verbose, "  fake_enter args=%d temporaries=%d generals=%d local_size=%d\n", args, temporaries, generals, local_size);                fprintf(compiler->verbose, "  fake_enter args=%d temporaries=%d saveds=%d local_size=%d\n", args, temporaries, saveds, local_size);
 #endif  #endif
 }  }
   
static SLJIT_INLINE void check_sljit_emit_return(struct sljit_compiler *compiler, int src, sljit_w srcw)static SLJIT_INLINE void check_sljit_emit_return(struct sljit_compiler *compiler, int op, int src, sljit_w srcw)
 {  {
         /* If debug and verbose are disabled, all arguments are unused. */          /* If debug and verbose are disabled, all arguments are unused. */
         SLJIT_UNUSED_ARG(compiler);          SLJIT_UNUSED_ARG(compiler);
           SLJIT_UNUSED_ARG(op);
         SLJIT_UNUSED_ARG(src);          SLJIT_UNUSED_ARG(src);
         SLJIT_UNUSED_ARG(srcw);          SLJIT_UNUSED_ARG(srcw);
   
 #if (defined SLJIT_DEBUG && SLJIT_DEBUG)  #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
        if (src != SLJIT_UNUSED) {        if (op != SLJIT_UNUSED) {
                 SLJIT_ASSERT(op >= SLJIT_MOV && op <= SLJIT_MOV_SI);
                 FUNCTION_CHECK_SRC(src, srcw);                  FUNCTION_CHECK_SRC(src, srcw);
         }          }
         else          else
                SLJIT_ASSERT(srcw == 0);                SLJIT_ASSERT(src == 0 && srcw == 0);
 #endif  #endif
 #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)  #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
         if (SLJIT_UNLIKELY(!!compiler->verbose)) {          if (SLJIT_UNLIKELY(!!compiler->verbose)) {
                fprintf(compiler->verbose, "  return ");                if (op == SLJIT_UNUSED)
                sljit_verbose_param(src, srcw);                        fprintf(compiler->verbose, "  return\n");
                fprintf(compiler->verbose, "\n");                else {
                         fprintf(compiler->verbose, "  return %s ", op_names[op]);
                         sljit_verbose_param(src, srcw);
                         fprintf(compiler->verbose, "\n");
                 }
         }          }
 #endif  #endif
 }  }
   
static SLJIT_INLINE void check_sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw, int args, int temporaries, int generals, int local_size)static SLJIT_INLINE void check_sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw, int args, int temporaries, int saveds, int local_size)
 {  {
         /* If debug and verbose are disabled, all arguments are unused. */          /* If debug and verbose are disabled, all arguments are unused. */
         SLJIT_UNUSED_ARG(compiler);          SLJIT_UNUSED_ARG(compiler);
Line 744  static SLJIT_INLINE void check_sljit_emit_fast_enter(s Line 751  static SLJIT_INLINE void check_sljit_emit_fast_enter(s
         SLJIT_UNUSED_ARG(dstw);          SLJIT_UNUSED_ARG(dstw);
         SLJIT_UNUSED_ARG(args);          SLJIT_UNUSED_ARG(args);
         SLJIT_UNUSED_ARG(temporaries);          SLJIT_UNUSED_ARG(temporaries);
        SLJIT_UNUSED_ARG(generals);        SLJIT_UNUSED_ARG(saveds);
         SLJIT_UNUSED_ARG(local_size);          SLJIT_UNUSED_ARG(local_size);
   
         SLJIT_ASSERT(args >= 0 && args <= 3);          SLJIT_ASSERT(args >= 0 && args <= 3);
         SLJIT_ASSERT(temporaries >= 0 && temporaries <= SLJIT_NO_TMP_REGISTERS);          SLJIT_ASSERT(temporaries >= 0 && temporaries <= SLJIT_NO_TMP_REGISTERS);
        SLJIT_ASSERT(generals >= 0 && generals <= SLJIT_NO_GEN_REGISTERS);        SLJIT_ASSERT(saveds >= 0 && saveds <= SLJIT_NO_GEN_REGISTERS);
        SLJIT_ASSERT(args <= generals);        SLJIT_ASSERT(args <= saveds);
         SLJIT_ASSERT(local_size >= 0 && local_size <= SLJIT_MAX_LOCAL_SIZE);          SLJIT_ASSERT(local_size >= 0 && local_size <= SLJIT_MAX_LOCAL_SIZE);
 #if (defined SLJIT_DEBUG && SLJIT_DEBUG)  #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
         compiler->temporaries = temporaries;          compiler->temporaries = temporaries;
        compiler->generals = generals;        compiler->saveds = saveds;
         FUNCTION_CHECK_DST(dst, dstw);          FUNCTION_CHECK_DST(dst, dstw);
         compiler->temporaries = -1;          compiler->temporaries = -1;
        compiler->generals = -1;        compiler->saveds = -1;
 #endif  #endif
 #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)  #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
         if (SLJIT_UNLIKELY(!!compiler->verbose)) {          if (SLJIT_UNLIKELY(!!compiler->verbose)) {
                 fprintf(compiler->verbose, "  fast_enter ");                  fprintf(compiler->verbose, "  fast_enter ");
                 sljit_verbose_param(dst, dstw);                  sljit_verbose_param(dst, dstw);
                fprintf(compiler->verbose, " args=%d temporaries=%d generals=%d local_size=%d\n", args, temporaries, generals, local_size);                fprintf(compiler->verbose, " args=%d temporaries=%d saveds=%d local_size=%d\n", args, temporaries, saveds, local_size);
         }          }
 #endif  #endif
 }  }
Line 793  static SLJIT_INLINE void check_sljit_emit_op0(struct s Line 800  static SLJIT_INLINE void check_sljit_emit_op0(struct s
         SLJIT_UNUSED_ARG(compiler);          SLJIT_UNUSED_ARG(compiler);
         SLJIT_UNUSED_ARG(op);          SLJIT_UNUSED_ARG(op);
   
        SLJIT_ASSERT(op >= SLJIT_BREAKPOINT && op <= SLJIT_NOP);        SLJIT_ASSERT((op >= SLJIT_BREAKPOINT && op <= SLJIT_SMUL)
                 || ((op & ~SLJIT_INT_OP) >= SLJIT_UDIV && (op & ~SLJIT_INT_OP) <= SLJIT_SDIV));
 #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)  #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
         if (SLJIT_UNLIKELY(!!compiler->verbose))          if (SLJIT_UNLIKELY(!!compiler->verbose))
                fprintf(compiler->verbose, "  %s\n", op_names[op]);                fprintf(compiler->verbose, "  %s%s\n", !(op & SLJIT_INT_OP) ? "" : "i", op_names[GET_OPCODE(op)]);
 #endif  #endif
 }  }
   
Line 812  static SLJIT_INLINE void check_sljit_emit_op1(struct s Line 820  static SLJIT_INLINE void check_sljit_emit_op1(struct s
         SLJIT_UNUSED_ARG(src);          SLJIT_UNUSED_ARG(src);
         SLJIT_UNUSED_ARG(srcw);          SLJIT_UNUSED_ARG(srcw);
   
   #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) || (defined SLJIT_DEBUG && SLJIT_DEBUG)
           if (SLJIT_UNLIKELY(compiler->skip_checks)) {
                   compiler->skip_checks = 0;
                   return;
           }
   #endif
   
         SLJIT_ASSERT(GET_OPCODE(op) >= SLJIT_MOV && GET_OPCODE(op) <= SLJIT_CLZ);          SLJIT_ASSERT(GET_OPCODE(op) >= SLJIT_MOV && GET_OPCODE(op) <= SLJIT_CLZ);
 #if (defined SLJIT_DEBUG && SLJIT_DEBUG)  #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
         FUNCTION_CHECK_OP();          FUNCTION_CHECK_OP();
Line 874  static SLJIT_INLINE void check_sljit_emit_op2(struct s Line 889  static SLJIT_INLINE void check_sljit_emit_op2(struct s
 #endif  #endif
 }  }
   
   static SLJIT_INLINE void check_sljit_get_register_index(int reg)
   {
           SLJIT_UNUSED_ARG(reg);
           SLJIT_ASSERT(reg > 0 && reg <= SLJIT_NO_REGISTERS);
   }
   
   static SLJIT_INLINE void check_sljit_emit_op_custom(struct sljit_compiler *compiler,
           void *instruction, int size)
   {
           SLJIT_UNUSED_ARG(compiler);
           SLJIT_UNUSED_ARG(instruction);
           SLJIT_UNUSED_ARG(size);
           SLJIT_ASSERT(instruction);
   }
   
 static SLJIT_INLINE void check_sljit_emit_fop1(struct sljit_compiler *compiler, int op,  static SLJIT_INLINE void check_sljit_emit_fop1(struct sljit_compiler *compiler, int op,
         int dst, sljit_w dstw,          int dst, sljit_w dstw,
         int src, sljit_w srcw)          int src, sljit_w srcw)
Line 886  static SLJIT_INLINE void check_sljit_emit_fop1(struct  Line 916  static SLJIT_INLINE void check_sljit_emit_fop1(struct 
         SLJIT_UNUSED_ARG(src);          SLJIT_UNUSED_ARG(src);
         SLJIT_UNUSED_ARG(srcw);          SLJIT_UNUSED_ARG(srcw);
   
   #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) || (defined SLJIT_DEBUG && SLJIT_DEBUG)
           if (SLJIT_UNLIKELY(compiler->skip_checks)) {
                   compiler->skip_checks = 0;
                   return;
           }
   #endif
   
         SLJIT_ASSERT(sljit_is_fpu_available());          SLJIT_ASSERT(sljit_is_fpu_available());
         SLJIT_ASSERT(GET_OPCODE(op) >= SLJIT_FCMP && GET_OPCODE(op) <= SLJIT_FABS);          SLJIT_ASSERT(GET_OPCODE(op) >= SLJIT_FCMP && GET_OPCODE(op) <= SLJIT_FABS);
 #if (defined SLJIT_DEBUG && SLJIT_DEBUG)  #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
Line 1001  static SLJIT_INLINE void check_sljit_emit_cmp(struct s Line 1038  static SLJIT_INLINE void check_sljit_emit_cmp(struct s
 #endif  #endif
 }  }
   
   static SLJIT_INLINE void check_sljit_emit_fcmp(struct sljit_compiler *compiler, int type,
           int src1, sljit_w src1w,
           int src2, sljit_w src2w)
   {
           SLJIT_UNUSED_ARG(compiler);
           SLJIT_UNUSED_ARG(type);
           SLJIT_UNUSED_ARG(src1);
           SLJIT_UNUSED_ARG(src1w);
           SLJIT_UNUSED_ARG(src2);
           SLJIT_UNUSED_ARG(src2w);
   
           SLJIT_ASSERT(sljit_is_fpu_available());
           SLJIT_ASSERT(!(type & ~(0xff | SLJIT_REWRITABLE_JUMP)));
           SLJIT_ASSERT((type & 0xff) >= SLJIT_C_FLOAT_EQUAL && (type & 0xff) <= SLJIT_C_FLOAT_NOT_NAN);
   #if (defined SLJIT_DEBUG && SLJIT_DEBUG)
           FUNCTION_FCHECK(src1, src1w);
           FUNCTION_FCHECK(src2, src2w);
   #endif
   #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
           if (SLJIT_UNLIKELY(!!compiler->verbose)) {
                   fprintf(compiler->verbose, "  fcmp%s <%s> ", !(type & SLJIT_REWRITABLE_JUMP) ? "" : "R", jump_names[type & 0xff]);
                   sljit_verbose_fparam(src1, src1w);
                   fprintf(compiler->verbose, ", ");
                   sljit_verbose_fparam(src2, src2w);
                   fprintf(compiler->verbose, "\n");
           }
   #endif
   }
   
 static SLJIT_INLINE void check_sljit_emit_ijump(struct sljit_compiler *compiler, int type, int src, sljit_w srcw)  static SLJIT_INLINE void check_sljit_emit_ijump(struct sljit_compiler *compiler, int type, int src, sljit_w srcw)
 {  {
         /* If debug and verbose are disabled, all arguments are unused. */          /* If debug and verbose are disabled, all arguments are unused. */
Line 1067  static SLJIT_INLINE void check_sljit_emit_const(struct Line 1133  static SLJIT_INLINE void check_sljit_emit_const(struct
 #endif  #endif
 }  }
   
   static SLJIT_INLINE int emit_mov_before_return(struct sljit_compiler *compiler, int op, int src, sljit_w srcw)
   {
           /* Return if don't need to do anything. */
           if (op == SLJIT_UNUSED)
                   return SLJIT_SUCCESS;
   
   #if (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
           if (src == SLJIT_RETURN_REG && op == SLJIT_MOV)
                   return SLJIT_SUCCESS;
   #else
           if (src == SLJIT_RETURN_REG && (op == SLJIT_MOV || op == SLJIT_MOV_UI || op == SLJIT_MOV_SI))
                   return SLJIT_SUCCESS;
   #endif
   
   #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) || (defined SLJIT_DEBUG && SLJIT_DEBUG)
           compiler->skip_checks = 1;
   #endif
           return sljit_emit_op1(compiler, op, SLJIT_RETURN_REG, 0, src, srcw);
   }
   
   /* CPU description section */
   
   #if (defined SLJIT_32BIT_ARCHITECTURE && SLJIT_32BIT_ARCHITECTURE)
   #define SLJIT_CPUINFO_PART1 " 32bit ("
   #elif (defined SLJIT_64BIT_ARCHITECTURE && SLJIT_64BIT_ARCHITECTURE)
   #define SLJIT_CPUINFO_PART1 " 64bit ("
   #else
   #error "Internal error: CPU type info missing"
   #endif
   
   #if (defined SLJIT_LITTLE_ENDIAN && SLJIT_LITTLE_ENDIAN)
   #define SLJIT_CPUINFO_PART2 "little endian + "
   #elif (defined SLJIT_BIG_ENDIAN && SLJIT_BIG_ENDIAN)
   #define SLJIT_CPUINFO_PART2 "big endian + "
   #else
   #error "Internal error: CPU type info missing"
   #endif
   
   #if (defined SLJIT_UNALIGNED && SLJIT_UNALIGNED)
   #define SLJIT_CPUINFO_PART3 "unaligned)"
   #else
   #define SLJIT_CPUINFO_PART3 "aligned)"
   #endif
   
   #define SLJIT_CPUINFO SLJIT_CPUINFO_PART1 SLJIT_CPUINFO_PART2 SLJIT_CPUINFO_PART3
   
 #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)  #if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
         #include "sljitNativeX86_common.c"          #include "sljitNativeX86_common.c"
 #elif (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)  #elif (defined SLJIT_CONFIG_X86_64 && SLJIT_CONFIG_X86_64)
Line 1086  static SLJIT_INLINE void check_sljit_emit_const(struct Line 1198  static SLJIT_INLINE void check_sljit_emit_const(struct
 #endif  #endif
   
 #if !(defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)  #if !(defined SLJIT_CONFIG_MIPS_32 && SLJIT_CONFIG_MIPS_32)
   
 SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler *compiler, int type,  SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler *compiler, int type,
         int src1, sljit_w src1w,          int src1, sljit_w src1w,
         int src2, sljit_w src2w)          int src2, sljit_w src2w)
Line 1152  SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit Line 1265  SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit
 #endif  #endif
         return sljit_emit_jump(compiler, condition | (type & SLJIT_REWRITABLE_JUMP));          return sljit_emit_jump(compiler, condition | (type & SLJIT_REWRITABLE_JUMP));
 }  }
   
   SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_fcmp(struct sljit_compiler *compiler, int type,
           int src1, sljit_w src1w,
           int src2, sljit_w src2w)
   {
           int flags, condition;
   
           check_sljit_emit_fcmp(compiler, type, src1, src1w, src2, src2w);
   
           condition = type & 0xff;
           if (condition <= SLJIT_C_FLOAT_NOT_EQUAL)
                   flags = SLJIT_SET_E;
           else
                   flags = SLJIT_SET_S;
   
   #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) || (defined SLJIT_DEBUG && SLJIT_DEBUG)
           compiler->skip_checks = 1;
 #endif  #endif
           sljit_emit_fop1(compiler, SLJIT_FCMP | flags, src1, src1w, src2, src2w);
   
   #if (defined SLJIT_VERBOSE && SLJIT_VERBOSE) || (defined SLJIT_DEBUG && SLJIT_DEBUG)
           compiler->skip_checks = 1;
   #endif
           return sljit_emit_jump(compiler, condition | (type & SLJIT_REWRITABLE_JUMP));
   }
   
   #endif
   
 #else /* SLJIT_CONFIG_UNSUPPORTED */  #else /* SLJIT_CONFIG_UNSUPPORTED */
   
 /* Empty function bodies for those machines, which are not (yet) supported. */  /* Empty function bodies for those machines, which are not (yet) supported. */
Line 1205  SLJIT_API_FUNC_ATTRIBUTE void sljit_free_code(void* co Line 1344  SLJIT_API_FUNC_ATTRIBUTE void sljit_free_code(void* co
         SLJIT_ASSERT_STOP();          SLJIT_ASSERT_STOP();
 }  }
   
SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int generals, int local_size)SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_enter(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
 {  {
         SLJIT_UNUSED_ARG(compiler);          SLJIT_UNUSED_ARG(compiler);
         SLJIT_UNUSED_ARG(args);          SLJIT_UNUSED_ARG(args);
         SLJIT_UNUSED_ARG(temporaries);          SLJIT_UNUSED_ARG(temporaries);
        SLJIT_UNUSED_ARG(generals);        SLJIT_UNUSED_ARG(saveds);
         SLJIT_UNUSED_ARG(local_size);          SLJIT_UNUSED_ARG(local_size);
         SLJIT_ASSERT_STOP();          SLJIT_ASSERT_STOP();
         return SLJIT_ERR_UNSUPPORTED;          return SLJIT_ERR_UNSUPPORTED;
 }  }
   
SLJIT_API_FUNC_ATTRIBUTE void sljit_fake_enter(struct sljit_compiler *compiler, int args, int temporaries, int generals, int local_size)SLJIT_API_FUNC_ATTRIBUTE void sljit_set_context(struct sljit_compiler *compiler, int args, int temporaries, int saveds, int local_size)
 {  {
         SLJIT_UNUSED_ARG(compiler);          SLJIT_UNUSED_ARG(compiler);
         SLJIT_UNUSED_ARG(args);          SLJIT_UNUSED_ARG(args);
         SLJIT_UNUSED_ARG(temporaries);          SLJIT_UNUSED_ARG(temporaries);
        SLJIT_UNUSED_ARG(generals);        SLJIT_UNUSED_ARG(saveds);
         SLJIT_UNUSED_ARG(local_size);          SLJIT_UNUSED_ARG(local_size);
         SLJIT_ASSERT_STOP();          SLJIT_ASSERT_STOP();
 }  }
   
SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_return(struct sljit_compiler *compiler, int src, sljit_w srcw)SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_return(struct sljit_compiler *compiler, int op, int src, sljit_w srcw)
 {  {
         SLJIT_UNUSED_ARG(compiler);          SLJIT_UNUSED_ARG(compiler);
           SLJIT_UNUSED_ARG(op);
         SLJIT_UNUSED_ARG(src);          SLJIT_UNUSED_ARG(src);
         SLJIT_UNUSED_ARG(srcw);          SLJIT_UNUSED_ARG(srcw);
         SLJIT_ASSERT_STOP();          SLJIT_ASSERT_STOP();
         return SLJIT_ERR_UNSUPPORTED;          return SLJIT_ERR_UNSUPPORTED;
 }  }
   
SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw, int args, int temporaries, int generals, int local_size)SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_fast_enter(struct sljit_compiler *compiler, int dst, sljit_w dstw, int args, int temporaries, int saveds, int local_size)
 {  {
         SLJIT_UNUSED_ARG(compiler);          SLJIT_UNUSED_ARG(compiler);
         SLJIT_UNUSED_ARG(dst);          SLJIT_UNUSED_ARG(dst);
         SLJIT_UNUSED_ARG(dstw);          SLJIT_UNUSED_ARG(dstw);
         SLJIT_UNUSED_ARG(args);          SLJIT_UNUSED_ARG(args);
         SLJIT_UNUSED_ARG(temporaries);          SLJIT_UNUSED_ARG(temporaries);
        SLJIT_UNUSED_ARG(generals);        SLJIT_UNUSED_ARG(saveds);
         SLJIT_UNUSED_ARG(local_size);          SLJIT_UNUSED_ARG(local_size);
         SLJIT_ASSERT_STOP();          SLJIT_ASSERT_STOP();
         return SLJIT_ERR_UNSUPPORTED;          return SLJIT_ERR_UNSUPPORTED;
Line 1296  SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op2(struct slj Line 1436  SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op2(struct slj
         return SLJIT_ERR_UNSUPPORTED;          return SLJIT_ERR_UNSUPPORTED;
 }  }
   
   SLJIT_API_FUNC_ATTRIBUTE int sljit_get_register_index(int reg)
   {
           SLJIT_ASSERT_STOP();
           return reg;
   }
   
   SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_op_custom(struct sljit_compiler *compiler,
           void *instruction, int size)
   {
           SLJIT_UNUSED_ARG(compiler);
           SLJIT_UNUSED_ARG(instruction);
           SLJIT_UNUSED_ARG(size);
           SLJIT_ASSERT_STOP();
           return SLJIT_ERR_UNSUPPORTED;
   }
   
 SLJIT_API_FUNC_ATTRIBUTE int sljit_is_fpu_available(void)  SLJIT_API_FUNC_ATTRIBUTE int sljit_is_fpu_available(void)
 {  {
         SLJIT_ASSERT_STOP();          SLJIT_ASSERT_STOP();
Line 1349  SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit Line 1505  SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit
 }  }
   
 SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler *compiler, int type,  SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_cmp(struct sljit_compiler *compiler, int type,
           int src1, sljit_w src1w,
           int src2, sljit_w src2w)
   {
           SLJIT_UNUSED_ARG(compiler);
           SLJIT_UNUSED_ARG(type);
           SLJIT_UNUSED_ARG(src1);
           SLJIT_UNUSED_ARG(src1w);
           SLJIT_UNUSED_ARG(src2);
           SLJIT_UNUSED_ARG(src2w);
           SLJIT_ASSERT_STOP();
           return NULL;
   }
   
   SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_fcmp(struct sljit_compiler *compiler, int type,
         int src1, sljit_w src1w,          int src1, sljit_w src1w,
         int src2, sljit_w src2w)          int src2, sljit_w src2w)
 {  {

Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>