mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-25 10:29:42 +02:00
preparing for bugfix 35700 and cleanup
git-svn-id: branches/tg74/avx512merge@42834 -
This commit is contained in:
parent
06e5149972
commit
6a9e48c904
@ -353,9 +353,9 @@ interface
|
||||
Ch : set of TInsChange;
|
||||
end;
|
||||
|
||||
TMemRefSizeInfo = (msiUnkown, msiUnsupported, msiNoSize,
|
||||
msiMultiple, msiMultiple8, msiMultiple16, msiMultiple32,
|
||||
msiMultiple64, msiMultiple128, msiMultiple256, msiMultiple512,
|
||||
TMemRefSizeInfo = (msiUnknown, msiUnsupported, msiNoSize, msiNoMemRef,
|
||||
msiMultiple, msiMultipleMinSize8, msiMultipleMinSize16, msiMultipleMinSize32,
|
||||
msiMultipleMinSize64, msiMultipleMinSize128, msiMultipleminSize256, msiMultipleMinSize512,
|
||||
msiMemRegSize, msiMemRegx16y32, msiMemRegx16y32z64, msiMemRegx32y64, msiMemRegx32y64z128, msiMemRegx64y128, msiMemRegx64y128z256,
|
||||
msiMemRegx64y256, msiMemRegx64y256z512,
|
||||
msiMem8, msiMem16, msiMem32, msiBMem32, msiMem64, msiBMem64, msiMem128, msiMem256, msiMem512,
|
||||
@ -367,7 +367,7 @@ interface
|
||||
TMemRefSizeInfoBCSTType = (btUnknown, bt1to2, bt1to4, bt1to8, bt1to16);
|
||||
|
||||
TEVEXTupleState = (etsUnknown, etsIsTuple, etsNotTuple);
|
||||
TConstSizeInfo = (csiUnkown, csiMultiple, csiNoSize, csiMem8, csiMem16, csiMem32, csiMem64);
|
||||
TConstSizeInfo = (csiUnknown, csiMultiple, csiNoSize, csiMem8, csiMem16, csiMem32, csiMem64);
|
||||
|
||||
TInsTabMemRefSizeInfoRec = record
|
||||
MemRefSize : TMemRefSizeInfo;
|
||||
@ -381,10 +381,10 @@ interface
|
||||
|
||||
|
||||
const
|
||||
MemRefMultiples: set of TMemRefSizeInfo = [msiMultiple, msiMultiple8,
|
||||
msiMultiple16, msiMultiple32,
|
||||
msiMultiple64, msiMultiple128,
|
||||
msiMultiple256, msiMultiple512,
|
||||
MemRefMultiples: set of TMemRefSizeInfo = [msiMultiple, msiMultipleMinSize8,
|
||||
msiMultipleMinSize16, msiMultipleMinSize32,
|
||||
msiMultipleMinSize64, msiMultipleMinSize128,
|
||||
msiMultipleMinSize256, msiMultipleMinSize512,
|
||||
msiVMemMultiple];
|
||||
|
||||
MemRefSizeInfoVMems: Set of TMemRefSizeInfo = [msiXMem32, msiXMem64, msiYMem32, msiYMem64,
|
||||
@ -413,6 +413,7 @@ interface
|
||||
IF_SB, { unsized operands can't be non-byte }
|
||||
IF_SW, { unsized operands can't be non-word }
|
||||
IF_SD, { unsized operands can't be nondword }
|
||||
IF_SQ, { unsized operands can't be nonqword }
|
||||
|
||||
{ unsized argument spec }
|
||||
{ please keep these in order and in sync with IF_ARMASK }
|
||||
@ -1620,7 +1621,7 @@ implementation
|
||||
// special handling (opsize can different from const-size)
|
||||
// (e.g. "pextrw reg/m16, xmmreg, imm8" =>> opsize (16 bit), const-size (8 bit)
|
||||
if (InsTabMemRefSizeInfoCache^[opcode].ExistsSSEAVX) and
|
||||
(not(InsTabMemRefSizeInfoCache^[opcode].ConstSize in [csiMultiple, csiUnkown])) then
|
||||
(not(InsTabMemRefSizeInfoCache^[opcode].ConstSize in [csiMultiple, csiUnknown])) then
|
||||
begin
|
||||
case InsTabMemRefSizeInfoCache^[opcode].ConstSize of
|
||||
csiNoSize: ot := ot and OT_NON_SIZE or OT_IMMEDIATE;
|
||||
@ -4893,6 +4894,7 @@ implementation
|
||||
RegBCSTXMMSizeMask: int64;
|
||||
RegBCSTYMMSizeMask: int64;
|
||||
RegBCSTZMMSizeMask: int64;
|
||||
ExistsMemRef : boolean;
|
||||
|
||||
bitcount: integer;
|
||||
|
||||
@ -4923,10 +4925,10 @@ implementation
|
||||
|
||||
if i >= 0 then
|
||||
begin
|
||||
InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := msiUnkown;
|
||||
InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := msiUnknown;
|
||||
InsTabMemRefSizeInfoCache^[AsmOp].MemRefSizeBCST := msbUnknown;
|
||||
InsTabMemRefSizeInfoCache^[AsmOp].BCSTXMMMultiplicator := 0;
|
||||
InsTabMemRefSizeInfoCache^[AsmOp].ConstSize := csiUnkown;
|
||||
InsTabMemRefSizeInfoCache^[AsmOp].ConstSize := csiUnknown;
|
||||
InsTabMemRefSizeInfoCache^[AsmOp].ExistsSSEAVX := false;
|
||||
InsTabMemRefSizeInfoCache^[AsmOp].BCSTTypes := [];
|
||||
|
||||
@ -4945,10 +4947,11 @@ implementation
|
||||
RegBCSTXMMSizeMask := 0;
|
||||
RegBCSTYMMSizeMask := 0;
|
||||
RegBCSTZMMSizeMask := 0;
|
||||
ExistsMemRef := false;
|
||||
|
||||
while (insentry^.opcode=AsmOp) do
|
||||
begin
|
||||
MRefInfo := msiUnkown;
|
||||
MRefInfo := msiUnknown;
|
||||
|
||||
actRegSize := 0;
|
||||
actRegCount := 0;
|
||||
@ -5049,7 +5052,7 @@ implementation
|
||||
else SConstInfo := csiMultiple;
|
||||
end;
|
||||
|
||||
if InsTabMemRefSizeInfoCache^[AsmOp].ConstSize = csiUnkown then
|
||||
if InsTabMemRefSizeInfoCache^[AsmOp].ConstSize = csiUnknown then
|
||||
begin
|
||||
InsTabMemRefSizeInfoCache^[AsmOp].ConstSize := SConstInfo;
|
||||
end
|
||||
@ -5108,7 +5111,7 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
if InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize = msiUnkown then
|
||||
if InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize = msiUnknown then
|
||||
begin
|
||||
InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := MRefInfo;
|
||||
end
|
||||
@ -5129,10 +5132,12 @@ implementation
|
||||
begin
|
||||
if (actMemCount=2) and ((AsmOp=A_MOVS) or (AsmOp=A_CMPS)) then actMemCount:=1;
|
||||
|
||||
ExistsMemRef := ExistsMemRef or (actMemCount > 0);
|
||||
|
||||
case actMemCount of
|
||||
0: ; // nothing todo
|
||||
1: begin
|
||||
MRefInfo := msiUnkown;
|
||||
MRefInfo := msiUnknown;
|
||||
case actRegMemTypes and (OT_MMXRM or OT_XMMRM or OT_YMMRM or OT_ZMMRM or OT_REG_EXTRA_MASK) of
|
||||
OT_MMXRM: actMemSize := actMemSize or OT_BITS64;
|
||||
OT_XMMRM: actMemSize := actMemSize or OT_BITS128;
|
||||
@ -5164,7 +5169,7 @@ implementation
|
||||
end;
|
||||
end;
|
||||
|
||||
if InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize = msiUnkown then
|
||||
if InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize = msiUnknown then
|
||||
begin
|
||||
InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := MRefInfo;
|
||||
end
|
||||
@ -5177,13 +5182,13 @@ implementation
|
||||
begin
|
||||
with InsTabMemRefSizeInfoCache^[AsmOp] do
|
||||
begin
|
||||
if ((MemRefSize = msiMem8) OR (MRefInfo = msiMem8)) then MemRefSize := msiMultiple8
|
||||
else if ((MemRefSize = msiMem16) OR (MRefInfo = msiMem16)) then MemRefSize := msiMultiple16
|
||||
else if ((MemRefSize = msiMem32) OR (MRefInfo = msiMem32)) then MemRefSize := msiMultiple32
|
||||
else if ((MemRefSize = msiMem64) OR (MRefInfo = msiMem64)) then MemRefSize := msiMultiple64
|
||||
else if ((MemRefSize = msiMem128) OR (MRefInfo = msiMem128)) then MemRefSize := msiMultiple128
|
||||
else if ((MemRefSize = msiMem256) OR (MRefInfo = msiMem256)) then MemRefSize := msiMultiple256
|
||||
else if ((MemRefSize = msiMem512) OR (MRefInfo = msiMem512)) then MemRefSize := msiMultiple512
|
||||
if ((MemRefSize in [msiMem8, msiMULTIPLEMinSize8]) OR (MRefInfo = msiMem8)) then MemRefSize := msiMultipleMinSize8
|
||||
else if ((MemRefSize in [ msiMem16, msiMULTIPLEMinSize16]) OR (MRefInfo = msiMem16)) then MemRefSize := msiMultipleMinSize16
|
||||
else if ((MemRefSize in [ msiMem32, msiMULTIPLEMinSize32]) OR (MRefInfo = msiMem32)) then MemRefSize := msiMultipleMinSize32
|
||||
else if ((MemRefSize in [ msiMem64, msiMULTIPLEMinSize64]) OR (MRefInfo = msiMem64)) then MemRefSize := msiMultipleMinSize64
|
||||
else if ((MemRefSize in [msiMem128, msiMULTIPLEMinSize128]) OR (MRefInfo = msiMem128)) then MemRefSize := msiMultipleMinSize128
|
||||
else if ((MemRefSize in [msiMem256, msiMULTIPLEMinSize256]) OR (MRefInfo = msiMem256)) then MemRefSize := msiMultipleMinSize256
|
||||
else if ((MemRefSize in [msiMem512, msiMULTIPLEMinSize512]) OR (MRefInfo = msiMem512)) then MemRefSize := msiMultipleMinSize512
|
||||
else MemRefSize := msiMultiple;
|
||||
end;
|
||||
end;
|
||||
@ -5394,6 +5399,12 @@ implementation
|
||||
InternalError(777205);
|
||||
end;
|
||||
|
||||
end
|
||||
else if (InsTabMemRefSizeInfoCache^[AsmOp].ExistsSSEAVX) and
|
||||
(InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize = msiUnknown) and
|
||||
(not(ExistsMemRef)) then
|
||||
begin
|
||||
InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := msiNoMemRef;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
@ -5405,8 +5416,8 @@ implementation
|
||||
// only supported intructiones with SSE- or AVX-operands
|
||||
if not(InsTabMemRefSizeInfoCache^[AsmOp].ExistsSSEAVX) then
|
||||
begin
|
||||
InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := msiUnkown;
|
||||
InsTabMemRefSizeInfoCache^[AsmOp].ConstSize := csiUnkown;
|
||||
InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := msiUnknown;
|
||||
InsTabMemRefSizeInfoCache^[AsmOp].ConstSize := csiUnknown;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
@ -5419,6 +5430,7 @@ implementation
|
||||
|
||||
if not assigned(InsTabMemRefSizeInfoCache) then
|
||||
BuildInsTabMemRefSizeInfoCache;
|
||||
|
||||
end;
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user