瀏覽代碼

m68k: fixed unaligned stores' predecrement addressing. also removed an unnecessary sign-extension of the tmpreg for 16bit stores

git-svn-id: trunk@33853 -
Károly Balogh 9 年之前
父節點
當前提交
2d6736e40e
共有 1 個文件被更改,包括 3 次插入4 次删除
  1. 3 4
      compiler/m68k/cgcpu.pas

+ 3 - 4
compiler/m68k/cgcpu.pas

@@ -795,7 +795,7 @@ unit cgcpu;
         inc(tmpref.offset,tcgsize2size[tosize]);
         a_loadaddr_ref_reg(list,ref,tmpreg2);
         reference_reset_base(tmpref,tmpreg2,0,1);
-        tmpref.direction:=dir_dec;
+        tmpref.direction:=dir_none;
 
         tmpreg:=getintregister(list,tosize);
         a_load_reg_reg(list,fromsize,tosize,register,tmpreg);
@@ -805,19 +805,18 @@ unit cgcpu;
             begin
               list.concat(taicpu.op_reg_ref(A_MOVE,S_B,tmpreg,tmpref));
               list.concat(taicpu.op_const_reg(A_LSR,S_W,8,tmpreg));
-              tmpref.direction:=dir_none;
+              tmpref.direction:=dir_dec;
               list.concat(taicpu.op_reg_ref(A_MOVE,S_B,tmpreg,tmpref));
-              sign_extend(list,fromsize,tmpreg);
             end;
           OS_32,OS_S32:
             begin
               list.concat(taicpu.op_reg_ref(A_MOVE,S_B,tmpreg,tmpref));
+              tmpref.direction:=dir_dec;
               list.concat(taicpu.op_const_reg(A_LSR,S_W,8,tmpreg));
               list.concat(taicpu.op_reg_ref(A_MOVE,S_B,tmpreg,tmpref));
               list.concat(taicpu.op_reg(A_SWAP,S_L,tmpreg));
               list.concat(taicpu.op_reg_ref(A_MOVE,S_B,tmpreg,tmpref));
               list.concat(taicpu.op_const_reg(A_LSR,S_W,8,tmpreg));
-              tmpref.direction:=dir_none;
               list.concat(taicpu.op_reg_ref(A_MOVE,S_B,tmpreg,tmpref));
             end
           else