فهرست منبع

* 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;