Explorar o código

* Xtensa: some issues with large parameters fixed

git-svn-id: trunk@46720 -
florian %!s(int64=5) %!d(string=hai) anos
pai
achega
47d6699a2e
Modificáronse 1 ficheiros con 12 adicións e 5 borrados
  1. 12 5
      compiler/xtensa/cpupara.pas

+ 12 - 5
compiler/xtensa/cpupara.pas

@@ -338,12 +338,19 @@ unit cpupara;
                     paralen := paradef.size
                     paralen := paradef.size
                   else
                   else
                     paralen := tcgsize2size[def_cgsize(paradef)];
                     paralen := tcgsize2size[def_cgsize(paradef)];
-                  paracgsize:=def_cgsize(paradef);
-                  { for things like formaldef }
-                  if (paracgsize=OS_NO) then
+                  if (paradef.typ in [objectdef,arraydef,recorddef,setdef,stringdef]) and
+                     not is_special_array(paradef) and
+                     (hp.varspez in [vs_value,vs_const]) then
+                    paracgsize:=int_cgsize(paralen)
+                  else
                     begin
                     begin
-                      paracgsize:=OS_ADDR;
-                      paralen := tcgsize2size[OS_ADDR];
+                      paracgsize:=def_cgsize(paradef);
+                      if (paracgsize=OS_NO) then
+                        begin
+                          paracgsize:=OS_ADDR;
+                          paralen := tcgsize2size[OS_ADDR];
+                          paradef:=voidpointertype;
+                        end;
                     end;
                     end;
                 end;
                 end;