From 71720533d7c96cf5d501774aca8ff3d3a1b8b13d Mon Sep 17 00:00:00 2001 From: nickysn Date: Mon, 24 Mar 2014 00:34:52 +0000 Subject: [PATCH] * fixed the comparison of near pointers in i8086 far data memory models + added charfarpointertype and charnearpointertype to symdef * the system unit compiles in the i8086 compact memory model now git-svn-id: trunk@27251 - --- compiler/nadd.pas | 9 ++++----- compiler/psystem.pas | 6 ++++++ compiler/symdef.pas | 2 ++ 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/compiler/nadd.pas b/compiler/nadd.pas index 7d6a118ce8..fdabc580a1 100644 --- a/compiler/nadd.pas +++ b/compiler/nadd.pas @@ -1635,15 +1635,14 @@ implementation inserttypeconv_internal(left,java_jlobject); inserttypeconv_internal(right,java_jlobject); {$elseif defined(i8086)} - { we don't have a charfarpointertype yet, so for far pointers we use bytefarpointertype } if is_farpointer(left.resultdef) then - inserttypeconv_internal(left,bytefarpointertype) + inserttypeconv_internal(left,charfarpointertype) else - inserttypeconv_internal(left,charpointertype); + inserttypeconv_internal(left,charnearpointertype); if is_farpointer(right.resultdef) then - inserttypeconv_internal(right,bytefarpointertype) + inserttypeconv_internal(right,charfarpointertype) else - inserttypeconv_internal(right,charpointertype); + inserttypeconv_internal(right,charnearpointertype); {$else} inserttypeconv_internal(left,charpointertype); inserttypeconv_internal(right,charpointertype); diff --git a/compiler/psystem.pas b/compiler/psystem.pas index b9473996bf..cffcb8edcd 100644 --- a/compiler/psystem.pas +++ b/compiler/psystem.pas @@ -289,6 +289,8 @@ implementation {$ifdef i8086} voidfarpointertype:=tpointerdef.createx86(voidtype,x86pt_far); voidhugepointertype:=tpointerdef.createx86(voidtype,x86pt_huge); + charnearpointertype:=tpointerdef.createx86(cansichartype,x86pt_near); + charfarpointertype:=tpointerdef.createx86(cansichartype,x86pt_far); bytefarpointertype:=tpointerdef.createx86(u8inttype,x86pt_far); wordfarpointertype:=tpointerdef.createx86(u16inttype,x86pt_far); longintfarpointertype:=tpointerdef.createx86(s32inttype,x86pt_far); @@ -427,6 +429,8 @@ implementation {$ifdef i8086} addtype('$void_farpointer',voidfarpointertype); addtype('$void_hugepointer',voidhugepointertype); + addtype('$char_nearpointer',charnearpointertype); + addtype('$char_farpointer',charfarpointertype); addtype('$byte_farpointer',bytefarpointertype); addtype('$word_farpointer',wordfarpointertype); addtype('$longint_farpointer',longintfarpointertype); @@ -563,6 +567,8 @@ implementation {$ifdef i8086} loadtype('void_farpointer',voidfarpointertype); loadtype('void_hugepointer',voidhugepointertype); + loadtype('char_nearpointer',charnearpointertype); + loadtype('char_farpointer',charfarpointertype); loadtype('byte_farpointer',bytefarpointertype); loadtype('word_farpointer',wordfarpointertype); loadtype('longint_farpointer',longintfarpointertype); diff --git a/compiler/symdef.pas b/compiler/symdef.pas index df75f95d3f..0a8817a35a 100644 --- a/compiler/symdef.pas +++ b/compiler/symdef.pas @@ -907,6 +907,8 @@ interface {$ifdef i8086} voidfarpointertype, voidhugepointertype, + charnearpointertype, + charfarpointertype, bytefarpointertype, { used for Mem[] } wordfarpointertype, { used for MemW[] } longintfarpointertype, { used for MemL[] }