mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-20 17:49:25 +02:00
+ tinlinenode calls cpu specific routines for unknown inline numbers
git-svn-id: trunk@37543 -
This commit is contained in:
parent
ff86c80176
commit
4752b0ef96
@ -31,6 +31,7 @@ interface
|
|||||||
type
|
type
|
||||||
tcginlinenode = class(tinlinenode)
|
tcginlinenode = class(tinlinenode)
|
||||||
procedure pass_generate_code;override;
|
procedure pass_generate_code;override;
|
||||||
|
procedure pass_generate_code_cpu;virtual;
|
||||||
procedure second_sizeoftypeof;virtual;
|
procedure second_sizeoftypeof;virtual;
|
||||||
procedure second_length;virtual;
|
procedure second_length;virtual;
|
||||||
procedure second_predsucc;virtual;
|
procedure second_predsucc;virtual;
|
||||||
@ -216,11 +217,16 @@ implementation
|
|||||||
in_neg_assign_x,
|
in_neg_assign_x,
|
||||||
in_not_assign_x:
|
in_not_assign_x:
|
||||||
second_NegNot_assign;
|
second_NegNot_assign;
|
||||||
else internalerror(9);
|
else
|
||||||
|
pass_generate_code_cpu;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure tcginlinenode.pass_generate_code_cpu;
|
||||||
|
begin
|
||||||
|
Internalerror(2017110103);
|
||||||
|
end;
|
||||||
|
|
||||||
{*****************************************************************************
|
{*****************************************************************************
|
||||||
SIZEOF / TYPEOF GENERIC HANDLING
|
SIZEOF / TYPEOF GENERIC HANDLING
|
||||||
|
@ -38,6 +38,7 @@ interface
|
|||||||
procedure printnodeinfo(var t : text);override;
|
procedure printnodeinfo(var t : text);override;
|
||||||
function pass_1 : tnode;override;
|
function pass_1 : tnode;override;
|
||||||
function pass_typecheck:tnode;override;
|
function pass_typecheck:tnode;override;
|
||||||
|
function pass_typecheck_cpu:tnode;virtual;
|
||||||
function simplify(forinline : boolean): tnode;override;
|
function simplify(forinline : boolean): tnode;override;
|
||||||
function docompare(p: tnode): boolean; override;
|
function docompare(p: tnode): boolean; override;
|
||||||
|
|
||||||
@ -93,6 +94,9 @@ interface
|
|||||||
{$endif not cpu64bitalu}
|
{$endif not cpu64bitalu}
|
||||||
function first_AndOrXorShiftRot_assign: tnode; virtual;
|
function first_AndOrXorShiftRot_assign: tnode; virtual;
|
||||||
function first_NegNot_assign: tnode; virtual;
|
function first_NegNot_assign: tnode; virtual;
|
||||||
|
function first_cpu : tnode; virtual;
|
||||||
|
|
||||||
|
procedure CheckParameters(count : integer);
|
||||||
private
|
private
|
||||||
function handle_str: tnode;
|
function handle_str: tnode;
|
||||||
function handle_reset_rewrite_typed: tnode;
|
function handle_reset_rewrite_typed: tnode;
|
||||||
@ -3595,7 +3599,7 @@ implementation
|
|||||||
result:=handle_concat;
|
result:=handle_concat;
|
||||||
end;
|
end;
|
||||||
else
|
else
|
||||||
internalerror(8);
|
result:=pass_typecheck_cpu;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -3605,6 +3609,12 @@ implementation
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function tinlinenode.pass_typecheck_cpu : tnode;
|
||||||
|
begin
|
||||||
|
internalerror(2017110102);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
function tinlinenode.pass_1 : tnode;
|
function tinlinenode.pass_1 : tnode;
|
||||||
var
|
var
|
||||||
hp: tnode;
|
hp: tnode;
|
||||||
@ -3985,7 +3995,7 @@ implementation
|
|||||||
in_fma_float128:
|
in_fma_float128:
|
||||||
result:=first_fma;
|
result:=first_fma;
|
||||||
else
|
else
|
||||||
internalerror(89);
|
result:=first_cpu;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
{$maxfpuregisters default}
|
{$maxfpuregisters default}
|
||||||
@ -5043,5 +5053,31 @@ implementation
|
|||||||
expectloc:=left.expectloc;
|
expectloc:=left.expectloc;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function tinlinenode.first_cpu : tnode;
|
||||||
|
begin
|
||||||
|
internalerror(2017110101);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure tinlinenode.CheckParameters(count: integer);
|
||||||
|
var
|
||||||
|
p: tnode;
|
||||||
|
begin
|
||||||
|
if count=1 then
|
||||||
|
set_varstate(left,vs_read,[vsf_must_be_valid])
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
p:=left;
|
||||||
|
while count>0 do
|
||||||
|
begin
|
||||||
|
set_varstate(tcallparanode(p).left,vs_read,[vsf_must_be_valid]);
|
||||||
|
|
||||||
|
p:=tcallparanode(p).right;
|
||||||
|
dec(count);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user