mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-12-13 04:10:32 +01:00
* create vpxor instead of pxor in avx mode
git-svn-id: trunk@45485 -
This commit is contained in:
parent
82a3877126
commit
93eb40b05c
@ -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);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user