summaryrefslogtreecommitdiff
path: root/avx512-0037785/compiler/x86/aasmcpu.pas
diff options
context:
space:
mode:
Diffstat (limited to 'avx512-0037785/compiler/x86/aasmcpu.pas')
-rw-r--r--avx512-0037785/compiler/x86/aasmcpu.pas46
1 files changed, 33 insertions, 13 deletions
diff --git a/avx512-0037785/compiler/x86/aasmcpu.pas b/avx512-0037785/compiler/x86/aasmcpu.pas
index dd53ebbf8a..fb2384c25f 100644
--- a/avx512-0037785/compiler/x86/aasmcpu.pas
+++ b/avx512-0037785/compiler/x86/aasmcpu.pas
@@ -968,7 +968,7 @@ implementation
while (localsize>0) do
begin
{$ifndef i8086}
- if CPUX86_HAS_CMOV in cpu_capabilities[current_settings.cputype] then
+ if (CPUX86_HAS_CMOV in cpu_capabilities[current_settings.cputype]) then
begin
for j:=low(alignarray_cmovcpus) to high(alignarray_cmovcpus) do
if (localsize>=length(alignarray_cmovcpus[j])) then
@@ -2140,7 +2140,7 @@ implementation
case aIsEVEXW1 of
false: if aIsVector512 then tuplesize := 32;
else
- Internalerror(2019081003);
+ Internalerror(2019081013);
end;
end
else if IF_THVM in aInsEntry^.Flags then
@@ -2818,7 +2818,7 @@ implementation
if ((input.ref^.index<>NR_NO) and (getregtype(input.ref^.index)=R_MMREGISTER) and (input.ref^.base<>NR_NO) and (getregtype(input.ref^.base)<>R_INTREGISTER)) or // vector memory (AVX2)
((input.ref^.index<>NR_NO) and (getregtype(input.ref^.index)<>R_INTREGISTER) and (getregtype(input.ref^.index)<>R_MMREGISTER)) or
((input.ref^.base<>NR_NO) and (getregtype(input.ref^.base)<>R_INTREGISTER)) then
- internalerror(200301081);
+ internalerror(2003010802);
ir:=input.ref^.index;
@@ -2992,7 +2992,7 @@ implementation
result:=false;
if ((input.ref^.index<>NR_NO) and (getregtype(input.ref^.index)<>R_INTREGISTER)) or
((input.ref^.base<>NR_NO) and (getregtype(input.ref^.base)<>R_INTREGISTER)) then
- internalerror(200301081);
+ internalerror(2003010803);
ir:=input.ref^.index;
@@ -3859,7 +3859,7 @@ implementation
end;
end;
else
- Internalerror(2019081004);
+ Internalerror(2019081014);
end;
@@ -4320,7 +4320,7 @@ implementation
else
objdata_writereloc(currval-insend,2,nil,currabsreloc)
{$else i8086}
- InternalError(777006);
+ InternalError(2020100821);
{$endif i8086}
end;
&64,&65,&66 : // 064..066 - select between 16/32 address mode, but we support only 32 (only 16 on i8086)
@@ -4477,7 +4477,7 @@ implementation
else
InternalError(2015041503);
{$else i8086}
- InternalError(777006);
+ InternalError(2020100822);
{$endif i8086}
end;
else
@@ -4772,6 +4772,16 @@ implementation
R_SUBQ,
R_SUBMMWHOLE:
result:=taicpu.op_ref_reg(A_VMOVQ,S_NO,tmpref,r);
+ R_SUBMMY:
+ if ref.alignment>=32 then
+ result:=taicpu.op_ref_reg(A_VMOVDQA,S_NO,tmpref,r)
+ else
+ result:=taicpu.op_ref_reg(A_VMOVDQU,S_NO,tmpref,r);
+ R_SUBMMZ:
+ if ref.alignment>=64 then
+ result:=taicpu.op_ref_reg(A_VMOVDQA64,S_NO,tmpref,r)
+ else
+ result:=taicpu.op_ref_reg(A_VMOVDQU64,S_NO,tmpref,r);
R_SUBMMX:
result:=taicpu.op_ref_reg(A_VMOVDQU,S_NO,tmpref,r);
else
@@ -4789,10 +4799,10 @@ implementation
R_SUBMMX:
result:=taicpu.op_ref_reg(A_MOVDQA,S_NO,tmpref,r);
else
- internalerror(200506043);
+ internalerror(2005060405);
end;
else
- internalerror(200401041);
+ internalerror(2004010411);
end;
end;
@@ -4831,6 +4841,16 @@ implementation
result:=taicpu.op_reg_ref(A_VMOVSD,S_NO,r,tmpref);
R_SUBMMS:
result:=taicpu.op_reg_ref(A_VMOVSS,S_NO,r,tmpref);
+ R_SUBMMY:
+ if ref.alignment>=32 then
+ result:=taicpu.op_reg_ref(A_VMOVDQA,S_NO,r,tmpref)
+ else
+ result:=taicpu.op_reg_ref(A_VMOVDQU,S_NO,r,tmpref);
+ R_SUBMMZ:
+ if ref.alignment>=64 then
+ result:=taicpu.op_reg_ref(A_VMOVDQA64,S_NO,r,tmpref)
+ else
+ result:=taicpu.op_reg_ref(A_VMOVDQU64,S_NO,r,tmpref);
R_SUBQ,
R_SUBMMWHOLE:
result:=taicpu.op_reg_ref(A_VMOVQ,S_NO,r,tmpref);
@@ -4847,10 +4867,10 @@ implementation
R_SUBMMWHOLE:
result:=taicpu.op_reg_ref(A_MOVQ,S_NO,r,tmpref);
else
- internalerror(200506042);
+ internalerror(2005060404);
end;
else
- internalerror(200401041);
+ internalerror(2004010412);
end;
end;
@@ -5162,7 +5182,7 @@ implementation
msiYMem64: RegYMMSizeMask := RegYMMSizeMask or OT_BITS256;
msiZMem32,
msiZMem64: RegYMMSizeMask := RegYMMSizeMask or OT_BITS512;
- else InternalError(777211);
+ else InternalError(2020100823);
end;
OT_ZMMREG: case MRefInfo of
msiXMem32,
@@ -5171,7 +5191,7 @@ implementation
msiYMem64: RegZMMSizeMask := RegZMMSizeMask or OT_BITS256;
msiZMem32,
msiZMem64: RegZMMSizeMask := RegZMMSizeMask or OT_BITS512;
- else InternalError(777211);
+ else InternalError(2020100824);
end;
//else InternalError(777209);