浏览代码

m68k: hopefully fix passing of smaller-than-alignment sized records/structs for stdcall/cdecl

git-svn-id: trunk@36568 -
Károly Balogh 8 年之前
父节点
当前提交
23f4304881
共有 2 个文件被更改,包括 5 次插入5 次删除
  1. 2 2
      compiler/m68k/cgcpu.pas
  2. 3 3
      compiler/m68k/cpupara.pas

+ 2 - 2
compiler/m68k/cgcpu.pas

@@ -384,8 +384,8 @@ unit cgcpu;
                 cgpara.check_simple_location;
                 cgpara.check_simple_location;
                 len:=align(cgpara.intsize,cgpara.alignment);
                 len:=align(cgpara.intsize,cgpara.alignment);
                 g_stackpointer_alloc(list,len);
                 g_stackpointer_alloc(list,len);
-                reference_reset_base(href,NR_STACK_POINTER_REG,0,cgpara.alignment,[]);
-                g_concatcopy(list,r,href,len);
+                reference_reset_base(href,NR_STACK_POINTER_REG,cgpara.location^.reference.offset,cgpara.alignment,[]);
+                g_concatcopy(list,r,href,cgpara.intsize);
               end
               end
             else
             else
               begin
               begin

+ 3 - 3
compiler/m68k/cpupara.pas

@@ -343,10 +343,10 @@ unit cpupara;
                   begin
                   begin
                     paraloc^.reference.index:=NR_FRAME_POINTER_REG;
                     paraloc^.reference.index:=NR_FRAME_POINTER_REG;
                     inc(paraloc^.reference.offset,target_info.first_parm_offset);
                     inc(paraloc^.reference.offset,target_info.first_parm_offset);
-                    { M68K is a big-endian target }
-                    if (paralen<target_info.stackalign{tcgsize2size[OS_INT]}) then
-                      inc(paraloc^.reference.offset,target_info.stackalign-paralen);
                   end;
                   end;
+                { M68K is a big-endian target }
+                if (paralen<target_info.stackalign{tcgsize2size[OS_INT]}) then
+                  inc(paraloc^.reference.offset,target_info.stackalign-paralen);
                 inc(cur_stack_offset,align(paralen,target_info.stackalign));
                 inc(cur_stack_offset,align(paralen,target_info.stackalign));
                 paralen := 0;
                 paralen := 0;