2
0
Эх сурвалжийг харах

* arm thumb: do not generate illegal ror instructions

git-svn-id: trunk@24439 -
florian 12 жил өмнө
parent
commit
e6489ed7d2
1 өөрчлөгдсөн 17 нэмэгдсэн , 30 устгасан
  1. 17 30
      compiler/arm/cgcpu.pas

+ 17 - 30
compiler/arm/cgcpu.pas

@@ -3909,38 +3909,25 @@ unit cgcpu;
               end
           end;
 
-        if is_thumb_imm(a) and not(op in [OP_IMUL,OP_MUL,OP_AND,OP_OR,OP_XOR]) then
-          case op of
-            OP_NEG:
-              list.concat(taicpu.op_reg_const(A_NEG,dst,a));
-            OP_NOT:
-              list.concat(taicpu.op_reg_const(A_MVN,dst,a));
-            OP_ROL:
-              begin
-                if not(size in [OS_32,OS_S32]) then
-                  internalerror(2008072801);
-                list.concat(taicpu.op_reg_const(A_ROR,dst,a));
-              end;
-            else
-              begin
-                // if cgsetflags or setflags then
-                  a_reg_alloc(list,NR_DEFAULTFLAGS);
-                list.concat(setoppostfix(
-                  taicpu.op_reg_const(op_reg_opcg2asmop[op],dst,a),op_reg_postfix[op]));
-              end;
+        if is_thumb_imm(a) and (op in [OP_ADD,OP_SUB]) then
+          begin
+             // if cgsetflags or setflags then
+             a_reg_alloc(list,NR_DEFAULTFLAGS);
+            list.concat(setoppostfix(
+              taicpu.op_reg_const(op_reg_opcg2asmop[op],dst,a),op_reg_postfix[op]));
 
-              if (cgsetflags {!!! or setflags }) and (size in [OS_8,OS_16,OS_32]) then
-                begin
-                  //!!! ovloc.loc:=LOC_FLAGS;
-                  case op of
-                    OP_ADD:
-                      //!!! ovloc.resflags:=F_CS;
-                      ;
-                    OP_SUB:
-                      //!!! ovloc.resflags:=F_CC;
-                      ;
-                  end;
+            if (cgsetflags {!!! or setflags }) and (size in [OS_8,OS_16,OS_32]) then
+              begin
+                //!!! ovloc.loc:=LOC_FLAGS;
+                case op of
+                  OP_ADD:
+                    //!!! ovloc.resflags:=F_CS;
+                    ;
+                  OP_SUB:
+                    //!!! ovloc.resflags:=F_CC;
+                    ;
                 end;
+              end;
           end
         else
           begin