* create vpxor instead of pxor in avx mode

git-svn-id: trunk@45485 -
This commit is contained in:
florian 2020-05-24 17:52:06 +00:00
parent 82a3877126
commit 93eb40b05c

View File

@ -1852,6 +1852,9 @@ unit cgx86;
opmm2asmop_full : array[topcg] of tasmop = ( opmm2asmop_full : array[topcg] of tasmop = (
A_NOP,A_NOP,A_NOP,A_PAND,A_NOP,A_NOP,A_NOP,A_NOP,A_NOP,A_NOP,A_POR,A_NOP,A_NOP,A_NOP,A_NOP,A_PXOR,A_NOP,A_NOP A_NOP,A_NOP,A_NOP,A_PAND,A_NOP,A_NOP,A_NOP,A_NOP,A_NOP,A_NOP,A_POR,A_NOP,A_NOP,A_NOP,A_NOP,A_PXOR,A_NOP,A_NOP
); );
opmm2asmop_full_avx : array[topcg] of tasmop = (
A_NOP,A_NOP,A_NOP,A_VPAND,A_NOP,A_NOP,A_NOP,A_NOP,A_NOP,A_NOP,A_VPOR,A_NOP,A_NOP,A_NOP,A_NOP,A_VPXOR,A_NOP,A_NOP
);
var var
resultreg : tregister; resultreg : tregister;
asmop : tasmop; asmop : tasmop;
@ -1869,7 +1872,16 @@ unit cgx86;
internalerror(2010060101); internalerror(2010060101);
end end
else if shuffle=nil then else if shuffle=nil then
asmop:=opmm2asmop_full[op] begin
if UseAVX then
begin
asmop:=opmm2asmop_full_avx[op];
if size in [OS_M256,OS_M512] then
Include(current_procinfo.flags,pi_uses_ymm);
end
else
asmop:=opmm2asmop_full[op];
end
else if shufflescalar(shuffle) then else if shufflescalar(shuffle) then
begin begin
asmop:=opmm2asmop[0,size,op]; asmop:=opmm2asmop[0,size,op];
@ -1888,9 +1900,15 @@ unit cgx86;
LOC_CREFERENCE,LOC_REFERENCE: LOC_CREFERENCE,LOC_REFERENCE:
begin begin
make_simple_ref(current_asmdata.CurrAsmList,loc.reference); make_simple_ref(current_asmdata.CurrAsmList,loc.reference);
if UseAVX then
list.concat(taicpu.op_ref_reg_reg(asmop,S_NO,loc.reference,resultreg,resultreg))
else
list.concat(taicpu.op_ref_reg(asmop,S_NO,loc.reference,resultreg)); list.concat(taicpu.op_ref_reg(asmop,S_NO,loc.reference,resultreg));
end; end;
LOC_CMMREGISTER,LOC_MMREGISTER: LOC_CMMREGISTER,LOC_MMREGISTER:
if UseAVX then
list.concat(taicpu.op_reg_reg_reg(asmop,S_NO,loc.register,resultreg,resultreg))
else
list.concat(taicpu.op_reg_reg(asmop,S_NO,loc.register,resultreg)); list.concat(taicpu.op_reg_reg(asmop,S_NO,loc.register,resultreg));
else else
internalerror(200312214); internalerror(200312214);