mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-10-31 03:11:39 +01:00 
			
		
		
		
	- 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 -
			
			
This commit is contained in:
		
							parent
							
								
									0eec337a00
								
							
						
					
					
						commit
						c2c68ddb8f
					
				| @ -432,18 +432,11 @@ implementation | |||||||
|           location_reset(location,LOC_CONSTANT,int_cgsize(resultdef.size)); |           location_reset(location,LOC_CONSTANT,int_cgsize(resultdef.size)); | ||||||
|           if (source_info.endian=target_info.endian) then |           if (source_info.endian=target_info.endian) then | ||||||
|             begin |             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 } |               { 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      } |               { if changed to "paword", please also modify "32-resultdef.size*8" and      } | ||||||
|               { cross-endian code below                                                   } |               { cross-endian code below                                                   } | ||||||
|               { Extra aint type cast to avoid range errors                                } |               { Extra aint type cast to avoid range errors                                } | ||||||
|               location.value:=aint(pCardinal(value_set)^) |               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 |             end | ||||||
|           else |           else | ||||||
|             begin |             begin | ||||||
| @ -490,11 +483,7 @@ implementation | |||||||
|                                begin |                                begin | ||||||
|                                  if (source_info.endian=target_info.endian) then |                                  if (source_info.endian=target_info.endian) then | ||||||
|                                    begin |                                    begin | ||||||
| {$if defined(FPC_NEW_BIGENDIAN_SETS) or defined(FPC_LITTLE_ENDIAN)} |  | ||||||
|                                      if tai_const(hp1).value<>Psetbytes(value_set)^[i ] then |                                      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 |                                        break | ||||||
|                                    end |                                    end | ||||||
|                                  else if tai_const(hp1).value<>reverse_byte(Psetbytes(value_set)^[i]) then |                                  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)); |                    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)); |                    current_asmdata.asmlists[al_typedconsts].concat(Tai_label.Create(lastlabel)); | ||||||
|                    if (source_info.endian=target_info.endian) then |                    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 |                      for i:=0 to 31 do | ||||||
|                        current_asmdata.asmlists[al_typedconsts].concat(Tai_const.Create_8bit(Psetbytes(value_set)^[i])) |                        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 |                    else | ||||||
|                      for i:=0 to 31 do |                      for i:=0 to 31 do | ||||||
|                        current_asmdata.asmlists[al_typedconsts].concat(Tai_const.Create_8bit(reverse_byte(Psetbytes(value_set)^[i]))); |                        current_asmdata.asmlists[al_typedconsts].concat(Tai_const.Create_8bit(reverse_byte(Psetbytes(value_set)^[i]))); | ||||||
|  | |||||||
| @ -2362,7 +2362,6 @@ begin | |||||||
|   def_system_macro('FPC_HAS_STR_CURRENCY'); |   def_system_macro('FPC_HAS_STR_CURRENCY'); | ||||||
|   def_system_macro('FPC_REAL2REAL_FIXED'); |   def_system_macro('FPC_REAL2REAL_FIXED'); | ||||||
|   def_system_macro('FPC_STRTOCHARARRAYPROC'); |   def_system_macro('FPC_STRTOCHARARRAYPROC'); | ||||||
|   def_system_macro('FPC_NEW_BIGENDIAN_SETS'); |  | ||||||
|   def_system_macro('FPC_STRTOSHORTSTRINGPROC'); |   def_system_macro('FPC_STRTOSHORTSTRINGPROC'); | ||||||
|   def_system_macro('FPC_OBJFPC_EXTENDED_IF'); |   def_system_macro('FPC_OBJFPC_EXTENDED_IF'); | ||||||
| {$if defined(x86) or defined(powerpc) or defined(powerpc64)} | {$if defined(x86) or defined(powerpc) or defined(powerpc64)} | ||||||
|  | |||||||
| @ -595,13 +595,8 @@ implementation | |||||||
|                   { arrays of 32-bit values CEC          } |                   { arrays of 32-bit values CEC          } | ||||||
|                   if source_info.endian = target_info.endian then |                   if source_info.endian = target_info.endian then | ||||||
|                     begin |                     begin | ||||||
| {$if defined(FPC_NEW_BIGENDIAN_SETS) or defined(FPC_LITTLE_ENDIAN)} |  | ||||||
|                       for i:=0 to p.resultdef.size-1 do |                       for i:=0 to p.resultdef.size-1 do | ||||||
|                         list.concat(tai_const.create_8bit(Psetbytes(tsetconstnode(p).value_set)^[i])); |                         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 |                     end | ||||||
|                   else |                   else | ||||||
|                     begin |                     begin | ||||||
|  | |||||||
| @ -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} | {$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; | 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 LARGESET} | ||||||
| 
 | 
 | ||||||
| {$endif ndef FPC_NEW_BIGENDIAN_SETS} | {$endif FPC_OLD_BIGENDIAN_SETS} | ||||||
|  | |||||||
| @ -32,13 +32,8 @@ type | |||||||
|   fpc_big_chararray = array[0..0] of char; |   fpc_big_chararray = array[0..0] of char; | ||||||
|   fpc_big_widechararray = array[0..0] of widechar; |   fpc_big_widechararray = array[0..0] of widechar; | ||||||
| {$endif ndef FPC_STRTOCHARARRAYPROC} | {$endif ndef FPC_STRTOCHARARRAYPROC} | ||||||
| {$ifdef FPC_NEW_BIGENDIAN_SETS} |  | ||||||
|   fpc_small_set = bitpacked array[0..31] of 0..1; |   fpc_small_set = bitpacked array[0..31] of 0..1; | ||||||
|   fpc_normal_set = bitpacked array[0..255] 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_byte = array[0..31] of byte; | ||||||
|   fpc_normal_set_long = array[0..7] of longint; |   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} | {$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} | {$ifdef FPC_SETBASE_USED} | ||||||
| procedure fpc_varset_load(const l;sourcesize : longint;var dest;size,srcminusdstbase : ptrint); compilerproc; | procedure fpc_varset_load(const l;sourcesize : longint;var dest;size,srcminusdstbase : ptrint); compilerproc; | ||||||
| {$else} | {$else} | ||||||
|  | |||||||
| @ -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 |                                  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; | procedure fpc_varset_create_element(b,size : ptrint; var data); compilerproc; | ||||||
|   type |   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; |     tbsetarray = bitpacked array[0..sizeof(sizeint)-1] of 0..1; | ||||||
| {$endif} |  | ||||||
|   begin |   begin | ||||||
|     FillChar(data,size,0); |     FillChar(data,size,0); | ||||||
| {$ifndef FPC_NEW_BIGENDIAN_SETS} |  | ||||||
|     tbytearray(data)[b div 8]:=1 shl (b mod 8); |  | ||||||
| {$else} |  | ||||||
|     tbsetarray(data)[b]:=1; |     tbsetarray(data)[b]:=1; | ||||||
| {$endif} |  | ||||||
|   end; |   end; | ||||||
| {$endif ndef FPC_SYSTEM_HAS_FPC_VARSET_CREATE_ELEMENT} | {$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; | procedure fpc_varset_set(const source;var dest; b,size : ptrint); compilerproc; | ||||||
|   type |   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; |     tbsetarray = bitpacked array[0..sizeof(sizeint)-1] of 0..1; | ||||||
| {$endif} |  | ||||||
|   begin |   begin | ||||||
|     move(source,dest,size); |     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; |     tbsetarray(dest)[b]:=1; | ||||||
| {$endif} |  | ||||||
|   end; |   end; | ||||||
| {$endif ndef FPC_SYSTEM_HAS_FPC_VARSET_SET_BYTE} | {$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; | procedure fpc_varset_unset(const source;var dest; b,size : ptrint); compilerproc; | ||||||
|   type |   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; |     tbsetarray = bitpacked array[0..sizeof(sizeint)-1] of 0..1; | ||||||
| {$endif} |  | ||||||
|   begin |   begin | ||||||
|     move(source,dest,size); |     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; |     tbsetarray(dest)[b]:=0; | ||||||
| {$endif} |  | ||||||
|   end; |   end; | ||||||
| {$endif ndef FPC_SYSTEM_HAS_FPC_VARSET_UNSET_BYTE} | {$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; | procedure fpc_varset_set_range(const orgset; var dest;l,h,size : ptrint); compilerproc; | ||||||
|   type |   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; |     tbsetarray = bitpacked array[0..sizeof(sizeint)-1] of 0..1; | ||||||
| {$endif} |  | ||||||
|   var |   var | ||||||
|     i : ptrint; |     i : ptrint; | ||||||
|   begin |   begin | ||||||
|     move(orgset,dest,size); |     move(orgset,dest,size); | ||||||
|     for i:=l to h do |     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; |        tbsetarray(dest)[i]:=1; | ||||||
| {$endif} |  | ||||||
|   end; |   end; | ||||||
| {$endif ndef FPC_SYSTEM_HAS_FPC_VARSET_SET_RANGE} | {$endif ndef FPC_SYSTEM_HAS_FPC_VARSET_SET_RANGE} | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -456,16 +456,16 @@ end; | |||||||
| 
 | 
 | ||||||
| Function SetToString(TypeInfo: PTypeInfo; Value: Integer; Brackets: Boolean) : String; | Function SetToString(TypeInfo: PTypeInfo; Value: Integer; Brackets: Boolean) : String; | ||||||
| 
 | 
 | ||||||
| {$ifdef FPC_NEW_BIGENDIAN_SETS} |  | ||||||
| type | type | ||||||
|   tsetarr = bitpacked array[0..31] of 0..1; |   tsetarr = bitpacked array[0..31] of 0..1; | ||||||
| {$endif} |  | ||||||
| Var | Var | ||||||
|   I : Integer; |   I : Integer; | ||||||
|   PTI : PTypeInfo; |   PTI : PTypeInfo; | ||||||
| 
 | 
 | ||||||
| begin | 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 |   case GetTypeData(TypeInfo)^.OrdType of | ||||||
|     otSByte,otUByte: Value:=Value shl 24; |     otSByte,otUByte: Value:=Value shl 24; | ||||||
|     otSWord,otUWord: Value:=Value shl 16; |     otSWord,otUWord: Value:=Value shl 16; | ||||||
| @ -476,20 +476,13 @@ begin | |||||||
|   Result:=''; |   Result:=''; | ||||||
|   For I:=0 to SizeOf(Integer)*8-1 do |   For I:=0 to SizeOf(Integer)*8-1 do | ||||||
|     begin |     begin | ||||||
| {$ifdef FPC_NEW_BIGENDIAN_SETS} |  | ||||||
|       if (tsetarr(Value)[i]<>0) then |       if (tsetarr(Value)[i]<>0) then | ||||||
| {$else} |  | ||||||
|       if ((Value and 1)<>0) then |  | ||||||
| {$endif} |  | ||||||
|         begin |         begin | ||||||
|           If Result='' then |           If Result='' then | ||||||
|             Result:=GetEnumName(PTI,i) |             Result:=GetEnumName(PTI,i) | ||||||
|           else |           else | ||||||
|             Result:=Result+','+GetEnumName(PTI,I); |             Result:=Result+','+GetEnumName(PTI,I); | ||||||
|         end; |         end; | ||||||
| {$ifndef FPC_NEW_BIGENDIAN_SETS} |  | ||||||
|       Value:=Value shr 1; |  | ||||||
| {$endif FPC_NEW_BIGENDIAN_SETS} |  | ||||||
|     end; |     end; | ||||||
|   if Brackets then |   if Brackets then | ||||||
|     Result:='['+Result+']'; |     Result:='['+Result+']'; | ||||||
|  | |||||||
| @ -14,7 +14,7 @@ | |||||||
| 
 | 
 | ||||||
|  **********************************************************************} |  **********************************************************************} | ||||||
| 
 | 
 | ||||||
| {$ifndef FPC_NEW_BIGENDIAN_SETS} | {$ifdef FPC_OLD_BIGENDIAN_SETS} | ||||||
| 
 | 
 | ||||||
| {$define FPC_SYSTEM_HAS_FPC_SET_LOAD_SMALL} | {$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; | 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 |        srwi.    r3,r3,5 | ||||||
| end; | end; | ||||||
| 
 | 
 | ||||||
| {$endif ndef FPC_NEW_BIGENDIAN_SETS} | {$endif FPC_OLD_BIGENDIAN_SETS} | ||||||
|  | |||||||
| @ -14,7 +14,7 @@ | |||||||
| 
 | 
 | ||||||
|  **********************************************************************} |  **********************************************************************} | ||||||
| 
 | 
 | ||||||
| {$ifndef FPC_NEW_BIGENDIAN_SETS} | {$ifdef FPC_OLD_BIGENDIAN_SETS} | ||||||
| 
 | 
 | ||||||
| {$define FPC_SYSTEM_HAS_FPC_SET_LOAD_SMALL} | {$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; | 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 |        srwi.    r3,r3,5 | ||||||
| end; | end; | ||||||
| 
 | 
 | ||||||
| {$endif ndef FPC_NEW_BIGENDIAN_SETS} | {$endif FPC_OLD_BIGENDIAN_SETS} | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Jonas Maebe
						Jonas Maebe