mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-12 07:46:00 +02:00
+ support for llvm "undef" operand
git-svn-id: trunk@30669 -
This commit is contained in:
parent
7ff6c2a675
commit
07141e92d3
@ -253,6 +253,7 @@ interface
|
|||||||
{ llvm only }
|
{ llvm only }
|
||||||
,top_single
|
,top_single
|
||||||
,top_double
|
,top_double
|
||||||
|
,top_undef
|
||||||
{$ifdef cpuextended}
|
{$ifdef cpuextended}
|
||||||
,top_extended80
|
,top_extended80
|
||||||
{$endif cpuextended}
|
{$endif cpuextended}
|
||||||
@ -433,6 +434,7 @@ interface
|
|||||||
{$ifdef llvm}
|
{$ifdef llvm}
|
||||||
top_single : (sval:single);
|
top_single : (sval:single);
|
||||||
top_double : (dval:double);
|
top_double : (dval:double);
|
||||||
|
top_undef : ();
|
||||||
{$ifdef cpuextended}
|
{$ifdef cpuextended}
|
||||||
top_extended80 : (eval:extended);
|
top_extended80 : (eval:extended);
|
||||||
{$endif cpuextended}
|
{$endif cpuextended}
|
||||||
|
@ -71,6 +71,9 @@ interface
|
|||||||
{ e.g. dst = bitcast fromsize <abstracttaidata> to tosize }
|
{ e.g. dst = bitcast fromsize <abstracttaidata> to tosize }
|
||||||
constructor op_reg_tai_size(op:tllvmop;dst:tregister;src:tai;tosize:tdef);
|
constructor op_reg_tai_size(op:tllvmop;dst:tregister;src:tai;tosize:tdef);
|
||||||
|
|
||||||
|
{ dst = bitcast size undef to size }
|
||||||
|
constructor op_reg_size_undef(op: tllvmop; dst: tregister; size: tdef);
|
||||||
|
|
||||||
{ e.g. dst = bitcast fromsize src to tosize }
|
{ e.g. dst = bitcast fromsize src to tosize }
|
||||||
constructor op_reg_size_ref_size(op:tllvmop;dst:tregister;fromsize:tdef;const src:treference;tosize:tdef);
|
constructor op_reg_size_ref_size(op:tllvmop;dst:tregister;fromsize:tdef;const src:treference;tosize:tdef);
|
||||||
{ e.g. store fromsize src, ptrsize toref}
|
{ e.g. store fromsize src, ptrsize toref}
|
||||||
@ -110,6 +113,7 @@ interface
|
|||||||
procedure clearop(opidx: longint); override;
|
procedure clearop(opidx: longint); override;
|
||||||
procedure loadtai(opidx: longint; _ai: tai);
|
procedure loadtai(opidx: longint; _ai: tai);
|
||||||
procedure loaddef(opidx: longint; _def: tdef);
|
procedure loaddef(opidx: longint; _def: tdef);
|
||||||
|
procedure loadundef(opidx: longint);
|
||||||
procedure loadsingle(opidx: longint; _sval: single);
|
procedure loadsingle(opidx: longint; _sval: single);
|
||||||
procedure loaddouble(opidx: longint; _dval: double);
|
procedure loaddouble(opidx: longint; _dval: double);
|
||||||
{$ifdef cpuextended}
|
{$ifdef cpuextended}
|
||||||
@ -319,6 +323,14 @@ uses
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure taillvm.loadundef(opidx: longint);
|
||||||
|
begin
|
||||||
|
allocate_oper(opidx+1);
|
||||||
|
with oper[opidx]^ do
|
||||||
|
typ:=top_undef
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure taillvm.loadsingle(opidx: longint; _sval: single);
|
procedure taillvm.loadsingle(opidx: longint; _sval: single);
|
||||||
begin
|
begin
|
||||||
allocate_oper(opidx+1);
|
allocate_oper(opidx+1);
|
||||||
@ -702,6 +714,17 @@ uses
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
constructor taillvm.op_reg_size_undef(op: tllvmop; dst: tregister; size: tdef);
|
||||||
|
begin
|
||||||
|
create_llvm(op);
|
||||||
|
ops:=4;
|
||||||
|
loadreg(0,dst);
|
||||||
|
loaddef(1,size);
|
||||||
|
loadundef(2);
|
||||||
|
loaddef(3,size);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
constructor taillvm.op_reg_size_ref_size(op: tllvmop; dst: tregister; fromsize: tdef; const src: treference; tosize: tdef);
|
constructor taillvm.op_reg_size_ref_size(op: tllvmop; dst: tregister; fromsize: tdef; const src: treference; tosize: tdef);
|
||||||
begin
|
begin
|
||||||
create_llvm(op);
|
create_llvm(op);
|
||||||
|
@ -325,6 +325,8 @@ implementation
|
|||||||
result:=llvmextendedtostr(o.eval);
|
result:=llvmextendedtostr(o.eval);
|
||||||
end;
|
end;
|
||||||
{$endif cpuextended}
|
{$endif cpuextended}
|
||||||
|
top_undef:
|
||||||
|
result:='undef'
|
||||||
else
|
else
|
||||||
internalerror(2013060227);
|
internalerror(2013060227);
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user