Browse Source

* i8086 far pointer fix in tcgpointerconstnode.pass_generate_code; this finally fixes ptr(constseg,constofs)

git-svn-id: trunk@24568 -
nickysn 12 years ago
parent
commit
0baa004571
1 changed files with 14 additions and 3 deletions
  1. 14 3
      compiler/ncgcon.pas

+ 14 - 3
compiler/ncgcon.pas

@@ -245,9 +245,20 @@ implementation
 
 
     procedure tcgpointerconstnode.pass_generate_code;
     procedure tcgpointerconstnode.pass_generate_code;
       begin
       begin
-         { an integer const. behaves as a memory reference }
-         location_reset(location,LOC_CONSTANT,OS_ADDR);
-         location.value:=aint(value);
+{$ifdef i8086}
+         { far pointer? }
+         if (typedef.typ=pointerdef) and (tpointerdef(typedef).x86pointertyp in [x86pt_far,x86pt_huge]) then
+           begin
+             location_reset(location,LOC_CONSTANT,OS_32);
+             location.value:=longint(value);
+           end
+         else
+{$endif i8086}
+           begin
+             { an integer const. behaves as a memory reference }
+             location_reset(location,LOC_CONSTANT,OS_ADDR);
+             location.value:=aint(value);
+           end;
       end;
       end;