浏览代码

* converted tcgaddrnode.pass_generate_code to use the high level code generator,
which makes the i8086 overridden class unnecessary

git-svn-id: trunk@27323 -

nickysn 11 年之前
父节点
当前提交
e465ab355b
共有 2 个文件被更改,包括 3 次插入40 次删除
  1. 0 37
      compiler/i8086/n8086mem.pas
  2. 3 3
      compiler/ncgmem.pas

+ 0 - 37
compiler/i8086/n8086mem.pas

@@ -31,10 +31,6 @@ interface
       node,nmem,ncgmem,nx86mem;
       node,nmem,ncgmem,nx86mem;
 
 
     type
     type
-       ti8086addrnode = class(tcgaddrnode)
-         procedure pass_generate_code;override;
-       end;
-
        ti8086derefnode = class(tx86derefnode)
        ti8086derefnode = class(tx86derefnode)
          procedure pass_generate_code;override;
          procedure pass_generate_code;override;
        end;
        end;
@@ -52,38 +48,6 @@ implementation
       defutil,hlcgobj,
       defutil,hlcgobj,
       pass_2,ncgutil;
       pass_2,ncgutil;
 
 
-{*****************************************************************************
-                             TI8086ADDRNODE
-*****************************************************************************}
-
-    procedure ti8086addrnode.pass_generate_code;
-      var
-        segref: treference;
-      begin
-        if (current_settings.x86memorymodel in x86_far_code_models) and
-           (left.nodetype=loadn) and
-           (tloadnode(left).symtableentry.typ=labelsym) then
-          begin
-            secondpass(left);
-
-            location_reset(location,LOC_REGISTER,OS_32);
-            location.register:=cg.getintregister(current_asmdata.CurrAsmList,OS_32);
-            if not(left.location.loc in [LOC_REFERENCE,LOC_CREFERENCE]) then
-              internalerror(2013091801);
-
-            { load offset }
-            cg.a_loadaddr_ref_reg(current_asmdata.CurrAsmList,left.location.reference,location.register);
-
-            { load segment }
-            segref:=left.location.reference;
-            segref.refaddr:=addr_seg;
-            cg.a_load_ref_reg(current_asmdata.CurrAsmList,OS_16,OS_16,segref,GetNextReg(location.register));
-          end
-        else
-          inherited;
-      end;
-
-
 {*****************************************************************************
 {*****************************************************************************
                              TI8086DEREFNODE
                              TI8086DEREFNODE
 *****************************************************************************}
 *****************************************************************************}
@@ -164,6 +128,5 @@ implementation
 
 
 
 
 begin
 begin
-  caddrnode:=ti8086addrnode;
   cderefnode:=ti8086derefnode;
   cderefnode:=ti8086derefnode;
 end.
 end.

+ 3 - 3
compiler/ncgmem.pas

@@ -193,8 +193,8 @@ implementation
       begin
       begin
          secondpass(left);
          secondpass(left);
 
 
-         location_reset(location,LOC_REGISTER,OS_ADDR);
-         location.register:=cg.getaddressregister(current_asmdata.CurrAsmList);
+         location_reset(location,LOC_REGISTER,int_cgsize(resultdef.size));
+         location.register:=hlcg.getaddressregister(current_asmdata.CurrAsmList,resultdef);
          if not(left.location.loc in [LOC_REFERENCE,LOC_CREFERENCE]) then
          if not(left.location.loc in [LOC_REFERENCE,LOC_CREFERENCE]) then
            { on x86_64-win64, array of chars can be returned in registers, however,
            { on x86_64-win64, array of chars can be returned in registers, however,
              when passing these arrays to other functions, the compiler wants to take
              when passing these arrays to other functions, the compiler wants to take
@@ -205,7 +205,7 @@ implementation
              hlcg.location_force_mem(current_asmdata.CurrAsmList,left.location,left.resultdef)
              hlcg.location_force_mem(current_asmdata.CurrAsmList,left.location,left.resultdef)
            else
            else
              internalerror(2006111510);
              internalerror(2006111510);
-         cg.a_loadaddr_ref_reg(current_asmdata.CurrAsmList,left.location.reference,location.register);
+         hlcg.a_loadaddr_ref_reg(current_asmdata.CurrAsmList,left.resultdef,resultdef,left.location.reference,location.register);
       end;
       end;