Selaa lähdekoodia

* write set constants only as large as needed by taking care of resultdef.size, resolves issue #27886

git-svn-id: trunk@30655 -
florian 10 vuotta sitten
vanhempi
commit
6797685c86
1 muutettua tiedostoa jossa 3 lisäystä ja 38 poistoa
  1. 3 38
      compiler/ncgcon.pas

+ 3 - 38
compiler/ncgcon.pas

@@ -458,10 +458,10 @@ implementation
         new_section(current_asmdata.asmlists[al_typedconsts],sec_rodata_norel,result.name,const_align(8));
         current_asmdata.asmlists[al_typedconsts].concat(Tai_label.Create(lab));
         if (source_info.endian=target_info.endian) then
-          for i:=0 to 31 do
+          for i:=0 to resultdef.size-1 do
             current_asmdata.asmlists[al_typedconsts].concat(Tai_const.Create_8bit(Psetbytes(value_set)^[i]))
         else
-          for i:=0 to 31 do
+          for i:=0 to resultdef.size-1 do
             current_asmdata.asmlists[al_typedconsts].concat(Tai_const.Create_8bit(reverse_byte(Psetbytes(value_set)^[i])));
       end;
 
@@ -474,7 +474,7 @@ implementation
         { const already used ? }
         if not assigned(lab_set) then
           begin
-            entry := current_asmdata.ConstPools[sp_varsets].FindOrAdd(value_set, 32);
+            entry := current_asmdata.ConstPools[sp_varsets].FindOrAdd(value_set, resultdef.size);
 
              { :-(, we must generate a new entry }
              if not assigned(entry^.Data) then
@@ -515,41 +515,6 @@ implementation
               location.value:=location.value shr (32-resultdef.size*8);
           end;
 
-        procedure varsetconst;
-          var
-             lastlabel   : tasmlabel;
-             i           : longint;
-             entry       : PHashSetItem;
-          begin
-            location_reset_ref(location,LOC_CREFERENCE,OS_NO,const_align(8));
-            lastlabel:=nil;
-            { const already used ? }
-            if not assigned(lab_set) then
-              begin
-                entry := current_asmdata.ConstPools[sp_varsets].FindOrAdd(value_set, 32);
-
-                lab_set := TAsmLabel(entry^.Data);  // is it needed anymore?
-
-                 { :-(, we must generate a new entry }
-                 if not assigned(entry^.Data) then
-                   begin
-                     current_asmdata.getglobaldatalabel(lastlabel);
-                     lab_set:=lastlabel;
-                     entry^.Data:=lastlabel;
-                     maybe_new_object_file(current_asmdata.asmlists[al_typedconsts]);
-                     new_section(current_asmdata.asmlists[al_typedconsts],sec_rodata_norel,lastlabel.name,const_align(8));
-                     current_asmdata.asmlists[al_typedconsts].concat(Tai_label.Create(lastlabel));
-                     if (source_info.endian=target_info.endian) then
-                       for i:=0 to 31 do
-                         current_asmdata.asmlists[al_typedconsts].concat(Tai_const.Create_8bit(Psetbytes(value_set)^[i]))
-                     else
-                       for i:=0 to 31 do
-                         current_asmdata.asmlists[al_typedconsts].concat(Tai_const.Create_8bit(reverse_byte(Psetbytes(value_set)^[i])));
-                   end;
-              end;
-            location.reference.symbol:=lab_set;
-          end;
-
       begin
         adjustforsetbase;