|
@@ -145,6 +145,8 @@ interface
|
|
|
|
|
|
{ true, if we are parsing preprocessor expressions }
|
|
|
in_preproc_comp_expr : boolean;
|
|
|
+ { true if cross-compiling for a CPU in opposite endianess}
|
|
|
+ change_endian_for_tokens : boolean;
|
|
|
|
|
|
constructor Create(const fn:string; is_macro: boolean = false);
|
|
|
destructor Destroy;override;
|
|
@@ -284,7 +286,7 @@ implementation
|
|
|
symbase,symtable,symtype,symsym,symconst,symdef,defutil,
|
|
|
{ This is needed for tcputype }
|
|
|
cpuinfo,
|
|
|
- fmodule,
|
|
|
+ fmodule,fppu,
|
|
|
{ this is needed for $I %CURRENTROUTINE%}
|
|
|
procinfo
|
|
|
{$if FPC_FULLVERSION<20700}
|
|
@@ -2698,7 +2700,11 @@ type
|
|
|
lasttoken:=NOTOKEN;
|
|
|
nexttoken:=NOTOKEN;
|
|
|
ignoredirectives:=TFPHashList.Create;
|
|
|
- end;
|
|
|
+ if (current_module is tppumodule) and assigned(tppumodule(current_module).ppufile) then
|
|
|
+ change_endian_for_tokens:=tppumodule(current_module).ppufile.change_endian
|
|
|
+ else
|
|
|
+ change_endian_for_tokens:=false;
|
|
|
+ end;
|
|
|
|
|
|
|
|
|
procedure tscannerfile.firstfile;
|
|
@@ -2870,17 +2876,11 @@ type
|
|
|
|
|
|
procedure tscannerfile.tokenwritesizeint(val : asizeint);
|
|
|
begin
|
|
|
-{$ifdef FPC_BIG_ENDIAN}
|
|
|
- val:=swapendian(val);
|
|
|
-{$endif}
|
|
|
recordtokenbuf.write(val,sizeof(asizeint));
|
|
|
end;
|
|
|
|
|
|
procedure tscannerfile.tokenwritelongint(val : longint);
|
|
|
begin
|
|
|
-{$ifdef FPC_BIG_ENDIAN}
|
|
|
- val:=swapendian(val);
|
|
|
-{$endif}
|
|
|
recordtokenbuf.write(val,sizeof(longint));
|
|
|
end;
|
|
|
|
|
@@ -2891,17 +2891,11 @@ type
|
|
|
|
|
|
procedure tscannerfile.tokenwriteword(val : word);
|
|
|
begin
|
|
|
-{$ifdef FPC_BIG_ENDIAN}
|
|
|
- val:=swapendian(val);
|
|
|
-{$endif}
|
|
|
recordtokenbuf.write(val,sizeof(word));
|
|
|
end;
|
|
|
|
|
|
procedure tscannerfile.tokenwritelongword(val : longword);
|
|
|
begin
|
|
|
-{$ifdef FPC_BIG_ENDIAN}
|
|
|
- val:=swapendian(val);
|
|
|
-{$endif}
|
|
|
recordtokenbuf.write(val,sizeof(longword));
|
|
|
end;
|
|
|
|
|
@@ -2910,9 +2904,8 @@ type
|
|
|
val : asizeint;
|
|
|
begin
|
|
|
replaytokenbuf.read(val,sizeof(asizeint));
|
|
|
-{$ifdef FPC_BIG_ENDIAN}
|
|
|
- val:=swapendian(val);
|
|
|
-{$endif}
|
|
|
+ if change_endian_for_tokens then
|
|
|
+ val:=swapendian(val);
|
|
|
result:=val;
|
|
|
end;
|
|
|
|
|
@@ -2921,9 +2914,8 @@ type
|
|
|
val : longword;
|
|
|
begin
|
|
|
replaytokenbuf.read(val,sizeof(longword));
|
|
|
-{$ifdef FPC_BIG_ENDIAN}
|
|
|
- val:=swapendian(val);
|
|
|
-{$endif}
|
|
|
+ if change_endian_for_tokens then
|
|
|
+ val:=swapendian(val);
|
|
|
result:=val;
|
|
|
end;
|
|
|
|
|
@@ -2932,9 +2924,8 @@ type
|
|
|
val : longint;
|
|
|
begin
|
|
|
replaytokenbuf.read(val,sizeof(longint));
|
|
|
-{$ifdef FPC_BIG_ENDIAN}
|
|
|
- val:=swapendian(val);
|
|
|
-{$endif}
|
|
|
+ if change_endian_for_tokens then
|
|
|
+ val:=swapendian(val);
|
|
|
result:=val;
|
|
|
end;
|
|
|
|
|
@@ -2959,9 +2950,8 @@ type
|
|
|
val : smallint;
|
|
|
begin
|
|
|
replaytokenbuf.read(val,sizeof(smallint));
|
|
|
-{$ifdef FPC_BIG_ENDIAN}
|
|
|
- val:=swapendian(val);
|
|
|
-{$endif}
|
|
|
+ if change_endian_for_tokens then
|
|
|
+ val:=swapendian(val);
|
|
|
result:=val;
|
|
|
end;
|
|
|
|
|
@@ -2970,9 +2960,8 @@ type
|
|
|
val : word;
|
|
|
begin
|
|
|
replaytokenbuf.read(val,sizeof(word));
|
|
|
-{$ifdef FPC_BIG_ENDIAN}
|
|
|
- val:=swapendian(val);
|
|
|
-{$endif}
|
|
|
+ if change_endian_for_tokens then
|
|
|
+ val:=swapendian(val);
|
|
|
result:=val;
|
|
|
end;
|
|
|
|
|
@@ -2989,16 +2978,13 @@ type
|
|
|
end;
|
|
|
|
|
|
procedure tscannerfile.tokenreadset(var b;size : longint);
|
|
|
-{$ifdef FPC_BIG_ENDIAN}
|
|
|
var
|
|
|
i : longint;
|
|
|
-{$endif}
|
|
|
begin
|
|
|
replaytokenbuf.read(b,size);
|
|
|
-{$ifdef FPC_BIG_ENDIAN}
|
|
|
- for i:=0 to size-1 do
|
|
|
- Pbyte(@b)[i]:=reverse_byte(Pbyte(@b)[i]);
|
|
|
-{$endif}
|
|
|
+ if change_endian_for_tokens then
|
|
|
+ for i:=0 to size-1 do
|
|
|
+ Pbyte(@b)[i]:=reverse_byte(Pbyte(@b)[i]);
|
|
|
end;
|
|
|
|
|
|
procedure tscannerfile.tokenwriteenum(var b;size : longint);
|
|
@@ -3007,22 +2993,8 @@ type
|
|
|
end;
|
|
|
|
|
|
procedure tscannerfile.tokenwriteset(var b;size : longint);
|
|
|
-{$ifdef FPC_BIG_ENDIAN}
|
|
|
- var
|
|
|
- i: longint;
|
|
|
- tmpset: array[0..31] of byte;
|
|
|
-{$endif}
|
|
|
begin
|
|
|
-{$ifdef FPC_BIG_ENDIAN}
|
|
|
- { satisfy DFA because it assumes that size may be 0 and doesn't know that
|
|
|
- recordtokenbuf.write wouldn't use tmpset in that case }
|
|
|
- tmpset[0]:=0;
|
|
|
- for i:=0 to size-1 do
|
|
|
- tmpset[i]:=reverse_byte(Pbyte(@b)[i]);
|
|
|
- recordtokenbuf.write(tmpset,size);
|
|
|
-{$else}
|
|
|
recordtokenbuf.write(b,size);
|
|
|
-{$endif}
|
|
|
end;
|
|
|
|
|
|
|