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

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

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

revision 859 by zherczeg, Tue Jan 3 17:49:03 2012 UTC revision 860 by zherczeg, Mon Jan 9 20:12:58 2012 UTC
# Line 149  static SLJIT_INLINE int emit_single_op(s Line 149  static SLJIT_INLINE int emit_single_op(s
149          switch (op) {          switch (op) {
150          case SLJIT_ADD:          case SLJIT_ADD:
151                  if (flags & ALT_FORM1) {                  if (flags & ALT_FORM1) {
152                          /* Flags not set: BIN_IMM_EXTS unnecessary. */                          /* Flags does not set: BIN_IMM_EXTS unnecessary. */
153                          SLJIT_ASSERT(src2 == TMP_REG2);                          SLJIT_ASSERT(src2 == TMP_REG2);
154                          return push_inst(compiler, ADDI | D(dst) | A(src1) | compiler->imm);                          return push_inst(compiler, ADDI | D(dst) | A(src1) | compiler->imm);
155                  }                  }
156                  if (flags & ALT_FORM2) {                  if (flags & ALT_FORM2) {
157                          /* Flags not set: BIN_IMM_EXTS unnecessary. */                          /* Flags does not set: BIN_IMM_EXTS unnecessary. */
158                          SLJIT_ASSERT(src2 == TMP_REG2);                          SLJIT_ASSERT(src2 == TMP_REG2);
159                          return push_inst(compiler, ADDIS | D(dst) | A(src1) | compiler->imm);                          return push_inst(compiler, ADDIS | D(dst) | A(src1) | compiler->imm);
160                  }                  }
# Line 163  static SLJIT_INLINE int emit_single_op(s Line 163  static SLJIT_INLINE int emit_single_op(s
163                          BIN_IMM_EXTS();                          BIN_IMM_EXTS();
164                          return push_inst(compiler, ADDIC | D(dst) | A(src1) | compiler->imm);                          return push_inst(compiler, ADDIC | D(dst) | A(src1) | compiler->imm);
165                  }                  }
166                    if (flags & ALT_FORM4) {
167                            /* Flags does not set: BIN_IMM_EXTS unnecessary. */
168                            FAIL_IF(push_inst(compiler, ADDI | D(dst) | A(src1) | (compiler->imm & 0xffff)));
169                            return push_inst(compiler, ADDIS | D(dst) | A(dst) | (((compiler->imm >> 16) & 0xffff) + ((compiler->imm >> 15) & 0x1)));
170                    }
171                  if (!(flags & ALT_SET_FLAGS))                  if (!(flags & ALT_SET_FLAGS))
172                          return push_inst(compiler, ADD | D(dst) | A(src1) | B(src2));                          return push_inst(compiler, ADD | D(dst) | A(src1) | B(src2));
173                  BIN_EXTS();                  BIN_EXTS();
# Line 179  static SLJIT_INLINE int emit_single_op(s Line 184  static SLJIT_INLINE int emit_single_op(s
184    
185          case SLJIT_SUB:          case SLJIT_SUB:
186                  if (flags & ALT_FORM1) {                  if (flags & ALT_FORM1) {
187                          /* Flags not set: BIN_IMM_EXTS unnecessary. */                          /* Flags does not set: BIN_IMM_EXTS unnecessary. */
188                          SLJIT_ASSERT(src2 == TMP_REG2);                          SLJIT_ASSERT(src2 == TMP_REG2);
189                          return push_inst(compiler, SUBFIC | D(dst) | A(src1) | compiler->imm);                          return push_inst(compiler, SUBFIC | D(dst) | A(src1) | compiler->imm);
190                  }                  }
191                  if (flags & ALT_FORM2) {                  if (flags & (ALT_FORM2 | ALT_FORM3)) {
                         SLJIT_ASSERT(src2 == TMP_REG2);  
                         return push_inst(compiler, CMPI | CRD(0 | ((flags & ALT_SIGN_EXT) ? 0 : 1)) | A(src1) | compiler->imm);  
                 }  
                 if (flags & ALT_FORM3) {  
192                          SLJIT_ASSERT(src2 == TMP_REG2);                          SLJIT_ASSERT(src2 == TMP_REG2);
193                          return push_inst(compiler, CMPLI | CRD(4 | ((flags & ALT_SIGN_EXT) ? 0 : 1)) | A(src1) | compiler->imm);                          if (flags & ALT_FORM2)
194                                    FAIL_IF(push_inst(compiler, CMPI | CRD(0 | ((flags & ALT_SIGN_EXT) ? 0 : 1)) | A(src1) | compiler->imm));
195                            if (flags & ALT_FORM3)
196                                    return push_inst(compiler, CMPLI | CRD(4 | ((flags & ALT_SIGN_EXT) ? 0 : 1)) | A(src1) | compiler->imm);
197                            return SLJIT_SUCCESS;
198                    }
199                    if (flags & (ALT_FORM4 | ALT_FORM5)) {
200                            if (flags & ALT_FORM4)
201                                    FAIL_IF(push_inst(compiler, CMPL | CRD(4 | ((flags & ALT_SIGN_EXT) ? 0 : 1)) | A(src1) | B(src2)));
202                            if (flags & ALT_FORM5)
203                                    return push_inst(compiler, CMP | CRD(0 | ((flags & ALT_SIGN_EXT) ? 0 : 1)) | A(src1) | B(src2));
204                            return SLJIT_SUCCESS;
205                  }                  }
                 if (flags & ALT_FORM4)  
                         return push_inst(compiler, CMPL | CRD(4 | ((flags & ALT_SIGN_EXT) ? 0 : 1)) | A(src1) | B(src2));  
206                  if (!(flags & ALT_SET_FLAGS))                  if (!(flags & ALT_SET_FLAGS))
207                          return push_inst(compiler, SUBF | D(dst) | A(src2) | B(src1));                          return push_inst(compiler, SUBF | D(dst) | A(src2) | B(src1));
208                  BIN_EXTS();                  BIN_EXTS();
209                  if (flags & ALT_FORM5)                  if (flags & ALT_FORM6)
210                          FAIL_IF(push_inst(compiler, CMPL | CRD(4 | ((flags & ALT_SIGN_EXT) ? 0 : 1)) | A(src1) | B(src2)));                          FAIL_IF(push_inst(compiler, CMPL | CRD(4 | ((flags & ALT_SIGN_EXT) ? 0 : 1)) | A(src1) | B(src2)));
211                  return push_inst(compiler, SUBFC | OERC(ALT_SET_FLAGS) | D(dst) | A(src2) | B(src1));                  return push_inst(compiler, SUBFC | OERC(ALT_SET_FLAGS) | D(dst) | A(src2) | B(src1));
212    

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

  ViewVC Help
Powered by ViewVC 1.1.5