Browse Source

+ support the memory.init and the data.drop instructions in the internal asm writer for WebAssembly

Nikolay Nikolov 3 years ago
parent
commit
0ba7ef98b3
1 changed files with 53 additions and 0 deletions
  1. 53 0
      compiler/wasm32/aasmcpu.pas

+ 53 - 0
compiler/wasm32/aasmcpu.pas

@@ -884,6 +884,30 @@ uses
                     internalerror(2021092710);
                     internalerror(2021092710);
                 end;
                 end;
             end;
             end;
+          a_memory_init:
+            begin
+              if ops<>1 then
+                internalerror(2022052802);
+              with oper[0]^ do
+                case typ of
+                  top_const:
+                    result:=3+UlebSize(val);
+                  else
+                    internalerror(2022052803);
+                end;
+            end;
+          a_data_drop:
+            begin
+              if ops<>1 then
+                internalerror(2022052804);
+              with oper[0]^ do
+                case typ of
+                  top_const:
+                    result:=2+UlebSize(val);
+                  else
+                    internalerror(2022052805);
+                end;
+            end;
           else
           else
             internalerror(2021092623);
             internalerror(2021092623);
         end;
         end;
@@ -1857,6 +1881,35 @@ uses
                     internalerror(2021092710);
                     internalerror(2021092710);
                 end;
                 end;
             end;
             end;
+          a_memory_init:
+            begin
+              WriteByte($FC);
+              WriteByte($08);
+              if ops<>1 then
+                internalerror(2022052806);
+              with oper[0]^ do
+                case typ of
+                  top_const:
+                    WriteUleb(val);
+                  else
+                    internalerror(2022052807);
+                end;
+              WriteByte($00);
+            end;
+          a_data_drop:
+            begin
+              WriteByte($FC);
+              WriteByte($09);
+              if ops<>1 then
+                internalerror(2022052808);
+              with oper[0]^ do
+                case typ of
+                  top_const:
+                    WriteUleb(val);
+                  else
+                    internalerror(2022052809);
+                end;
+            end;
           else
           else
             internalerror(2021092624);
             internalerror(2021092624);
         end;
         end;