From 5486182f568f0151894a6223e8a4255a522b2376 Mon Sep 17 00:00:00 2001 From: Nikolay Nikolov <nickysn@gmail.com> Date: Sun, 22 Oct 2023 04:12:59 +0300 Subject: [PATCH] + introduced thlcgobj.a_jmp_always_pascal_goto - same as .a_jmp_always, but generated by a pascal goto statement --- compiler/hlcgobj.pas | 7 +++++++ compiler/ncgflw.pas | 2 +- compiler/wasm32/hlcgcpu.pas | 9 +++++++-- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/compiler/hlcgobj.pas b/compiler/hlcgobj.pas index bcaaa33140..653365c132 100644 --- a/compiler/hlcgobj.pas +++ b/compiler/hlcgobj.pas @@ -393,6 +393,7 @@ unit hlcgobj; procedure a_cmp_ref_loc_label(list: TAsmList; size: tdef;cmp_op: topcmp; const ref: treference; const loc: tlocation; l : tasmlabel);virtual; procedure a_jmp_always(list : TAsmList;l: tasmlabel); virtual;abstract; + procedure a_jmp_always_pascal_goto(list : TAsmList;l: tasmlabel);virtual; {$ifdef cpuflags} procedure a_jmp_flags(list : TAsmList;const f : TResFlags;l: tasmlabel); virtual; abstract; @@ -3361,6 +3362,12 @@ implementation end; + procedure thlcgobj.a_jmp_always_pascal_goto(list : TAsmList;l: tasmlabel); + begin + a_jmp_always(list,l); + end; + + procedure thlcgobj.g_exception_reason_save(list: TAsmList; fromsize, tosize: tdef; reg: tregister; const href: treference); begin a_load_reg_ref(list,fromsize,tosize,reg,href); diff --git a/compiler/ncgflw.pas b/compiler/ncgflw.pas index c65373ed65..37b6dc9dd9 100644 --- a/compiler/ncgflw.pas +++ b/compiler/ncgflw.pas @@ -473,7 +473,7 @@ implementation location_reset(location,LOC_VOID,OS_NO); include(flowcontrol,fc_gotolabel); - hlcg.a_jmp_always(current_asmdata.CurrAsmList,tcglabelnode(labelnode).getasmlabel); + hlcg.a_jmp_always_pascal_goto(current_asmdata.CurrAsmList,tcglabelnode(labelnode).getasmlabel); if not(cs_opt_size in current_settings.optimizerswitches) then current_asmdata.CurrAsmList.concat(cai_align.create_max(current_settings.alignment.jumpalign,current_settings.alignment.jumpalignskipmax)); end; diff --git a/compiler/wasm32/hlcgcpu.pas b/compiler/wasm32/hlcgcpu.pas index 9c40f7b51d..440145f649 100644 --- a/compiler/wasm32/hlcgcpu.pas +++ b/compiler/wasm32/hlcgcpu.pas @@ -103,6 +103,7 @@ uses procedure a_cmp_reg_reg_label(list: TAsmList; size: tdef; cmp_op: topcmp; reg1, reg2: tregister; l: tasmlabel); override; procedure a_jmp_always(list : TAsmList;l: tasmlabel); override; + procedure a_jmp_always_pascal_goto(list : TAsmList;l: tasmlabel); override; procedure a_loadfpu_ref_ref(list: TAsmList; fromsize, tosize: tdef; const ref1, ref2: treference); override; procedure a_loadfpu_ref_reg(list: TAsmList; fromsize, tosize: tdef; const ref: treference; reg: tregister); override; @@ -1921,8 +1922,7 @@ implementation begin if (l=current_procinfo.CurrBreakLabel) or (l=current_procinfo.CurrContinueLabel) or - (l=current_procinfo.CurrExitLabel) or - tcpuprocinfo(current_procinfo).is_goto_target(l) then + (l=current_procinfo.CurrExitLabel) then list.concat(taicpu.op_sym(a_br,l)) else begin @@ -1933,6 +1933,11 @@ implementation end; end; + procedure thlcgwasm.a_jmp_always_pascal_goto(list: TAsmList; l: tasmlabel); + begin + list.concat(taicpu.op_sym(a_br,l)); + end; + procedure thlcgwasm.a_loadfpu_ref_ref(list: TAsmList; fromsize, tosize: tdef; const ref1, ref2: treference); var dstack_slots: longint;