Browse Source

+ introduced ttgwasm(tg).allocframepointer and .allocbasepointer

git-svn-id: branches/wasm@47888 -
nickysn 4 years ago
parent
commit
08580ed628
2 changed files with 14 additions and 3 deletions
  1. 2 3
      compiler/wasm32/hlcgcpu.pas
  2. 12 0
      compiler/wasm32/tgcpu.pas

+ 2 - 3
compiler/wasm32/hlcgcpu.pas

@@ -1673,9 +1673,8 @@ implementation
       pd:=tcpuprocdef(current_procinfo.procdef);
       g_procdef(list,pd);
 
-      { hack: we use tt_regallocator to force a local }
-      tg.gethltemp(list,voidpointertype,voidpointertype.size,tt_regallocator,pd.frame_pointer_ref);
-      tg.gethltemp(list,voidpointertype,voidpointertype.size,tt_regallocator,pd.base_pointer_ref);
+      ttgwasm(tg).allocframepointer(list,pd.frame_pointer_ref);
+      ttgwasm(tg).allocbasepointer(list,pd.base_pointer_ref);
 
       { the localsize is based on tg.lasttemp -> already in terms of stack
         slots rather than bytes }

+ 12 - 0
compiler/wasm32/tgcpu.pas

@@ -78,6 +78,8 @@ unit tgcpu;
          procedure gethltemp(list: TAsmList; def: tdef; forcesize: asizeint; temptype: ttemptype; out ref: treference); override;
          procedure gethltempmanaged(list: TAsmList; def: tdef; temptype: ttemptype; out ref: treference); override;
          procedure ungettemp(list: TAsmList; const ref : treference); override;
+         procedure allocframepointer(list: TAsmList; out ref: treference);
+         procedure allocbasepointer(list: TAsmList; out ref: treference);
        end;
 
     function defToWasmBasic(def: tdef; var wbt: TWasmBasicType): Boolean;
@@ -197,6 +199,16 @@ unit tgcpu;
           inherited;
       end;
 
+    procedure ttgwasm.allocframepointer(list: TAsmList; out ref: treference);
+      begin
+        allocLocalVarToRef(wbt_i32,ref);
+      end;
+
+    procedure ttgwasm.allocbasepointer(list: TAsmList; out ref: treference);
+      begin
+        allocLocalVarToRef(wbt_i32,ref);
+      end;
+
     procedure ttgwasm.allocLocalVarToRef(wbt: TWasmBasicType; out ref: treference);
       var
         idx : integer;