فهرست منبع

+ Xtensa: implemented tcpuparamanager.ret_in_param according to API
* fixed passing of variant parameters

git-svn-id: trunk@46728 -

florian 5 سال پیش
والد
کامیت
3eb7a13088
1فایلهای تغییر یافته به همراه27 افزوده شده و 1 حذف شده
  1. 27 1
      compiler/xtensa/cpupara.pas

+ 27 - 1
compiler/xtensa/cpupara.pas

@@ -40,6 +40,7 @@ unit cpupara;
          function create_paraloc_info(p : tabstractprocdef; side: tcallercallee):longint;override;
          function create_varargs_paraloc_info(p : tabstractprocdef; side: tcallercallee; varargspara:tvarargsparalist):longint;override;
          function get_funcretloc(p : tabstractprocdef; side: tcallercallee; forcetempdef: tdef): tcgpara;override;
+         function ret_in_param(def: tdef; pd: tabstractprocdef): boolean;override;
        private
          { the max. register depends on the used call instruction }
          maxintreg : TSuperRegister;
@@ -145,7 +146,6 @@ unit cpupara;
             exit;
           end;
         case def.typ of
-          variantdef,
           formaldef :
             result:=true;
           recorddef :
@@ -157,6 +157,7 @@ unit cpupara;
                              is_array_constructor(def);
           objectdef :
             result:=is_object(def) and (varspez = vs_const);
+          variantdef,
           setdef :
             result:=(varspez = vs_const);
           stringdef :
@@ -265,6 +266,31 @@ unit cpupara;
       end;
 
 
+    function tcpuparamanager.ret_in_param(def:tdef;pd:tabstractprocdef):boolean;
+      var
+        i: longint;
+        sym: tsym;
+        basedef: tdef;
+      begin
+        if handle_common_ret_in_param(def,pd,result) then
+          exit;
+        case def.typ of
+          arraydef,
+          objectdef,
+          stringdef,
+          setdef,
+          recorddef:
+            result:=def.size>16;
+          floatdef,
+          variantdef,
+          procvardef:
+            result:=false
+          else
+            result:=inherited ret_in_param(def,pd);
+        end;
+      end;
+
+
     function tcpuparamanager.create_paraloc_info(p : tabstractprocdef; side: tcallercallee):longint;
 
       var