* strip block instructions

This commit is contained in:
Nikolay Nikolov 2023-10-18 03:47:58 +03:00
parent ce742b5b4d
commit d50ef3381f

View File

@ -42,6 +42,7 @@ interface
function ConvertBranchTargetNumbersToLabels(ai: tai; blockstack: twasmstruc_stack): TAsmMapFuncResult;
function ConvertIfToBrIf(ai: tai; blockstack: twasmstruc_stack): TAsmMapFuncResult;
function ConvertLoopToBr(ai: tai; blockstack: twasmstruc_stack): TAsmMapFuncResult;
function StripBlockInstructions(ai: tai; blockstack: twasmstruc_stack): TAsmMapFuncResult;
{ used for allocating locals during the postprocess_code stage (i.e. after register allocation) }
function AllocWasmLocal(wbt: TWasmBasicType): Integer;
@ -401,6 +402,18 @@ implementation
end;
end;
function tcpuprocinfo.StripBlockInstructions(ai: tai; blockstack: twasmstruc_stack): TAsmMapFuncResult;
var
instr: taicpu;
begin
result.typ:=amfrtNoChange;
if ai.typ<>ait_instruction then
exit;
instr:=taicpu(ai);
if instr.opcode in [a_block,a_end_block] then
result.typ:=amfrtDeleteAi;
end;
function tcpuprocinfo.AllocWasmLocal(wbt: TWasmBasicType): Integer;
begin
SetLength(FAllocatedLocals,Length(FAllocatedLocals)+1);
@ -674,6 +687,8 @@ implementation
wasm_convert_to_flat_asmlist(asmlist,l2);
asmlist.Free;
asmlist:=l2;
map_structured_asmlist(asmlist,@StripBlockInstructions);
end;
function prepare_locals: TAsmList;