Browse Source

* support implicit pointer types (classes, dynarrays, ansistrings, etc.) in
i8086's thlcgcpu.getaddressregister and thlcgcpu.reference_reset_base

git-svn-id: trunk@27333 -

nickysn 11 years ago
parent
commit
4e60d2316f
1 changed files with 11 additions and 0 deletions
  1. 11 0
      compiler/i8086/hlcgcpu.pas

+ 11 - 0
compiler/i8086/hlcgcpu.pas

@@ -188,6 +188,11 @@ implementation
 
   function thlcgcpu.getaddressregister(list: TAsmList; size: tdef): Tregister;
     begin
+      { implicit pointer types on i8086 follow the default data pointer size for
+        the current memory model }
+      if is_implicit_pointer_object_type(size) or is_implicit_array_pointer(size) then
+        size:=voidpointertype;
+
       if is_farpointer(size) or is_hugepointer(size) then
         Result:=cg.getintregister(list,OS_32)
       else
@@ -199,6 +204,12 @@ implementation
     reg: tregister; offset, alignment: longint);
     begin
       inherited reference_reset_base(ref, regsize, reg, offset, alignment);
+
+      { implicit pointer types on i8086 follow the default data pointer size for
+        the current memory model }
+      if is_implicit_pointer_object_type(regsize) or is_implicit_array_pointer(regsize) then
+        regsize:=voidpointertype;
+
       if is_farpointer(regsize) or is_hugepointer(regsize) then
         ref.segment:=GetNextReg(reg);
     end;