mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-16 04:49:19 +02:00
working on internal assembler-reader x86 opsize local var
git-svn-id: branches/tg74/avx512-0037785@47663 -
This commit is contained in:
parent
84bf87b20d
commit
06b229e1c3
@ -1451,12 +1451,13 @@ procedure Tx86Instruction.SetInstructionOpsize;
|
|||||||
|
|
||||||
if bBroadcastMemRef then
|
if bBroadcastMemRef then
|
||||||
begin
|
begin
|
||||||
case MemRefSizeBCST of
|
//case MemRefSizeBCST of
|
||||||
msbBCST32: opsize := S_L;
|
// msbBCST32: opsize := S_L;
|
||||||
msbBCST64: opsize := S_Q;
|
// msbBCST64: opsize := S_Q;
|
||||||
else opsize := S_NO;
|
// else opsize := S_NO;
|
||||||
end;
|
//end;
|
||||||
|
|
||||||
|
opsize := S_NO;
|
||||||
result := true;
|
result := true;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@ -1476,7 +1477,8 @@ procedure Tx86Instruction.SetInstructionOpsize;
|
|||||||
opsize:=tx86operand(operands[1]).opsize;
|
opsize:=tx86operand(operands[1]).opsize;
|
||||||
result := true;
|
result := true;
|
||||||
end;
|
end;
|
||||||
3: begin
|
3,4:
|
||||||
|
begin
|
||||||
if (tx86operand(operands[1]).opr.typ <> OPR_CONSTANT) then
|
if (tx86operand(operands[1]).opr.typ <> OPR_CONSTANT) then
|
||||||
opsize:=tx86operand(operands[1]).opsize
|
opsize:=tx86operand(operands[1]).opsize
|
||||||
else opsize:=tx86operand(operands[2]).opsize;
|
else opsize:=tx86operand(operands[2]).opsize;
|
||||||
@ -1489,9 +1491,9 @@ procedure Tx86Instruction.SetInstructionOpsize;
|
|||||||
//bExistMemRef:=false;
|
//bExistMemRef:=false;
|
||||||
|
|
||||||
for i := 1 to ops do
|
for i := 1 to ops do
|
||||||
if tx86operand(operands[1]).opr.typ in [OPR_REFERENCE,OPR_LOCAL] then
|
if tx86operand(operands[i]).opr.typ in [OPR_REFERENCE,OPR_LOCAL] then
|
||||||
begin
|
begin
|
||||||
opsize := tx86operand(operands[1]).opsize;
|
opsize := tx86operand(operands[i]).opsize;
|
||||||
result := true;
|
result := true;
|
||||||
break;
|
break;
|
||||||
end;
|
end;
|
||||||
@ -1606,8 +1608,8 @@ begin
|
|||||||
end;
|
end;
|
||||||
//end;
|
//end;
|
||||||
end;
|
end;
|
||||||
4 :
|
4 : if not CheckSSEAVX then
|
||||||
opsize:=tx86operand(operands[ops]).opsize;
|
opsize:=tx86operand(operands[ops]).opsize;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1973,6 +1975,25 @@ begin
|
|||||||
localscale,localgetoffset,localforceref);
|
localscale,localgetoffset,localforceref);
|
||||||
ai.oper[i-1]^.localoper^.localsegment:=localsegment;
|
ai.oper[i-1]^.localoper^.localsegment:=localsegment;
|
||||||
|
|
||||||
|
// check for embedded broadcast
|
||||||
|
if MemRefInfo(opcode).ExistsSSEAVX then
|
||||||
|
begin
|
||||||
|
asize := 0;
|
||||||
|
|
||||||
|
if ((operands[i] as tx86operand).vopext <> 0) and
|
||||||
|
(MemRefInfo(opcode).MemRefSizeBCST in [msbBCST32,msbBCST64]) then
|
||||||
|
begin
|
||||||
|
case operands[i].size of
|
||||||
|
OS_32,OS_M32: asize:=OT_BITS32;
|
||||||
|
OS_64,OS_M64: asize:=OT_BITS64;
|
||||||
|
else;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if asize<>0 then
|
||||||
|
ai.oper[i-1]^.ot:=(ai.oper[i-1]^.ot and not OT_SIZE_MASK) or asize;
|
||||||
|
end;
|
||||||
|
|
||||||
// if MemRefInfo(opcode).ExistsSSEAVX then
|
// if MemRefInfo(opcode).ExistsSSEAVX then
|
||||||
// begin
|
// begin
|
||||||
// asize := 0;
|
// asize := 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user