浏览代码

* Xtensa: some issues with large parameters fixed

git-svn-id: trunk@46720 -
florian 5 年之前
父节点
当前提交
47d6699a2e
共有 1 个文件被更改,包括 12 次插入5 次删除
  1. 12 5
      compiler/xtensa/cpupara.pas

+ 12 - 5
compiler/xtensa/cpupara.pas

@@ -338,12 +338,19 @@ unit cpupara;
                     paralen := paradef.size
                   else
                     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
-                      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;