Jelajahi Sumber

* fixed const and reg parameter passing with alignment of 2 (go32v2/os2)

git-svn-id: trunk@1307 -
peter 20 tahun lalu
induk
melakukan
affb69dd7f
1 mengubah file dengan 8 tambahan dan 2 penghapusan
  1. 8 2
      compiler/i386/cgcpu.pas

+ 8 - 2
compiler/i386/cgcpu.pas

@@ -96,7 +96,10 @@ unit cgcpu;
         if use_push(cgpara) then
           begin
             cgpara.check_simple_location;
-            pushsize:=int_cgsize(cgpara.alignment);
+            if tcgsize2size[cgpara.location^.size]>cgpara.alignment then
+              pushsize:=cgpara.location^.size
+            else
+              pushsize:=int_cgsize(cgpara.alignment);
             list.concat(taicpu.op_reg(A_PUSH,tcgsize2opsize[pushsize],makeregsize(list,r,pushsize)));
           end
         else
@@ -111,7 +114,10 @@ unit cgcpu;
         if use_push(cgpara) then
           begin
             cgpara.check_simple_location;
-            pushsize:=int_cgsize(cgpara.alignment);
+            if tcgsize2size[cgpara.location^.size]>cgpara.alignment then
+              pushsize:=cgpara.location^.size
+            else
+              pushsize:=int_cgsize(cgpara.alignment);
             list.concat(taicpu.op_const(A_PUSH,tcgsize2opsize[pushsize],a));
           end
         else