Sfoglia il codice sorgente

* 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 anni fa
parent
commit
e465ab355b
2 ha cambiato i file con 3 aggiunte e 40 eliminazioni
  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;
 
     type
-       ti8086addrnode = class(tcgaddrnode)
-         procedure pass_generate_code;override;
-       end;
-
        ti8086derefnode = class(tx86derefnode)
          procedure pass_generate_code;override;
        end;
@@ -52,38 +48,6 @@ implementation
       defutil,hlcgobj,
       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
 *****************************************************************************}
@@ -164,6 +128,5 @@ implementation
 
 
 begin
-  caddrnode:=ti8086addrnode;
   cderefnode:=ti8086derefnode;
 end.

+ 3 - 3
compiler/ncgmem.pas

@@ -193,8 +193,8 @@ implementation
       begin
          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
            { 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
@@ -205,7 +205,7 @@ implementation
              hlcg.location_force_mem(current_asmdata.CurrAsmList,left.location,left.resultdef)
            else
              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;