+ allocate 'noreuse' locals in allocbasepointer and allocframepointer

git-svn-id: branches/wasm@47898 -
This commit is contained in:
nickysn 2020-12-30 04:02:43 +00:00
parent 158da03691
commit 253e64f66b

View File

@ -70,6 +70,7 @@ unit tgcpu;
procedure updateFirstTemp;
procedure allocLocalVarToRef(wbt: TWasmBasicType; out ref: treference);
procedure allocLocalVarNoReuseToRef(wbt: TWasmBasicType; out ref: treference);
procedure LocalVarToRef(idx: integer; size: Integer; out ref: treference);
public
localvars: TWasmLocalVars;
@ -203,12 +204,12 @@ unit tgcpu;
procedure ttgwasm.allocframepointer(list: TAsmList; out ref: treference);
begin
allocLocalVarToRef(wbt_i32,ref);
allocLocalVarNoReuseToRef(wbt_i32,ref);
end;
procedure ttgwasm.allocbasepointer(list: TAsmList; out ref: treference);
begin
allocLocalVarToRef(wbt_i32,ref);
allocLocalVarNoReuseToRef(wbt_i32,ref);
end;
procedure ttgwasm.allocLocalVarToRef(wbt: TWasmBasicType; out ref: treference);
@ -219,6 +220,14 @@ unit tgcpu;
localVarToRef(idx, 1, ref);
end;
procedure ttgwasm.allocLocalVarNoReuseToRef(wbt: TWasmBasicType; out ref: treference);
var
idx : integer;
begin
idx := localvars.allocnoreuse(wbt);
localVarToRef(idx, 1, ref);
end;
procedure ttgwasm.localVarToRef(idx: integer; size: integer; out ref: treference);
begin
reference_reset_base(ref,NR_LOCAL_STACK_POINTER_REG,idx,ctempposinvalid,size,[]);