Browse Source

* Another 200301081 fixed

daniel 22 years ago
parent
commit
a86b31c4f0
1 changed files with 23 additions and 16 deletions
  1. 23 16
      compiler/aasmtai.pas

+ 23 - 16
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