Browse Source

* generate different code for OS_S8 -> OS_16 conversion which might fold better, idea by Nico Erfurth

git-svn-id: trunk@22027 -
florian 13 years ago
parent
commit
7513291ad8
1 changed files with 4 additions and 2 deletions
  1. 4 2
      compiler/arm/cgcpu.pas

+ 4 - 2
compiler/arm/cgcpu.pas

@@ -1235,8 +1235,10 @@ unit cgcpu;
                    begin
                    begin
                      if tosize=OS_16 then
                      if tosize=OS_16 then
                        begin
                        begin
-                         list.concat(taicpu.op_reg_reg_const(A_AND,reg2,reg1,$ff));
-                         list.concat(taicpu.op_reg_reg(A_SXTB16,reg2,reg2));
+                         so.shiftmode:=SM_ROR;
+                         so.shiftimm:=16;
+                         list.concat(taicpu.op_reg_reg_shifterop(A_SXTB16,reg2,reg1,so));
+                         do_shift(SM_LSR,16,reg2);
                        end
                        end
                      else
                      else
                        list.concat(taicpu.op_reg_reg(A_SXTB,reg2,reg1));
                        list.concat(taicpu.op_reg_reg(A_SXTB,reg2,reg1));