mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-10-25 09:41:33 +02: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