From c2c68ddb8fd0d5dfb6b67b4755db6870441f0164 Mon Sep 17 00:00:00 2001 From: Jonas Maebe Date: Sun, 23 Aug 2009 08:16:40 +0000 Subject: [PATCH] - removed FPC_NEW_BIGENDIAN_SETS define and if(n)defs * left old cpu-specific set helper code under ifdef FPC_OLD_BIGENDIAN_SETS in case someone wants to write new assembler set helpers (although most of them should be optimally generated by the compiler already if http://wiki.freepascal.org/FPC_HowToDo#Bit.28field.29_getting.2Fsetting_primitives are optimally implemented) git-svn-id: trunk@13582 - --- compiler/ncgcon.pas | 16 --- compiler/options.pas | 1 - compiler/ptconst.pas | 5 - rtl/i386/set.inc | 10 +- rtl/inc/compproc.inc | 19 ---- rtl/inc/genset.inc | 242 ------------------------------------------ rtl/objpas/typinfo.pp | 13 +-- rtl/powerpc/set.inc | 4 +- rtl/powerpc64/set.inc | 4 +- 9 files changed, 15 insertions(+), 299 deletions(-) diff --git a/compiler/ncgcon.pas b/compiler/ncgcon.pas index 1753651f66..48d3dcb8f3 100644 --- a/compiler/ncgcon.pas +++ b/compiler/ncgcon.pas @@ -432,18 +432,11 @@ implementation location_reset(location,LOC_CONSTANT,int_cgsize(resultdef.size)); if (source_info.endian=target_info.endian) then begin -{$if defined(FPC_NEW_BIGENDIAN_SETS) or defined(FPC_LITTLE_ENDIAN)} { not plongint, because that will "sign extend" the set on 64 bit platforms } { if changed to "paword", please also modify "32-resultdef.size*8" and } { cross-endian code below } { Extra aint type cast to avoid range errors } location.value:=aint(pCardinal(value_set)^) -{$else} - location.value:=reverse_byte(Psetbytes(value_set)^[0]); - location.value:=location.value or (reverse_byte(Psetbytes(value_set)^[1]) shl 8); - location.value:=location.value or (reverse_byte(Psetbytes(value_set)^[2]) shl 16); - location.value:=location.value or (reverse_byte(Psetbytes(value_set)^[3]) shl 24); -{$endif} end else begin @@ -490,11 +483,7 @@ implementation begin if (source_info.endian=target_info.endian) then begin -{$if defined(FPC_NEW_BIGENDIAN_SETS) or defined(FPC_LITTLE_ENDIAN)} if tai_const(hp1).value<>Psetbytes(value_set)^[i ] then -{$else} - if tai_const(hp1).value<>reverse_byte(Psetbytes(value_set)^[i xor 3]) then -{$endif} break end else if tai_const(hp1).value<>reverse_byte(Psetbytes(value_set)^[i]) then @@ -537,13 +526,8 @@ implementation 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 -{$if defined(FPC_NEW_BIGENDIAN_SETS) or defined(FPC_LITTLE_ENDIAN)} 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 xor 3]))) -{$endif} else for i:=0 to 31 do current_asmdata.asmlists[al_typedconsts].concat(Tai_const.Create_8bit(reverse_byte(Psetbytes(value_set)^[i]))); diff --git a/compiler/options.pas b/compiler/options.pas index ecfd25be8d..2f55234c83 100644 --- a/compiler/options.pas +++ b/compiler/options.pas @@ -2362,7 +2362,6 @@ begin def_system_macro('FPC_HAS_STR_CURRENCY'); def_system_macro('FPC_REAL2REAL_FIXED'); def_system_macro('FPC_STRTOCHARARRAYPROC'); - def_system_macro('FPC_NEW_BIGENDIAN_SETS'); def_system_macro('FPC_STRTOSHORTSTRINGPROC'); def_system_macro('FPC_OBJFPC_EXTENDED_IF'); {$if defined(x86) or defined(powerpc) or defined(powerpc64)} diff --git a/compiler/ptconst.pas b/compiler/ptconst.pas index 2ee5ea939d..baf41ac5b5 100644 --- a/compiler/ptconst.pas +++ b/compiler/ptconst.pas @@ -595,13 +595,8 @@ implementation { arrays of 32-bit values CEC } if source_info.endian = target_info.endian then begin -{$if defined(FPC_NEW_BIGENDIAN_SETS) or defined(FPC_LITTLE_ENDIAN)} for i:=0 to p.resultdef.size-1 do list.concat(tai_const.create_8bit(Psetbytes(tsetconstnode(p).value_set)^[i])); -{$else} - for i:=0 to p.resultdef.size-1 do - list.concat(tai_const.create_8bit(reverse_byte(Psetbytes(tsetconstnode(p).value_set)^[i xor 3]))); -{$endif} end else begin diff --git a/rtl/i386/set.inc b/rtl/i386/set.inc index 9692925fef..cdac341a28 100644 --- a/rtl/i386/set.inc +++ b/rtl/i386/set.inc @@ -13,7 +13,13 @@ **********************************************************************} -{$ifndef FPC_NEW_BIGENDIAN_SETS} +{ the following code is exactly big endian set-related, but specific to the old + scheme whereby sets were either 4 or 32 bytes. I've left the routines here + so if someone wants to, they can create equivalents of the new varset helpers + from rtl/inc/genset.inc +} + +{$ifdef FPC_OLD_BIGENDIAN_SETS} {$define FPC_SYSTEM_HAS_FPC_SET_LOAD_SMALL} function fpc_set_load_small(l: fpc_small_set): fpc_normal_set;assembler;[public,alias:'FPC_SET_LOAD_SMALL']; compilerproc; @@ -543,4 +549,4 @@ end; {$endif LARGESET} -{$endif ndef FPC_NEW_BIGENDIAN_SETS} +{$endif FPC_OLD_BIGENDIAN_SETS} diff --git a/rtl/inc/compproc.inc b/rtl/inc/compproc.inc index f6eb841b8f..5debef971d 100644 --- a/rtl/inc/compproc.inc +++ b/rtl/inc/compproc.inc @@ -32,13 +32,8 @@ type fpc_big_chararray = array[0..0] of char; fpc_big_widechararray = array[0..0] of widechar; {$endif ndef FPC_STRTOCHARARRAYPROC} -{$ifdef FPC_NEW_BIGENDIAN_SETS} fpc_small_set = bitpacked array[0..31] of 0..1; fpc_normal_set = bitpacked array[0..255] of 0..1; -{$else} - fpc_small_set = longint; - fpc_normal_set = array[0..7] of longint; -{$endif} fpc_normal_set_byte = array[0..31] of byte; fpc_normal_set_long = array[0..7] of longint; @@ -635,20 +630,6 @@ Procedure fpc_Copy_proc (Src, Dest, TypeInfo : Pointer); compilerproc; inline; {$endif FPC_HAS_FEATURE_RTTI} -{$ifndef FPC_NEW_BIGENDIAN_SETS} -function fpc_set_load_small(l: fpc_small_set): fpc_normal_set; compilerproc; -function fpc_set_create_element(b : byte): fpc_normal_set; compilerproc; -function fpc_set_set_byte(const source: fpc_normal_set; b : byte): fpc_normal_set; compilerproc; -function fpc_set_unset_byte(const source: fpc_normal_set; b : byte): fpc_normal_set; compilerproc; -function fpc_set_set_range(const orgset: fpc_normal_set; l,h : byte): fpc_normal_set; compilerproc; -function fpc_set_add_sets(const set1,set2: fpc_normal_set): fpc_normal_set; compilerproc; -function fpc_set_mul_sets(const set1,set2: fpc_normal_set): fpc_normal_set; compilerproc; -function fpc_set_sub_sets(const set1,set2: fpc_normal_set): fpc_normal_set; compilerproc; -function fpc_set_symdif_sets(const set1,set2: fpc_normal_set): fpc_normal_set; compilerproc; -function fpc_set_comp_sets(const set1,set2: fpc_normal_set): boolean; compilerproc; -function fpc_set_contains_sets(const set1,set2: fpc_normal_set): boolean; compilerproc; -{$endif ndef FPC_NEW_BIGENDIAN_SETS} - {$ifdef FPC_SETBASE_USED} procedure fpc_varset_load(const l;sourcesize : longint;var dest;size,srcminusdstbase : ptrint); compilerproc; {$else} diff --git a/rtl/inc/genset.inc b/rtl/inc/genset.inc index 45ad2a5609..1d2c50bf3b 100644 --- a/rtl/inc/genset.inc +++ b/rtl/inc/genset.inc @@ -13,216 +13,6 @@ **********************************************************************} -{$ifndef FPC_NEW_BIGENDIAN_SETS} - -{$ifndef FPC_SYSTEM_HAS_FPC_SET_LOAD_SMALL} -{ Error No pascal version of FPC_SET_LOAD_SMALL} - { THIS DEPENDS ON THE ENDIAN OF THE ARCHITECTURE! - Not anymore PM} - -function fpc_set_load_small(l: fpc_small_set): fpc_normal_set; [public,alias:'FPC_SET_LOAD_SMALL']; compilerproc; - { - load a normal set p from a smallset l - } - begin - FillDWord(fpc_set_load_small,sizeof(fpc_set_load_small) div 4,0); - move(l,fpc_set_load_small,sizeof(l)); - end; -{$endif FPC_SYSTEM_HAS_FPC_SET_LOAD_SMALL} - - -{$ifndef FPC_SYSTEM_HAS_FPC_SET_CREATE_ELEMENT} -function fpc_set_create_element(b : byte): fpc_normal_set;[public,alias:'FPC_SET_CREATE_ELEMENT']; compilerproc; - { - create a new set in p from an element b - } - begin - FillDWord(fpc_set_create_element,SizeOf(fpc_set_create_element) div 4,0); -{$ifndef FPC_NEW_BIGENDIAN_SETS} - fpc_set_create_element[b div 32] := 1 shl (b mod 32); -{$else} - fpc_set_create_element[b] := 1; -{$endif} - end; -{$endif FPC_SYSTEM_HAS_FPC_SET_CREATE_ELEMENT} - -{$ifndef FPC_SYSTEM_HAS_FPC_SET_SET_BYTE} - - function fpc_set_set_byte(const source: fpc_normal_set; b : byte): fpc_normal_set; compilerproc; - { - add the element b to the set "source" - } - var - c: longint; - begin - move(source,fpc_set_set_byte,sizeof(source)); -{$ifndef FPC_NEW_BIGENDIAN_SETS} - c := fpc_set_set_byte[b div 32]; - c := (1 shl (b mod 32)) or c; - fpc_set_set_byte[b div 32] := c; -{$else} - fpc_set_set_byte[b] := 1; -{$endif} - end; -{$endif FPC_SYSTEM_HAS_FPC_SET_SET_BYTE} - - -{$ifndef FPC_SYSTEM_HAS_FPC_SET_UNSET_BYTE} - -function fpc_set_unset_byte(const source: fpc_normal_set; b : byte): fpc_normal_set; compilerproc; - { - suppresses the element b to the set pointed by p - used for exclude(set,element) - } - var - c: longint; - begin - move(source,fpc_set_unset_byte,sizeof(source)); -{$ifndef FPC_NEW_BIGENDIAN_SETS} - c := fpc_set_unset_byte[b div 32]; - c := c and not (1 shl (b mod 32)); - fpc_set_unset_byte[b div 32] := c; -{$else} - fpc_set_unset_byte[b] := 0; -{$endif} - end; -{$endif FPC_SYSTEM_HAS_FPC_SET_UNSET_BYTE} - - -{$ifndef FPC_SYSTEM_HAS_FPC_SET_SET_RANGE} - function fpc_set_set_range(const orgset: fpc_normal_set; l,h : byte): fpc_normal_set; compilerproc; - { - adds the range [l..h] to the set orgset - } - var - i: integer; - c: longint; - begin - move(orgset,fpc_set_set_range,sizeof(orgset)); - for i:=l to h do - begin -{$ifndef FPC_NEW_BIGENDIAN_SETS} - c := fpc_set_set_range[i div 32]; - c := (1 shl (i mod 32)) or c; - fpc_set_set_range[i div 32] := c; -{$else} - fpc_set_set_range[i] := 1; -{$endif} - end; - end; -{$endif ndef FPC_SYSTEM_HAS_FPC_SET_SET_RANGE} - - -{$ifndef FPC_SYSTEM_HAS_FPC_SET_ADD_SETS} - function fpc_set_add_sets(const set1,set2: fpc_normal_set): fpc_normal_set;[public,alias:'FPC_SET_ADD_SETS']; compilerproc; - var - src1: fpc_normal_set_long absolute set1; - src2: fpc_normal_set_long absolute set2; - dest: fpc_normal_set_long absolute fpc_set_add_sets; - { - adds set1 and set2 into set dest - } - var - i: integer; - begin - for i:=0 to 7 do - dest[i] := src1[i] or src2[i]; - end; -{$endif} - - -{$ifndef FPC_SYSTEM_HAS_FPC_SET_MUL_SETS} - function fpc_set_mul_sets(const set1,set2: fpc_normal_set): fpc_normal_set;[public,alias:'FPC_SET_MUL_SETS']; compilerproc; - var - src1: fpc_normal_set_long absolute set1; - src2: fpc_normal_set_long absolute set2; - dest: fpc_normal_set_long absolute fpc_set_mul_sets; - { - multiplies (takes common elements of) set1 and set2 result put in dest - } - var - i: integer; - begin - for i:=0 to 7 do - dest[i] := src1[i] and src2[i]; - end; -{$endif} - - -{$ifndef FPC_SYSTEM_HAS_FPC_SET_SUB_SETS} - function fpc_set_sub_sets(const set1,set2: fpc_normal_set): fpc_normal_set;[public,alias:'FPC_SET_SUB_SETS']; compilerproc; - var - src1: fpc_normal_set_long absolute set1; - src2: fpc_normal_set_long absolute set2; - dest: fpc_normal_set_long absolute fpc_set_sub_sets; - { - computes the diff from set1 to set2 result in dest - } - var - i: integer; - begin - for i:=0 to 7 do - dest[i] := src1[i] and not src2[i]; - end; -{$endif} - - -{$ifndef FPC_SYSTEM_HAS_FPC_SET_SYMDIF_SETS} - function fpc_set_symdif_sets(const set1,set2: fpc_normal_set): fpc_normal_set;[public,alias:'FPC_SET_SYMDIF_SETS']; compilerproc; - var - src1: fpc_normal_set_long absolute set1; - src2: fpc_normal_set_long absolute set2; - dest: fpc_normal_set_long absolute fpc_set_symdif_sets; - { - computes the symetric diff from set1 to set2 result in dest - } - var - i: integer; - begin - for i:=0 to 7 do - dest[i] := src1[i] xor src2[i]; - end; -{$endif} - -{$ifndef FPC_SYSTEM_HAS_FPC_SET_COMP_SETS} - function fpc_set_comp_sets(const set1,set2 : fpc_normal_set):boolean;[public,alias:'FPC_SET_COMP_SETS'];compilerproc; - { - compares set1 and set2 zeroflag is set if they are equal - } - var - i: integer; - src1: fpc_normal_set_long absolute set1; - src2: fpc_normal_set_long absolute set2; - begin - fpc_set_comp_sets:= false; - for i:=0 to 7 do - if src1[i] <> src2[i] then - exit; - fpc_set_comp_sets:= true; - end; -{$endif} - - - -{$ifndef FPC_SYSTEM_HAS_FPC_SET_CONTAINS_SET} - function fpc_set_contains_sets(const set1,set2 : fpc_normal_set):boolean;[public,alias:'FPC_SET_CONTAINS_SETS'];compilerproc; - { - on exit, zero flag is set if set1 <= set2 (set2 contains set1) - } - var - i : integer; - src1: fpc_normal_set_long absolute set1; - src2: fpc_normal_set_long absolute set2; - begin - fpc_set_contains_sets:= false; - for i:=0 to 7 do - if (src1[i] and not src2[i]) <> 0 then - exit; - fpc_set_contains_sets:= true; - end; -{$endif} - -{$endif ndef FPC_NEW_BIGENDIAN_SETS} {**************************************************************************** Var sets @@ -285,18 +75,10 @@ procedure fpc_varset_load(const l;sourcesize : longint;var dest;size : ptrint); } procedure fpc_varset_create_element(b,size : ptrint; var data); compilerproc; type -{$ifndef FPC_NEW_BIGENDIAN_SETS} - tbytearray = array[0..sizeof(sizeint)-1] of byte; -{$else} tbsetarray = bitpacked array[0..sizeof(sizeint)-1] of 0..1; -{$endif} begin FillChar(data,size,0); -{$ifndef FPC_NEW_BIGENDIAN_SETS} - tbytearray(data)[b div 8]:=1 shl (b mod 8); -{$else} tbsetarray(data)[b]:=1; -{$endif} end; {$endif ndef FPC_SYSTEM_HAS_FPC_VARSET_CREATE_ELEMENT} @@ -307,18 +89,10 @@ procedure fpc_varset_create_element(b,size : ptrint; var data); compilerproc; } procedure fpc_varset_set(const source;var dest; b,size : ptrint); compilerproc; type -{$ifndef FPC_NEW_BIGENDIAN_SETS} - tbytearray = array[0..sizeof(sizeint)-1] of byte; -{$else} tbsetarray = bitpacked array[0..sizeof(sizeint)-1] of 0..1; -{$endif} begin move(source,dest,size); -{$ifndef FPC_NEW_BIGENDIAN_SETS} - tbytearray(dest)[b div 8]:=tbytearray(dest)[b div 8] or (1 shl (b mod 8)); -{$else} tbsetarray(dest)[b]:=1; -{$endif} end; {$endif ndef FPC_SYSTEM_HAS_FPC_VARSET_SET_BYTE} @@ -330,18 +104,10 @@ procedure fpc_varset_set(const source;var dest; b,size : ptrint); compilerproc; } procedure fpc_varset_unset(const source;var dest; b,size : ptrint); compilerproc; type -{$ifndef FPC_NEW_BIGENDIAN_SETS} - tbytearray = array[0..sizeof(sizeint)-1] of byte; -{$else} tbsetarray = bitpacked array[0..sizeof(sizeint)-1] of 0..1; -{$endif} begin move(source,dest,size); -{$ifndef FPC_NEW_BIGENDIAN_SETS} - tbytearray(dest)[b div 8]:=tbytearray(dest)[b div 8] and not (1 shl (b mod 8)); -{$else} tbsetarray(dest)[b]:=0; -{$endif} end; {$endif ndef FPC_SYSTEM_HAS_FPC_VARSET_UNSET_BYTE} @@ -352,21 +118,13 @@ procedure fpc_varset_unset(const source;var dest; b,size : ptrint); compilerproc } procedure fpc_varset_set_range(const orgset; var dest;l,h,size : ptrint); compilerproc; type -{$ifndef FPC_NEW_BIGENDIAN_SETS} - tbytearray = array[0..sizeof(sizeint)-1] of byte; -{$else} tbsetarray = bitpacked array[0..sizeof(sizeint)-1] of 0..1; -{$endif} var i : ptrint; begin move(orgset,dest,size); for i:=l to h do -{$ifndef FPC_NEW_BIGENDIAN_SETS} - tbytearray(dest)[i div 8]:=(1 shl (i mod 8)) or tbytearray(dest)[i div 8]; -{$else} tbsetarray(dest)[i]:=1; -{$endif} end; {$endif ndef FPC_SYSTEM_HAS_FPC_VARSET_SET_RANGE} diff --git a/rtl/objpas/typinfo.pp b/rtl/objpas/typinfo.pp index b311332bd2..8759c681fe 100644 --- a/rtl/objpas/typinfo.pp +++ b/rtl/objpas/typinfo.pp @@ -456,16 +456,16 @@ end; Function SetToString(TypeInfo: PTypeInfo; Value: Integer; Brackets: Boolean) : String; -{$ifdef FPC_NEW_BIGENDIAN_SETS} type tsetarr = bitpacked array[0..31] of 0..1; -{$endif} Var I : Integer; PTI : PTypeInfo; begin -{$if defined(FPC_NEW_BIGENDIAN_SETS) and defined(FPC_BIG_ENDIAN)} +{$if defined(FPC_BIG_ENDIAN)} + { On big endian systems, set element 0 is in the most significant bit, + and the same goes for the elements of bitpacked arrays there. } case GetTypeData(TypeInfo)^.OrdType of otSByte,otUByte: Value:=Value shl 24; otSWord,otUWord: Value:=Value shl 16; @@ -476,20 +476,13 @@ begin Result:=''; For I:=0 to SizeOf(Integer)*8-1 do begin -{$ifdef FPC_NEW_BIGENDIAN_SETS} if (tsetarr(Value)[i]<>0) then -{$else} - if ((Value and 1)<>0) then -{$endif} begin If Result='' then Result:=GetEnumName(PTI,i) else Result:=Result+','+GetEnumName(PTI,I); end; -{$ifndef FPC_NEW_BIGENDIAN_SETS} - Value:=Value shr 1; -{$endif FPC_NEW_BIGENDIAN_SETS} end; if Brackets then Result:='['+Result+']'; diff --git a/rtl/powerpc/set.inc b/rtl/powerpc/set.inc index 92768766f7..34f11650b7 100644 --- a/rtl/powerpc/set.inc +++ b/rtl/powerpc/set.inc @@ -14,7 +14,7 @@ **********************************************************************} -{$ifndef FPC_NEW_BIGENDIAN_SETS} +{$ifdef FPC_OLD_BIGENDIAN_SETS} {$define FPC_SYSTEM_HAS_FPC_SET_LOAD_SMALL} function fpc_set_load_small(l: fpc_small_set): fpc_normal_set;assembler;[public,alias:'FPC_SET_LOAD_SMALL']; compilerproc; @@ -333,4 +333,4 @@ asm srwi. r3,r3,5 end; -{$endif ndef FPC_NEW_BIGENDIAN_SETS} +{$endif FPC_OLD_BIGENDIAN_SETS} diff --git a/rtl/powerpc64/set.inc b/rtl/powerpc64/set.inc index 5a72770e1b..7f1a5012de 100644 --- a/rtl/powerpc64/set.inc +++ b/rtl/powerpc64/set.inc @@ -14,7 +14,7 @@ **********************************************************************} -{$ifndef FPC_NEW_BIGENDIAN_SETS} +{$ifdef FPC_OLD_BIGENDIAN_SETS} {$define FPC_SYSTEM_HAS_FPC_SET_LOAD_SMALL} function fpc_set_load_small(l: fpc_small_set): fpc_normal_set;assembler;[public,alias:'FPC_SET_LOAD_SMALL']; compilerproc; @@ -330,6 +330,6 @@ asm srwi. r3,r3,5 end; -{$endif ndef FPC_NEW_BIGENDIAN_SETS} +{$endif FPC_OLD_BIGENDIAN_SETS}