Browse Source

reverted parts of r27117 because it caused regressions

git-svn-id: trunk@27118 -
Károly Balogh 11 years ago
parent
commit
bca09a8f69
1 changed files with 12 additions and 3 deletions
  1. 12 3
      compiler/m68k/cgcpu.pas

+ 12 - 3
compiler/m68k/cgcpu.pas

@@ -837,12 +837,16 @@ unit cgcpu;
     procedure tcg68k.a_load_reg_ref(list : TAsmList;fromsize,tosize : tcgsize;register : tregister;const ref : treference);
     procedure tcg68k.a_load_reg_ref(list : TAsmList;fromsize,tosize : tcgsize;register : tregister;const ref : treference);
       var
       var
        href : treference;
        href : treference;
+       size : tcgsize;
       begin
       begin
         href := ref;
         href := ref;
         fixref(list,href);
         fixref(list,href);
+        if tcgsize2size[fromsize]<tcgsize2size[tosize] then
+          size:=fromsize
+        else
+          size:=tosize;
         { move to destination reference }
         { move to destination reference }
-        sign_extend(list, fromsize, tosize, register);
-        list.concat(taicpu.op_reg_ref(A_MOVE,TCGSize2OpSize[tosize],register,href));
+        list.concat(taicpu.op_reg_ref(A_MOVE,TCGSize2OpSize[size],register,href));
       end;
       end;
 
 
 
 
@@ -939,10 +943,15 @@ unit cgcpu;
     procedure tcg68k.a_load_ref_reg(list : TAsmList;fromsize,tosize : tcgsize;const ref : treference;register : tregister);
     procedure tcg68k.a_load_ref_reg(list : TAsmList;fromsize,tosize : tcgsize;const ref : treference;register : tregister);
       var
       var
        href : treference;
        href : treference;
+       size : tcgsize;
       begin
       begin
          href:=ref;
          href:=ref;
          fixref(list,href);
          fixref(list,href);
-         list.concat(taicpu.op_ref_reg(A_MOVE,TCGSize2OpSize[fromsize],href,register));
+         if tcgsize2size[fromsize]<tcgsize2size[tosize] then
+           size:=fromsize
+         else
+           size:=tosize;
+         list.concat(taicpu.op_ref_reg(A_MOVE,TCGSize2OpSize[size],href,register));
          { extend the value in the register }
          { extend the value in the register }
          sign_extend(list, fromsize, tosize, register);
          sign_extend(list, fromsize, tosize, register);
       end;
       end;