diff --git a/compiler/hlcg2ll.pas b/compiler/hlcg2ll.pas index 23dbcaf678..374872336c 100644 --- a/compiler/hlcg2ll.pas +++ b/compiler/hlcg2ll.pas @@ -331,7 +331,10 @@ unit hlcg2ll; procedure gen_load_cgpara_loc(list: TAsmList; vardef: tdef; const para: TCGPara; var destloc: tlocation; reusepara: boolean); override; protected - function getmmcgsize(reg: tregister; size: tcgsize): tcgsize; virtual; + { returns the equivalent MM size for a vector register that contains + a record, because in that case "size" will contain a cgsize + representing an integer size} + function getintmmcgsize(reg: tregister; size: tcgsize): tcgsize; virtual; end; @@ -670,7 +673,7 @@ implementation { sanity check } if def_cgsize(fromsize)<>loc.size then internalerror(2012071226); - tocgsize:=getmmcgsize(reg,def_cgsize(tosize)); + tocgsize:=getintmmcgsize(reg,def_cgsize(tosize)); case loc.loc of LOC_SUBSETREG,LOC_CSUBSETREG, LOC_SUBSETREF,LOC_CSUBSETREF: @@ -692,8 +695,8 @@ implementation { no vector support yet } if shuffle<>mms_movescalar then internalerror(2012062305); - fromcgsize:=getmmcgsize(reg1,def_cgsize(fromsize)); - tocgsize:=getmmcgsize(reg2,def_cgsize(tosize)); + fromcgsize:=getintmmcgsize(reg1,def_cgsize(fromsize)); + tocgsize:=getintmmcgsize(reg2,def_cgsize(tosize)); { records may be stored in mmregisters, but def_cgsize will return an integer size for them... } cg.a_loadmm_reg_reg(list,fromcgsize,tocgsize,reg1,reg2,shuffle); @@ -708,7 +711,7 @@ implementation internalerror(2012062306); { records may be stored in mmregisters, but def_cgsize will return an integer size for them... } - tocgsize:=getmmcgsize(reg,def_cgsize(tosize)); + tocgsize:=getintmmcgsize(reg,def_cgsize(tosize)); cg.a_loadmm_ref_reg(list,def_cgsize(fromsize),tocgsize,ref,reg,shuffle); end; @@ -721,7 +724,7 @@ implementation internalerror(2012062307); { records may be stored in mmregisters, but def_cgsize will return an integer size for them... } - fromcgsize:=getmmcgsize(reg,def_cgsize(fromsize)); + fromcgsize:=getintmmcgsize(reg,def_cgsize(fromsize)); cg.a_loadmm_reg_ref(list,fromcgsize,def_cgsize(tosize),reg,ref,shuffle); end; @@ -737,7 +740,7 @@ implementation internalerror(2012071216); { records may be stored in mmregisters, but def_cgsize will return an integer size for them... } - fromcgsize:=getmmcgsize(reg,def_cgsize(fromsize)); + fromcgsize:=getintmmcgsize(reg,def_cgsize(fromsize)); cg.a_loadmm_reg_loc(list,fromcgsize,reg,loc,shuffle); end; @@ -750,7 +753,7 @@ implementation internalerror(2012071217); { records may be stored in mmregisters, but def_cgsize will return an integer size for them... } - fromcgsize:=getmmcgsize(reg,def_cgsize(fromsize)); + fromcgsize:=getintmmcgsize(reg,def_cgsize(fromsize)); cg.a_loadmm_reg_cgpara(list,fromcgsize,reg,cgpara,shuffle); end; @@ -814,7 +817,7 @@ implementation internalerror(2012071227); { records may be stored in mmregisters, but def_cgsize will return an integer size for them... } - tocgsize:=getmmcgsize(mmreg,def_cgsize(tosize)); + tocgsize:=getintmmcgsize(mmreg,def_cgsize(tosize)); cg.a_loadmm_intreg_reg(list,def_cgsize(fromsize),tocgsize,intreg,mmreg,shuffle); end; @@ -827,7 +830,7 @@ implementation internalerror(2012071228); { records may be stored in mmregisters, but def_cgsize will return an integer size for them... } - fromcgsize:=getmmcgsize(mmreg,def_cgsize(fromsize)); + fromcgsize:=getintmmcgsize(mmreg,def_cgsize(fromsize)); cg.a_loadmm_reg_intreg(list,fromcgsize,def_cgsize(tosize),mmreg,intreg,shuffle); end; @@ -1559,7 +1562,7 @@ implementation ncgutil.gen_load_cgpara_loc(list, vardef, para, destloc, reusepara); end; - function thlcg2ll.getmmcgsize(reg: tregister; size: tcgsize): tcgsize; + function thlcg2ll.getintmmcgsize(reg: tregister; size: tcgsize): tcgsize; begin result:=size; if getregtype(reg)=R_MMREGISTER then