|
@@ -3317,46 +3317,44 @@ implementation
|
|
|
RegXMMSizeMask := RegXMMSizeMask;
|
|
|
end;
|
|
|
|
|
|
-
|
|
|
-
|
|
|
for j := 0 to insentry^.ops -1 do
|
|
|
begin
|
|
|
if (insentry^.optypes[j] and OT_REGISTER) = OT_REGISTER then
|
|
|
- begin
|
|
|
- inc(actRegCount);
|
|
|
-
|
|
|
- NewRegSize := (insentry^.optypes[j] and OT_SIZE_MASK);
|
|
|
- if NewRegSize = 0 then
|
|
|
begin
|
|
|
- case insentry^.optypes[j] and (OT_MMXREG OR OT_XMMREG OR OT_YMMREG) of
|
|
|
- OT_MMXREG: begin
|
|
|
- NewRegSize := OT_BITS64;
|
|
|
- end;
|
|
|
- OT_XMMREG: begin
|
|
|
- NewRegSize := OT_BITS128;
|
|
|
- InsTabMemRefSizeInfoCache^[AsmOp].ExistsSSEAVX := true;
|
|
|
- end;
|
|
|
- OT_YMMREG: begin
|
|
|
- NewRegSize := OT_BITS256;
|
|
|
- InsTabMemRefSizeInfoCache^[AsmOp].ExistsSSEAVX := true;
|
|
|
- end;
|
|
|
- else NewRegSize := not(0);
|
|
|
+ inc(actRegCount);
|
|
|
+
|
|
|
+ NewRegSize := (insentry^.optypes[j] and OT_SIZE_MASK);
|
|
|
+ if NewRegSize = 0 then
|
|
|
+ begin
|
|
|
+ case insentry^.optypes[j] and (OT_MMXREG OR OT_XMMREG OR OT_YMMREG) of
|
|
|
+ OT_MMXREG: begin
|
|
|
+ NewRegSize := OT_BITS64;
|
|
|
+ end;
|
|
|
+ OT_XMMREG: begin
|
|
|
+ NewRegSize := OT_BITS128;
|
|
|
+ InsTabMemRefSizeInfoCache^[AsmOp].ExistsSSEAVX := true;
|
|
|
+ end;
|
|
|
+ OT_YMMREG: begin
|
|
|
+ NewRegSize := OT_BITS256;
|
|
|
+ InsTabMemRefSizeInfoCache^[AsmOp].ExistsSSEAVX := true;
|
|
|
+ end;
|
|
|
+ else NewRegSize := not(0);
|
|
|
+ end;
|
|
|
end;
|
|
|
- end;
|
|
|
|
|
|
actRegSize := actRegSize or NewRegSize;
|
|
|
actRegTypes := actRegTypes or (insentry^.optypes[j] and (OT_MMXREG OR OT_XMMREG OR OT_YMMREG));
|
|
|
- end
|
|
|
+ end
|
|
|
else if ((insentry^.optypes[j] and OT_MEMORY) <> 0) then
|
|
|
- begin
|
|
|
- inc(actMemCount);
|
|
|
-
|
|
|
- actMemSize := actMemSize or (insentry^.optypes[j] and OT_SIZE_MASK);
|
|
|
- if (insentry^.optypes[j] and OT_REGMEM) = OT_REGMEM then
|
|
|
begin
|
|
|
- actRegMemTypes := actRegMemTypes or insentry^.optypes[j];
|
|
|
- end;
|
|
|
- end
|
|
|
+ inc(actMemCount);
|
|
|
+
|
|
|
+ actMemSize:=actMemSize or (insentry^.optypes[j] and OT_SIZE_MASK);
|
|
|
+ if (insentry^.optypes[j] and OT_REGMEM) = OT_REGMEM then
|
|
|
+ begin
|
|
|
+ actRegMemTypes := actRegMemTypes or insentry^.optypes[j];
|
|
|
+ end;
|
|
|
+ end
|
|
|
else if ((insentry^.optypes[j] and OT_IMMEDIATE) = OT_IMMEDIATE) then
|
|
|
begin
|
|
|
inc(actConstCount);
|
|
@@ -3368,12 +3366,12 @@ implementation
|
|
|
if actConstCount > 0 then
|
|
|
begin
|
|
|
case actConstSize of
|
|
|
- 0: SConstInfo := csiNoSize;
|
|
|
- OT_BITS8: SConstInfo := csiMem8;
|
|
|
+ 0: SConstInfo := csiNoSize;
|
|
|
+ OT_BITS8: SConstInfo := csiMem8;
|
|
|
OT_BITS16: SConstInfo := csiMem16;
|
|
|
OT_BITS32: SConstInfo := csiMem32;
|
|
|
OT_BITS64: SConstInfo := csiMem64;
|
|
|
- else SConstInfo := csiMultiple;
|
|
|
+ else SConstInfo := csiMultiple;
|
|
|
end;
|
|
|
|
|
|
if InsTabMemRefSizeInfoCache^[AsmOp].ConstSize = csiUnkown then
|
|
@@ -3398,59 +3396,57 @@ implementation
|
|
|
end;
|
|
|
|
|
|
case actMemSize of
|
|
|
- 0: MRefInfo := msiNoSize;
|
|
|
- OT_BITS8: MRefInfo := msiMem8;
|
|
|
- OT_BITS16: MRefInfo := msiMem16;
|
|
|
- OT_BITS32: MRefInfo := msiMem32;
|
|
|
- OT_BITS64: MRefInfo := msiMem64;
|
|
|
+ 0: MRefInfo := msiNoSize;
|
|
|
+ OT_BITS8: MRefInfo := msiMem8;
|
|
|
+ OT_BITS16: MRefInfo := msiMem16;
|
|
|
+ OT_BITS32: MRefInfo := msiMem32;
|
|
|
+ OT_BITS64: MRefInfo := msiMem64;
|
|
|
OT_BITS128: MRefInfo := msiMem128;
|
|
|
OT_BITS256: MRefInfo := msiMem256;
|
|
|
OT_BITS80,
|
|
|
- OT_FAR,
|
|
|
- OT_NEAR,
|
|
|
- OT_SHORT: ; // ignore
|
|
|
- else begin
|
|
|
- bitcount := bitcnt(actMemSize);
|
|
|
-
|
|
|
- if bitcount > 1 then MRefInfo := msiMultiple
|
|
|
- else InternalError(777203);
|
|
|
- end;
|
|
|
+ OT_FAR,
|
|
|
+ OT_NEAR,
|
|
|
+ OT_SHORT: ; // ignore
|
|
|
+ else
|
|
|
+ begin
|
|
|
+ bitcount := bitcnt(actMemSize);
|
|
|
+
|
|
|
+ if bitcount > 1 then MRefInfo := msiMultiple
|
|
|
+ else InternalError(777203);
|
|
|
+ end;
|
|
|
end;
|
|
|
|
|
|
if InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize = msiUnkown then
|
|
|
- begin
|
|
|
- InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := MRefInfo;
|
|
|
- end
|
|
|
+ begin
|
|
|
+ InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize := MRefInfo;
|
|
|
+ end
|
|
|
else if InsTabMemRefSizeInfoCache^[AsmOp].MemRefSize <> MRefInfo then
|
|
|
- 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 MemRefSize := msiMultiple;
|
|
|
- end;
|
|
|
+ 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 MemRefSize := msiMultiple;
|
|
|
+ end;
|
|
|
end;
|
|
|
|
|
|
if actRegCount > 0 then
|
|
|
- begin
|
|
|
- case actRegTypes and (OT_MMXREG or OT_XMMREG or OT_YMMREG) of
|
|
|
- OT_MMXREG: RegMMXSizeMask := RegMMXSizeMask or actMemSize;
|
|
|
- OT_XMMREG: RegXMMSizeMask := RegXMMSizeMask or actMemSize;
|
|
|
- OT_YMMREG: RegYMMSizeMask := RegYMMSizeMask or actMemSize;
|
|
|
- else begin
|
|
|
- RegMMXSizeMask := not(0);
|
|
|
- RegXMMSizeMask := not(0);
|
|
|
- RegYMMSizeMask := not(0);
|
|
|
- end;
|
|
|
+ begin
|
|
|
+ case actRegTypes and (OT_MMXREG or OT_XMMREG or OT_YMMREG) of
|
|
|
+ OT_MMXREG: RegMMXSizeMask := RegMMXSizeMask or actMemSize;
|
|
|
+ OT_XMMREG: RegXMMSizeMask := RegXMMSizeMask or actMemSize;
|
|
|
+ OT_YMMREG: RegYMMSizeMask := RegYMMSizeMask or actMemSize;
|
|
|
+ else begin
|
|
|
+ RegMMXSizeMask := not(0);
|
|
|
+ RegXMMSizeMask := not(0);
|
|
|
+ RegYMMSizeMask := not(0);
|
|
|
+ end;
|
|
|
+ end;
|
|
|
end;
|
|
|
- end;
|
|
|
end;
|
|
|
else InternalError(777202);
|
|
|
end;
|