Browse Source

[PATCH 74/83] resolve return type for a function

From 4df3319b48a5b94043572325d25e87ee9dedde09 Mon Sep 17 00:00:00 2001
From: Dmitry Boyarintsev <[email protected]>
Date: Tue, 29 Oct 2019 09:56:52 -0400

git-svn-id: branches/wasm@45951 -
nickysn 5 years ago
parent
commit
9478c438da
1 changed files with 22 additions and 14 deletions
  1. 22 14
      compiler/wasm/agwat.pas

+ 22 - 14
compiler/wasm/agwat.pas

@@ -38,7 +38,7 @@ interface
     ,cpubase, cgbase
     ,fmodule
     ,verbose, itcpuwasm
-    ,cfileutl;
+    ,cfileutl, tgcpu;
 
   type
      TWatInstrWriter = class;
@@ -360,20 +360,28 @@ implementation
       end;
 
     procedure TWabtTextAssembler.WriteProcResult(pd: tprocdef);
-    begin
-      if not assigned(pd) or
-        not Assigned(pd.returndef) or
-        (pd.returndef.size = 0)
-        then exit;
-
-      writer.AsmWrite(#9'(result'#9);
-      case pd.returndef.size of
-        1..4: writer.AsmWrite('i32');
-        8: writer.AsmWrite('i64');
+      var
+        bt : TWasmBasicType;
+      begin
+        if not assigned(pd) or
+          not Assigned(pd.returndef) or
+          (pd.returndef.size = 0)
+          then exit;
+
+        if not defToWasmBasic(pd.returndef, bt) then
+          bt := wbt_i32;
+
+        writer.AsmWrite(#9'(result'#9);
+        case bt of
+          wbt_i64: writer.AsmWrite('i64');
+          wbt_f32: writer.AsmWrite('f32');
+          wbt_f64: writer.AsmWrite('f64');
+        else
+          writer.AsmWrite('i32');
+        end;
+        writer.AsmWrite(')');
+        writer.AsmLn;
       end;
-      writer.AsmWrite(')');
-      writer.AsmLn;
-    end;
 
     procedure TWabtTextAssembler.WriteTree(p: TAsmList);
       var