소스 검색

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

git-svn-id: trunk@24568 -
nickysn 12 년 전
부모
커밋
0baa004571
1개의 변경된 파일14개의 추가작업 그리고 3개의 파일을 삭제
  1. 14 3
      compiler/ncgcon.pas

+ 14 - 3
compiler/ncgcon.pas

@@ -245,9 +245,20 @@ implementation
 
     procedure tcgpointerconstnode.pass_generate_code;
       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;