From 29ee9a648d3f1e15a79d55ff673df719f53aa057 Mon Sep 17 00:00:00 2001 From: nickysn Date: Mon, 4 Jan 2021 16:51:13 +0000 Subject: [PATCH] - more JVM cleanup git-svn-id: branches/wasm@48065 - --- compiler/wasm32/hlcgcpu.pas | 220 ------------------------------------ 1 file changed, 220 deletions(-) diff --git a/compiler/wasm32/hlcgcpu.pas b/compiler/wasm32/hlcgcpu.pas index a473215e3e..5195a450b7 100644 --- a/compiler/wasm32/hlcgcpu.pas +++ b/compiler/wasm32/hlcgcpu.pas @@ -92,9 +92,6 @@ uses procedure a_jmp_always(list : TAsmList;l: tasmlabel); override; - procedure g_concatcopy(list : TAsmList;size: tdef; const source,dest : treference);override; - procedure g_copyshortstring(list : TAsmList;const source,dest : treference;strdef:tstringdef);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; procedure a_loadfpu_reg_ref(list: TAsmList; fromsize, tosize: tdef; reg: tregister; const ref: treference); override; @@ -207,12 +204,6 @@ uses { in case of an OS_32 OP_DIV, we have to use an OS_S64 OP_IDIV because the JVM does not support unsigned divisions } procedure maybepreparedivu32(list: TAsmList; var op: topcg; size: tdef; out isdivu32: boolean); - - { concatcopy helpers } - procedure concatcopy_normal_array(list: TAsmList; size: tdef; const source, dest: treference); - procedure concatcopy_record(list: TAsmList; size: tdef; const source, dest: treference); - procedure concatcopy_set(list: TAsmList; size: tdef; const source, dest: treference); - procedure concatcopy_shortstring(list: TAsmList; size: tdef; const source, dest: treference); end; implementation @@ -1166,217 +1157,6 @@ implementation Internalerror(2019091806); // unexpected jump end; - procedure thlcgwasm.concatcopy_normal_array(list: TAsmList; size: tdef; const source, dest: treference); - var - procname: string; - eledef: tdef; - ndim: longint; - adddefaultlenparas: boolean; - tmpsource, tmpdest: treference; - begin - tmpsource:=source; - tmpdest:=dest; - { load copy helper parameters on the stack } - a_load_ref_stack(list,ptruinttype,source,prepare_stack_for_ref(list,tmpsource,false)); - a_load_ref_stack(list,ptruinttype,dest,prepare_stack_for_ref(list,tmpdest,false)); - { call copy helper } - eledef:=tarraydef(size).elementdef; - ndim:=1; - adddefaultlenparas:=true; - case eledef.typ of - orddef: - begin - case torddef(eledef).ordtype of - pasbool1,pasbool8,s8bit,u8bit,bool8bit,uchar, - s16bit,u16bit,bool16bit,pasbool16, - uwidechar, - s32bit,u32bit,bool32bit,pasbool32, - s64bit,u64bit,bool64bit,pasbool64,scurrency: - procname:='FPC_COPY_SHALLOW_ARRAY' - else - internalerror(2011020504); - end; - end; - arraydef: - begin - { call fpc_setlength_dynarr_multidim with deepcopy=true, and extra - parameters } - while (eledef.typ=arraydef) and - not is_dynamic_array(eledef) do - begin - eledef:=tarraydef(eledef).elementdef; - inc(ndim) - end; - if (ndim=1) then - procname:='FPC_COPY_SHALLOW_ARRAY' - else - begin - { deepcopy=true } - a_load_const_stack(list,pasbool1type,1,R_INTREGISTER); - { ndim } - a_load_const_stack(list,s32inttype,ndim,R_INTREGISTER); - { eletype } - { todo: WASM - a_load_const_stack(list,cwidechartype,ord(jvmarrtype_setlength(eledef)),R_INTREGISTER); - } - adddefaultlenparas:=false; - procname:='FPC_SETLENGTH_DYNARR_MULTIDIM'; - end; - end; - recorddef: - procname:='FPC_COPY_JRECORD_ARRAY'; - procvardef: - if tprocvardef(eledef).is_addressonly then - procname:='FPC_COPY_SHALLOW_ARRAY' - else - procname:='FPC_COPY_JPROCVAR_ARRAY'; - setdef: - if tsetdef(eledef).elementdef.typ=enumdef then - procname:='FPC_COPY_JENUMSET_ARRAY' - else - procname:='FPC_COPY_JBITSET_ARRAY'; - floatdef: - procname:='FPC_COPY_SHALLOW_ARRAY'; - stringdef: - if is_shortstring(eledef) then - procname:='FPC_COPY_JSHORTSTRING_ARRAY' - else - procname:='FPC_COPY_SHALLOW_ARRAY'; - variantdef: - begin -{$ifndef nounsupported} - procname:='FPC_COPY_SHALLOW_ARRAY'; -{$else} - { todo: make a deep copy via clone... } - internalerror(2011020505); -{$endif} - end; - else - procname:='FPC_COPY_SHALLOW_ARRAY'; - end; - if adddefaultlenparas then - begin - { -1, -1 means "copy entire array" } - a_load_const_stack(list,s32inttype,-1,R_INTREGISTER); - a_load_const_stack(list,s32inttype,-1,R_INTREGISTER); - end; - g_call_system_proc(list,procname,[],nil); - if ndim<>1 then - begin - { pop return value, must be the same as dest } - //list.concat(taicpu.op_none(a_pop)); - Internalerror(2019083001); // no support for arrays - decstack(list,1); - end; - end; - - procedure thlcgwasm.concatcopy_record(list: TAsmList; size: tdef; const source, dest: treference); - var - srsym: tsym; - pd: tprocdef; - tmpsource, tmpdest: treference; - begin - tmpsource:=source; - tmpdest:=dest; - { self } - a_load_ref_stack(list,size,tmpsource,prepare_stack_for_ref(list,tmpsource,false)); - { result } - a_load_ref_stack(list,size,tmpdest,prepare_stack_for_ref(list,tmpdest,false)); - { call fpcDeepCopy helper } - srsym:=search_struct_member(tabstractrecorddef(size),'FPCDEEPCOPY'); - if not assigned(srsym) or - (srsym.typ<>procsym) then - Message1(cg_f_unknown_compilerproc,size.typename+'.fpcDeepCopy'); - pd:=tprocdef(tprocsym(srsym).procdeflist[0]); - a_call_name(list,pd,pd.mangledname,[],nil,false); - { both parameters are removed, no function result } - decstack(list,2); - end; - - - procedure thlcgwasm.concatcopy_set(list: TAsmList; size: tdef; const source, dest: treference); - var - tmpsource, tmpdest: treference; - begin - tmpsource:=source; - tmpdest:=dest; - a_load_ref_stack(list,size,tmpsource,prepare_stack_for_ref(list,tmpsource,false)); - a_load_ref_stack(list,size,tmpdest,prepare_stack_for_ref(list,tmpdest,false)); - { call set copy helper } - if tsetdef(size).elementdef.typ=enumdef then - g_call_system_proc(list,'fpc_enumset_copy',[],nil) - else - g_call_system_proc(list,'fpc_bitset_copy',[],nil); - end; - - - procedure thlcgwasm.concatcopy_shortstring(list: TAsmList; size: tdef; const source, dest: treference); - var - srsym: tsym; - pd: tprocdef; - tmpsource, tmpdest: treference; - begin - tmpsource:=source; - tmpdest:=dest; - { self } - a_load_ref_stack(list,size,tmpsource,prepare_stack_for_ref(list,tmpsource,false)); - { result } - a_load_ref_stack(list,size,tmpdest,prepare_stack_for_ref(list,tmpdest,false)); - { call fpcDeepCopy helper } - srsym:=search_struct_member(java_shortstring,'FPCDEEPCOPY'); - if not assigned(srsym) or - (srsym.typ<>procsym) then - Message1(cg_f_unknown_compilerproc,'ShortstringClass.FpcDeepCopy'); - pd:=tprocdef(tprocsym(srsym).procdeflist[0]); - a_call_name(list,pd,pd.mangledname,[],nil,false); - { both parameters are removed, no function result } - decstack(list,2); - end; - - procedure thlcgwasm.g_concatcopy(list: TAsmList; size: tdef; const source, dest: treference); - var - handled: boolean; - begin - handled:=false; - case size.typ of - arraydef: - begin - if not is_dynamic_array(size) then - begin - concatcopy_normal_array(list,size,source,dest); - handled:=true; - end; - end; - recorddef: - begin - concatcopy_record(list,size,source,dest); - handled:=true; - end; - setdef: - begin - concatcopy_set(list,size,source,dest); - handled:=true; - end; - stringdef: - begin - if is_shortstring(size) then - begin - concatcopy_shortstring(list,size,source,dest); - handled:=true; - end; - end; - else - ; - end; - if not handled then - inherited; - end; - - procedure thlcgwasm.g_copyshortstring(list: TAsmList; const source, dest: treference; strdef: tstringdef); - begin - concatcopy_shortstring(list,strdef,source,dest); - end; - procedure thlcgwasm.a_loadfpu_ref_ref(list: TAsmList; fromsize, tosize: tdef; const ref1, ref2: treference); var dstack_slots: longint;