Ver Fonte

m68k: try to fix some breakages caused by r36568

git-svn-id: trunk@36569 -
Károly Balogh há 8 anos atrás
pai
commit
8ed84afdd4
2 ficheiros alterados com 7 adições e 3 exclusões
  1. 5 1
      compiler/m68k/cgcpu.pas
  2. 2 2
      compiler/m68k/cpupara.pas

+ 5 - 1
compiler/m68k/cgcpu.pas

@@ -372,6 +372,7 @@ unit cgcpu;
 
       var
         len : tcgint;
+        ofs : tcgint;
         href : treference;
       begin
         { cgpara.size=OS_NO requires a copy on the stack }
@@ -384,7 +385,10 @@ unit cgcpu;
                 cgpara.check_simple_location;
                 len:=align(cgpara.intsize,cgpara.alignment);
                 g_stackpointer_alloc(list,len);
-                reference_reset_base(href,NR_STACK_POINTER_REG,cgpara.location^.reference.offset,cgpara.alignment,[]);
+                ofs:=0;
+                if cgpara.intsize<target_info.stackalign then
+                  ofs:=target_info.stackalign-cgpara.intsize;
+                reference_reset_base(href,NR_STACK_POINTER_REG,ofs,cgpara.alignment,[]);
                 g_concatcopy(list,r,href,cgpara.intsize);
               end
             else

+ 2 - 2
compiler/m68k/cpupara.pas

@@ -531,8 +531,8 @@ unit cpupara;
                                   varalign:=used_align(size_2_align(l),paraalign,paraalign);
                                   paraloc^.reference.offset:=cur_stack_offset;
                                   { M68K is a big-endian target }
-                                  if (paralen<tcgsize2size[OS_INT]) then
-                                    inc(paraloc^.reference.offset,4-paralen);
+                                  if (paralen<target_info.stackalign{tcgsize2size[OS_INT]}) then
+                                    inc(paraloc^.reference.offset,target_info.stackalign-paralen);
                                   if side=calleeside then
                                     inc(paraloc^.reference.offset,target_info.first_parm_offset);
                                   cur_stack_offset:=align(cur_stack_offset+l,varalign);