diff --git a/compiler/cg386con.pas b/compiler/cg386con.pas index 23c07fb3cb..de2662c547 100644 --- a/compiler/cg386con.pas +++ b/compiler/cg386con.pas @@ -26,7 +26,7 @@ interface uses tree; -{.$define SMALLSETORD} +{$define SMALLSETORD} procedure secondrealconst(var p : ptree); @@ -251,26 +251,15 @@ implementation neededtyp : tait; begin {$ifdef SMALLSETORD} + { small sets are loaded as constants } if psetdef(p^.resulttype)^.settype=smallset then begin p^.location.loc:=LOC_MEM; p^.location.reference.isintvalue:=true; - p^.location.reference.offset:=p^.value_set^[0]; - end - else - begin - getdatalabel(lastlabel); - p^.lab_set:=lastlabel; - if (cs_smartlink in aktmoduleswitches) then - consts^.concat(new(pai_cut,init)); - consts^.concat(new(pai_label,init(duplabel(lastlabel)))); - for i:=0 to 31 do - consts^.concat(new(pai_const,init_8bit(p^.value_set^[i]))); - clear_reference(p^.location.reference); - p^.location.reference.symbol:=stringdup(lab2str(p^.lab_set)); - p^.location.loc:=LOC_MEM; + p^.location.reference.offset:=plongint(p^.value_set)^; + exit; end; -{$else} +{$endif} if psetdef(p^.resulttype)^.settype=smallset then neededtyp:=ait_const_32bit else @@ -349,7 +338,6 @@ implementation clear_reference(p^.location.reference); p^.location.reference.symbol:=stringdup(lab2str(p^.lab_set)); p^.location.loc:=LOC_MEM; -{$endif SMALLSETORD} end; @@ -368,7 +356,10 @@ implementation end. { $Log$ - Revision 1.21 1998-11-24 12:52:41 peter + Revision 1.22 1998-11-24 13:40:59 peter + * release smallsetord, so small sets constant are handled like longints + + Revision 1.21 1998/11/24 12:52:41 peter * sets are not written twice anymore * optimize for emptyset+single element which uses a new routine from set.inc FPC_SET_CREATE_ELEMENT