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

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

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

revision 859 by zherczeg, Wed Jan 4 17:29:11 2012 UTC revision 860 by zherczeg, Mon Jan 9 20:12:58 2012 UTC
# Line 122  typedef sljit_ui sljit_ins; Line 122  typedef sljit_ui sljit_ins;
122  #define LSR_W           0xfa20f000  #define LSR_W           0xfa20f000
123  #define LSR_WI          0xea4f0010  #define LSR_WI          0xea4f0010
124  #define MOV             0x4600  #define MOV             0x4600
125    #define MOVS            0x0000
126  #define MOVSI           0x2000  #define MOVSI           0x2000
127  #define MOVT            0xf2c00000  #define MOVT            0xf2c00000
128  #define MOVW            0xf2400000  #define MOVW            0xf2400000
129    #define MOV_W           0xea4f0000
130  #define MOV_WI          0xf04f0000  #define MOV_WI          0xf04f0000
131  #define MUL             0xfb00f000  #define MUL             0xfb00f000
132  #define MVNS            0x43c0  #define MVNS            0x43c0
# Line 617  static int emit_op_imm(struct sljit_comp Line 619  static int emit_op_imm(struct sljit_comp
619                  case SLJIT_SHL:                  case SLJIT_SHL:
620                          if (flags & ARG2_IMM) {                          if (flags & ARG2_IMM) {
621                                  imm &= 0x1f;                                  imm &= 0x1f;
622                                    if (imm == 0) {
623                                            if (!(flags & SET_FLAGS))
624                                                    return push_inst16(compiler, MOV | SET_REGS44(dst, reg));
625                                            if (IS_2_LO_REGS(dst, reg))
626                                                    return push_inst16(compiler, MOVS | RD3(dst) | RN3(reg));
627                                            return push_inst32(compiler, MOV_W | SET_FLAGS | RD4(dst) | RM4(reg));
628                                    }
629                                  if (!(flags & KEEP_FLAGS) && IS_2_LO_REGS(dst, reg))                                  if (!(flags & KEEP_FLAGS) && IS_2_LO_REGS(dst, reg))
630                                          return push_inst16(compiler, LSLSI | RD3(dst) | RN3(reg) | (imm << 6));                                          return push_inst16(compiler, LSLSI | RD3(dst) | RN3(reg) | (imm << 6));
631                                  return push_inst32(compiler, LSL_WI | (flags & SET_FLAGS) | RD4(dst) | RM4(reg) | IMM5(imm));                                  return push_inst32(compiler, LSL_WI | (flags & SET_FLAGS) | RD4(dst) | RM4(reg) | IMM5(imm));
# Line 625  static int emit_op_imm(struct sljit_comp Line 634  static int emit_op_imm(struct sljit_comp
634                  case SLJIT_LSHR:                  case SLJIT_LSHR:
635                          if (flags & ARG2_IMM) {                          if (flags & ARG2_IMM) {
636                                  imm &= 0x1f;                                  imm &= 0x1f;
637                                    if (imm == 0) {
638                                            if (!(flags & SET_FLAGS))
639                                                    return push_inst16(compiler, MOV | SET_REGS44(dst, reg));
640                                            if (IS_2_LO_REGS(dst, reg))
641                                                    return push_inst16(compiler, MOVS | RD3(dst) | RN3(reg));
642                                            return push_inst32(compiler, MOV_W | SET_FLAGS | RD4(dst) | RM4(reg));
643                                    }
644                                  if (!(flags & KEEP_FLAGS) && IS_2_LO_REGS(dst, reg))                                  if (!(flags & KEEP_FLAGS) && IS_2_LO_REGS(dst, reg))
645                                          return push_inst16(compiler, LSRSI | RD3(dst) | RN3(reg) | (imm << 6));                                          return push_inst16(compiler, LSRSI | RD3(dst) | RN3(reg) | (imm << 6));
646                                  return push_inst32(compiler, LSR_WI | (flags & SET_FLAGS) | RD4(dst) | RM4(reg) | IMM5(imm));                                  return push_inst32(compiler, LSR_WI | (flags & SET_FLAGS) | RD4(dst) | RM4(reg) | IMM5(imm));
# Line 633  static int emit_op_imm(struct sljit_comp Line 649  static int emit_op_imm(struct sljit_comp
649                  case SLJIT_ASHR:                  case SLJIT_ASHR:
650                          if (flags & ARG2_IMM) {                          if (flags & ARG2_IMM) {
651                                  imm &= 0x1f;                                  imm &= 0x1f;
652                                    if (imm == 0) {
653                                            if (!(flags & SET_FLAGS))
654                                                    return push_inst16(compiler, MOV | SET_REGS44(dst, reg));
655                                            if (IS_2_LO_REGS(dst, reg))
656                                                    return push_inst16(compiler, MOVS | RD3(dst) | RN3(reg));
657                                            return push_inst32(compiler, MOV_W | SET_FLAGS | RD4(dst) | RM4(reg));
658                                    }
659                                  if (!(flags & KEEP_FLAGS) && IS_2_LO_REGS(dst, reg))                                  if (!(flags & KEEP_FLAGS) && IS_2_LO_REGS(dst, reg))
660                                          return push_inst16(compiler, ASRSI | RD3(dst) | RN3(reg) | (imm << 6));                                          return push_inst16(compiler, ASRSI | RD3(dst) | RN3(reg) | (imm << 6));
661                                  return push_inst32(compiler, ASR_WI | (flags & SET_FLAGS) | RD4(dst) | RM4(reg) | IMM5(imm));                                  return push_inst32(compiler, ASR_WI | (flags & SET_FLAGS) | RD4(dst) | RM4(reg) | IMM5(imm));
# Line 1129  SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_ Line 1152  SLJIT_API_FUNC_ATTRIBUTE int sljit_emit_
1152          return SLJIT_SUCCESS;          return SLJIT_SUCCESS;
1153  }  }
1154    
1155  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 generals, int local_size)
1156  {  {
1157          int size;          int size;
1158    
1159          CHECK_ERROR_VOID();          CHECK_ERROR_VOID();
1160          check_sljit_fake_enter(compiler, args, temporaries, generals, local_size);          check_sljit_set_context(compiler, args, temporaries, generals, local_size);
1161    
1162          compiler->temporaries = temporaries;          compiler->temporaries = temporaries;
1163          compiler->generals = generals;          compiler->generals = generals;

Legend:
Removed from v.859  
changed lines
  Added in v.860

  ViewVC Help
Powered by ViewVC 1.1.5