浏览代码

* 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 年之前
父节点
当前提交
4e60d2316f
共有 1 个文件被更改,包括 11 次插入0 次删除
  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;