From a86b31c4f0a0e8e2c07a24e7e848d41aaf013a07 Mon Sep 17 00:00:00 2001 From: daniel Date: Tue, 21 Jan 2003 08:48:08 +0000 Subject: [PATCH] * Another 200301081 fixed --- compiler/aasmtai.pas | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/compiler/aasmtai.pas b/compiler/aasmtai.pas index e5c7b683dc..d85b93f410 100644 --- a/compiler/aasmtai.pas +++ b/compiler/aasmtai.pas @@ -1503,23 +1503,27 @@ uses if opidx>=ops then ops:=opidx+1; with oper[opidx] do - begin - if typ<>top_ref then - new(ref); - ref^:=r; + begin + if typ<>top_ref then + new(ref); + ref^:=r; {$ifdef i386} - if ref^.segment.enum>lastreg then - internalerror(200301081); - { We allow this exception for i386, since overloading this would be - too much of a a speed penalty} - if not(ref^.segment.enum in [R_DS,R_NO]) then - segprefix:=ref^.segment; + { We allow this exception for i386, since overloading this would be + too much of a a speed penalty} + if ref^.segment.enum=R_INTREGISTER then + begin + if (ref^.segment.number <> NR_NO) and (ref^.segment.number <> NR_DS) then + segprefix:=ref^.segment; + end + else + if not(ref^.segment.enum in [R_DS,R_NO]) then + segprefix:=ref^.segment; {$endif} - typ:=top_ref; - { mark symbol as used } - if assigned(ref^.symbol) then - ref^.symbol.increfs; - end; + typ:=top_ref; + { mark symbol as used } + if assigned(ref^.symbol) then + ref^.symbol.increfs; + end; end; @@ -1750,7 +1754,10 @@ uses end. { $Log$ - Revision 1.18 2003-01-09 20:40:59 daniel + Revision 1.19 2003-01-21 08:48:08 daniel + * Another 200301081 fixed + + Revision 1.18 2003/01/09 20:40:59 daniel * Converted some code in cgx86.pas to new register numbering Revision 1.17 2003/01/09 15:49:56 daniel