浏览代码

* Changed tabstractprocdef.address_size to return the def, which can be used to get other properties like size and alignment. Removes one of i8086 ifdef's.

git-svn-id: trunk@26664 -
sergei 11 年之前
父节点
当前提交
7104157a57
共有 2 个文件被更改,包括 9 次插入14 次删除
  1. 3 10
      compiler/ncgcal.pas
  2. 6 4
      compiler/symdef.pas

+ 3 - 10
compiler/ncgcal.pas

@@ -778,15 +778,8 @@ implementation
          regs_to_save_fpu:=paramanager.get_volatile_registers_fpu(procdefinition.proccalloption);
          regs_to_save_mm:=paramanager.get_volatile_registers_mm(procdefinition.proccalloption);
 
-         proc_addr_size:=int_cgsize(procdefinition.address_size);
-{$ifdef i8086}
-         if po_far in procdefinition.procoptions then
-           proc_addr_voidptrdef:=voidfarpointertype
-         else
-           proc_addr_voidptrdef:=voidnearpointertype;
-{$else i8086}
-         proc_addr_voidptrdef:=voidpointertype;
-{$endif i8086}
+         proc_addr_voidptrdef:=procdefinition.address_type;
+         proc_addr_size:=def_cgsize(proc_addr_voidptrdef);
 
          { Include Function result registers }
          if (not is_void(resultdef)) then
@@ -890,7 +883,7 @@ implementation
                      wpoinfomanager.symbol_live(current_procinfo.procdef.mangledname)) then
                    tobjectdef(tprocdef(procdefinition).struct).register_vmt_call(tprocdef(procdefinition).extnumber);
 
-                 reference_reset_base(href,vmtreg,vmtoffset,procdefinition.address_size);
+                 reference_reset_base(href,vmtreg,vmtoffset,proc_addr_voidptrdef.alignment);
 {$ifndef x86}
                  pvreg:=cg.getintregister(current_asmdata.CurrAsmList,proc_addr_size);
                  cg.a_load_ref_reg(current_asmdata.CurrAsmList,proc_addr_size,proc_addr_size,href,pvreg);

+ 6 - 4
compiler/symdef.pas

@@ -546,7 +546,7 @@ interface
           procedure init_paraloc_info(side: tcallercallee);
           function stack_tainting_parameter(side: tcallercallee): boolean;
           function is_pushleftright: boolean;
-          function address_size:asizeint;
+          function address_type:tdef;
        private
           procedure count_para(p:TObject;arg:pointer);
           procedure insert_para(p:TObject;arg:pointer);
@@ -4506,14 +4506,16 @@ implementation
 {$endif}
       end;
 
-    function tabstractprocdef.address_size: asizeint;
+    function tabstractprocdef.address_type: tdef;
       begin
 {$ifdef i8086}
         if po_far in procoptions then
-          result:=sizeof(pint)+2
+          result:=voidfarpointertype
         else
+          result:=voidnearpointertype;
+{$else i8086}
+          result:=voidpointertype;
 {$endif i8086}
-          result:=sizeof(pint);
       end;