mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-16 17:59:25 +02:00
+ Declared operand types OT_XMMRM (matches either xmm register or 128-bit memory reference) and OT_MMXRM (same for mmx).
* Modified taicpu.Pass2 to exclude non-definitely assigned variable and issue InternalError if impossible segment prefix is used. git-svn-id: trunk@17374 -
This commit is contained in:
parent
49ae051312
commit
d288592c5a
@ -77,7 +77,9 @@ interface
|
|||||||
OT_REG32 = $00201004;
|
OT_REG32 = $00201004;
|
||||||
OT_REG64 = $00201008;
|
OT_REG64 = $00201008;
|
||||||
OT_XMMREG = $00201010; { Katmai registers }
|
OT_XMMREG = $00201010; { Katmai registers }
|
||||||
|
OT_XMMRM = $00200010;
|
||||||
OT_MMXREG = $00201020; { MMX registers }
|
OT_MMXREG = $00201020; { MMX registers }
|
||||||
|
OT_MMXRM = $00200020;
|
||||||
OT_MEMORY = $00204000; { register number in 'basereg' }
|
OT_MEMORY = $00204000; { register number in 'basereg' }
|
||||||
OT_MEM8 = $00204001;
|
OT_MEM8 = $00204001;
|
||||||
OT_MEM16 = $00204002;
|
OT_MEM16 = $00204002;
|
||||||
@ -1276,30 +1278,27 @@ implementation
|
|||||||
LastInsOffset:=-1;
|
LastInsOffset:=-1;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
const
|
||||||
|
segprefixes: array[NR_CS..NR_GS] of Byte=(
|
||||||
|
//cs ds es ss fs gs
|
||||||
|
$2E, $3E, $26, $36, $64, $65
|
||||||
|
);
|
||||||
|
|
||||||
procedure taicpu.Pass2(objdata:TObjData);
|
procedure taicpu.Pass2(objdata:TObjData);
|
||||||
var
|
|
||||||
c : longint;
|
|
||||||
begin
|
begin
|
||||||
{ error in pass1 ? }
|
{ error in pass1 ? }
|
||||||
if insentry=nil then
|
if insentry=nil then
|
||||||
exit;
|
exit;
|
||||||
current_filepos:=fileinfo;
|
current_filepos:=fileinfo;
|
||||||
{ Segment override }
|
{ Segment override }
|
||||||
if (segprefix<>NR_NO) then
|
if (segprefix>=NR_CS) and (segprefix<=NR_GS) then
|
||||||
begin
|
begin
|
||||||
case segprefix of
|
objdata.writebytes(segprefixes[segprefix],1);
|
||||||
NR_CS : c:=$2e;
|
|
||||||
NR_DS : c:=$3e;
|
|
||||||
NR_ES : c:=$26;
|
|
||||||
NR_FS : c:=$64;
|
|
||||||
NR_GS : c:=$65;
|
|
||||||
NR_SS : c:=$36;
|
|
||||||
end;
|
|
||||||
objdata.writebytes(c,1);
|
|
||||||
{ fix the offset for GenNode }
|
{ fix the offset for GenNode }
|
||||||
inc(InsOffset);
|
inc(InsOffset);
|
||||||
end;
|
end
|
||||||
|
else if segprefix<>NR_NO then
|
||||||
|
InternalError(201001071);
|
||||||
{ Generate the instruction }
|
{ Generate the instruction }
|
||||||
GenCode(objdata);
|
GenCode(objdata);
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user