Browse Source

* set expectloc correctly for far pointer comparison as well

git-svn-id: trunk@28217 -
nickysn 11 years ago
parent
commit
200df7a136
1 changed files with 19 additions and 0 deletions
  1. 19 0
      compiler/i8086/n8086add.pas

+ 19 - 0
compiler/i8086/n8086add.pas

@@ -39,6 +39,7 @@ interface
          function first_addhugepointer: tnode;
          function first_cmppointer: tnode; override;
          function first_cmphugepointer: tnode;
+         function first_cmpfarpointer: tnode;
          procedure second_addordinal; override;
          procedure second_add64bit;override;
          procedure second_addfarpointer;
@@ -358,6 +359,8 @@ interface
       begin
         if is_hugepointer(left.resultdef) or is_hugepointer(right.resultdef) then
           result:=first_cmphugepointer
+        else if is_farpointer(left.resultdef) or is_farpointer(right.resultdef) then
+          result:=first_cmpfarpointer
         else
           result:=inherited;
       end;
@@ -401,6 +404,22 @@ interface
       end;
 
 
+    function ti8086addnode.first_cmpfarpointer: tnode;
+      begin
+        { = and <> are handled as a 32-bit comparison }
+        if nodetype in [equaln,unequaln] then
+          begin
+            result:=nil;
+            expectloc:=LOC_JUMP;
+          end
+        else
+          begin
+            result:=nil;
+            expectloc:=LOC_FLAGS;
+          end;
+      end;
+
+
     procedure ti8086addnode.second_addfarpointer;
       var
         tmpreg : tregister;