Explorar o código

- reverted r32315: targets using the high level code generator should keep
complex procvars either in a single "register", or in memory

git-svn-id: trunk@32408 -

Jonas Maebe %!s(int64=9) %!d(string=hai) anos
pai
achega
949fd53a0a
Modificáronse 1 ficheiros con 1 adicións e 52 borrados
  1. 1 52
      compiler/hlcgobj.pas

+ 1 - 52
compiler/hlcgobj.pas

@@ -3964,61 +3964,10 @@ implementation
     end;
 
   procedure thlcgobj.location_force_mem(list: TAsmList; var l: tlocation; size: tdef);
-
-    procedure location_force_procvardef_mem(const href: treference; const fieldname: TIDString; first_field: boolean);
-      var
-        fref: treference;
-        field: tfieldvarsym;
-      begin
-        field:=tfieldvarsym(search_struct_member(trecorddef(methodpointertype),fieldname));
-        if not assigned(field) then
-          internalerror(2015111103);
-        fref:=href;
-        g_set_addr_nonbitpacked_record_field_ref(list,trecorddef(methodpointertype),field,fref);
-        case l.loc of
-          LOC_CONSTANT:
-            begin
-              { in this case, the constant needs to be loaded in both the
-                high and low location }
-              hlcg.a_load_const_ref(list,field.vardef,l.value,fref);
-            end;
-          LOC_REGISTER,LOC_CREGISTER:
-            begin
-              if (target_info.endian=endian_little)=first_field then
-                hlcg.a_load_reg_ref(list,cprocvardef.getreusableprocaddr(tprocvardef(size)),field.vardef,l.register,fref)
-              else
-                hlcg.a_load_reg_ref(list,cprocvardef.getreusableprocaddr(tprocvardef(size)),field.vardef,l.registerhi,fref)
-            end;
-          else
-            internalerror(2015111105);
-        end;
-      end;
-
     var
-      r, href: treference;
+      r : treference;
       forcesize: aint;
     begin
-      { on the JVM target, all procvars are represented by a class, so they
-        don't take up more than one register -> use regular code there }
-      if (size.typ=procvardef) and
-         not tprocvardef(size).is_addressonly and
-         not(target_info.system in systems_managed_vm) then
-        begin
-          if l.loc in [LOC_REFERENCE,LOC_CREFERENCE] then
-            exit;
-
-          tg.gethltemp(list,size,size.size,tt_normal,r);
-          href:=r;
-          g_ptrtypecast_ref(list,cpointerdef.getreusable(size),cpointerdef.getreusable(methodpointertype),href);
-
-          location_force_procvardef_mem(href,'proc',true);
-          location_force_procvardef_mem(href,'self',false);
-
-          location_reset_ref(l,LOC_REFERENCE,l.size,r.alignment);
-          l.reference:=r;
-          exit;
-        end;
-
       case l.loc of
         LOC_FPUREGISTER,
         LOC_CFPUREGISTER :