From 253e64f66bb4dbd5b0dfd4fcfc385e8ac9ba721d Mon Sep 17 00:00:00 2001 From: nickysn Date: Wed, 30 Dec 2020 04:02:43 +0000 Subject: [PATCH] + allocate 'noreuse' locals in allocbasepointer and allocframepointer git-svn-id: branches/wasm@47898 - --- compiler/wasm32/tgcpu.pas | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/compiler/wasm32/tgcpu.pas b/compiler/wasm32/tgcpu.pas index 55a75b44fd..e38f3df308 100644 --- a/compiler/wasm32/tgcpu.pas +++ b/compiler/wasm32/tgcpu.pas @@ -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,[]);