Browse Source

* fixed functions returning int64 on i8086

git-svn-id: branches/i8086@23807 -
nickysn 12 years ago
parent
commit
4ea86a445e
1 changed files with 11 additions and 0 deletions
  1. 11 0
      compiler/i8086/cpupara.pas

+ 11 - 0
compiler/i8086/cpupara.pas

@@ -149,6 +149,15 @@ unit cpupara;
               end;
               end;
             end;
             end;
         end;
         end;
+
+        { 64-bit types are returned as a parameter pointer, since putting them
+          in registers would require 4 registers on the i8086 }
+        if def.size > 4 then
+          begin
+            result:=true;
+            exit;
+          end;
+
         result:=inherited ret_in_param(def,pd);
         result:=inherited ret_in_param(def,pd);
       end;
       end;
 
 
@@ -373,6 +382,8 @@ unit cpupara;
           begin
           begin
             paraloc:=result.add_location;
             paraloc:=result.add_location;
             paraloc^.loc:=LOC_REGISTER;
             paraloc^.loc:=LOC_REGISTER;
+            if retcgsize in [OS_64,OS_S64] then
+              internalerror(2013031201);
             if retcgsize in [OS_32,OS_S32] then
             if retcgsize in [OS_32,OS_S32] then
              begin
              begin
                { low 16bits }
                { low 16bits }