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

Diff of /code/trunk/sljit/sljitNativePPC_32.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 47  static SLJIT_INLINE int emit_single_op(s Line 47  static SLJIT_INLINE int emit_single_op(s
47          switch (op) {          switch (op) {
48          case SLJIT_ADD:          case SLJIT_ADD:
49                  if (flags & ALT_FORM1) {                  if (flags & ALT_FORM1) {
50                            /* Flags does not set: BIN_IMM_EXTS unnecessary. */
51                          SLJIT_ASSERT(src2 == TMP_REG2);                          SLJIT_ASSERT(src2 == TMP_REG2);
52                          return push_inst(compiler, ADDI | D(dst) | A(src1) | compiler->imm);                          return push_inst(compiler, ADDI | D(dst) | A(src1) | compiler->imm);
53                  }                  }
54                  if (flags & ALT_FORM2) {                  if (flags & ALT_FORM2) {
55                            /* Flags does not set: BIN_IMM_EXTS unnecessary. */
56                          SLJIT_ASSERT(src2 == TMP_REG2);                          SLJIT_ASSERT(src2 == TMP_REG2);
57                          return push_inst(compiler, ADDIS | D(dst) | A(src1) | compiler->imm);                          return push_inst(compiler, ADDIS | D(dst) | A(src1) | compiler->imm);
58                  }                  }
# Line 58  static SLJIT_INLINE int emit_single_op(s Line 60  static SLJIT_INLINE int emit_single_op(s
60                          SLJIT_ASSERT(src2 == TMP_REG2);                          SLJIT_ASSERT(src2 == TMP_REG2);
61                          return push_inst(compiler, ADDIC | D(dst) | A(src1) | compiler->imm);                          return push_inst(compiler, ADDIC | D(dst) | A(src1) | compiler->imm);
62                  }                  }
63                    if (flags & ALT_FORM4) {
64                            /* Flags does not set: BIN_IMM_EXTS unnecessary. */
65                            FAIL_IF(push_inst(compiler, ADDI | D(dst) | A(src1) | (compiler->imm & 0xffff)));
66                            return push_inst(compiler, ADDIS | D(dst) | A(dst) | (((compiler->imm >> 16) & 0xffff) + ((compiler->imm >> 15) & 0x1)));
67                    }
68                  if (!(flags & ALT_SET_FLAGS))                  if (!(flags & ALT_SET_FLAGS))
69                          return push_inst(compiler, ADD | D(dst) | A(src1) | B(src2));                          return push_inst(compiler, ADD | D(dst) | A(src1) | B(src2));
70                  return push_inst(compiler, ADDC | OERC(ALT_SET_FLAGS) | D(dst) | A(src1) | B(src2));                  return push_inst(compiler, ADDC | OERC(ALT_SET_FLAGS) | D(dst) | A(src1) | B(src2));
# Line 72  static SLJIT_INLINE int emit_single_op(s Line 79  static SLJIT_INLINE int emit_single_op(s
79    
80          case SLJIT_SUB:          case SLJIT_SUB:
81                  if (flags & ALT_FORM1) {                  if (flags & ALT_FORM1) {
82                            /* Flags does not set: BIN_IMM_EXTS unnecessary. */
83                          SLJIT_ASSERT(src2 == TMP_REG2);                          SLJIT_ASSERT(src2 == TMP_REG2);
84                          return push_inst(compiler, SUBFIC | D(dst) | A(src1) | compiler->imm);                          return push_inst(compiler, SUBFIC | D(dst) | A(src1) | compiler->imm);
85                  }                  }
86                  if (flags & ALT_FORM2) {                  if (flags & (ALT_FORM2 | ALT_FORM3)) {
                         SLJIT_ASSERT(src2 == TMP_REG2);  
                         return push_inst(compiler, CMPI | CRD(0) | A(src1) | compiler->imm);  
                 }  
                 if (flags & ALT_FORM3) {  
87                          SLJIT_ASSERT(src2 == TMP_REG2);                          SLJIT_ASSERT(src2 == TMP_REG2);
88                          return push_inst(compiler, CMPLI | CRD(4) | A(src1) | compiler->imm);                          if (flags & ALT_FORM2)
89                                    FAIL_IF(push_inst(compiler, CMPI | CRD(0) | A(src1) | compiler->imm));
90                            if (flags & ALT_FORM3)
91                                    return push_inst(compiler, CMPLI | CRD(4) | A(src1) | compiler->imm);
92                            return SLJIT_SUCCESS;
93                    }
94                    if (flags & (ALT_FORM4 | ALT_FORM5)) {
95                            if (flags & ALT_FORM4)
96                                    FAIL_IF(push_inst(compiler, CMPL | CRD(4) | A(src1) | B(src2)));
97                            if (flags & ALT_FORM5)
98                                    FAIL_IF(push_inst(compiler, CMP | CRD(0) | A(src1) | B(src2)));
99                            return SLJIT_SUCCESS;
100                  }                  }
                 if (flags & ALT_FORM4)  
                         return push_inst(compiler, CMPL | CRD(4) | A(src1) | B(src2));  
101                  if (!(flags & ALT_SET_FLAGS))                  if (!(flags & ALT_SET_FLAGS))
102                          return push_inst(compiler, SUBF | D(dst) | A(src2) | B(src1));                          return push_inst(compiler, SUBF | D(dst) | A(src2) | B(src1));
103                  if (flags & ALT_FORM5)                  if (flags & ALT_FORM6)
104                          FAIL_IF(push_inst(compiler, CMPL | CRD(4) | A(src1) | B(src2)));                          FAIL_IF(push_inst(compiler, CMPL | CRD(4) | A(src1) | B(src2)));
105                  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));
106    

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

  ViewVC Help
Powered by ViewVC 1.1.5