Browse Source

m68k: FMOVEM.X stores/loads each reg as 12 bytes (96 bits) not 10 bytes (80 bits), see 68k PRM, page 5-86

git-svn-id: trunk@30061 -
Károly Balogh 10 năm trước cách đây
mục cha
commit
acaf382ea0
1 tập tin đã thay đổi với 2 bổ sung2 xóa
  1. 2 2
      compiler/m68k/cgcpu.pas

+ 2 - 2
compiler/m68k/cgcpu.pas

@@ -1873,7 +1873,7 @@ unit cgcpu;
               begin
               begin
                 { size is always longword aligned, while fsize is not }
                 { size is always longword aligned, while fsize is not }
                 inc(href.offset,size);
                 inc(href.offset,size);
-                if fsize = 10{sizeof(extended)} then
+                if fsize = 12{sizeof(extended)} then
                   list.concat(taicpu.op_reg_ref(A_FMOVE,S_FX,hfreg,href))
                   list.concat(taicpu.op_reg_ref(A_FMOVE,S_FX,hfreg,href))
                 else
                 else
                   list.concat(taicpu.op_regset_ref(A_FMOVEM,S_FX,[],[],fpuregs,href));
                   list.concat(taicpu.op_regset_ref(A_FMOVEM,S_FX,[],[],fpuregs,href));
@@ -1931,7 +1931,7 @@ unit cgcpu;
           for r:=low(saved_address_registers) to high(saved_address_registers) do
           for r:=low(saved_address_registers) to high(saved_address_registers) do
             if saved_fpu_registers[r] in rg[R_FPUREGISTER].used_in_proc then
             if saved_fpu_registers[r] in rg[R_FPUREGISTER].used_in_proc then
               begin
               begin
-                inc(fsize,10{sizeof(extended)});
+                inc(fsize,12{sizeof(extended)});
                 hfreg:=newreg(R_FPUREGISTER,saved_address_registers[r],R_SUBWHOLE);
                 hfreg:=newreg(R_FPUREGISTER,saved_address_registers[r],R_SUBWHOLE);
                 { Allocate register so the optimizer does not remove the load }
                 { Allocate register so the optimizer does not remove the load }
                 a_reg_alloc(list,hfreg);
                 a_reg_alloc(list,hfreg);