+ support for llvm "undef" operand

git-svn-id: trunk@30669 -
This commit is contained in:
Jonas Maebe 2015-04-19 21:37:27 +00:00
parent 7ff6c2a675
commit 07141e92d3
3 changed files with 27 additions and 0 deletions

View File

@ -253,6 +253,7 @@ interface
{ llvm only }
,top_single
,top_double
,top_undef
{$ifdef cpuextended}
,top_extended80
{$endif cpuextended}
@ -433,6 +434,7 @@ interface
{$ifdef llvm}
top_single : (sval:single);
top_double : (dval:double);
top_undef : ();
{$ifdef cpuextended}
top_extended80 : (eval:extended);
{$endif cpuextended}

View File

@ -71,6 +71,9 @@ interface
{ e.g. dst = bitcast fromsize <abstracttaidata> to tosize }
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 }
constructor op_reg_size_ref_size(op:tllvmop;dst:tregister;fromsize:tdef;const src:treference;tosize:tdef);
{ e.g. store fromsize src, ptrsize toref}
@ -110,6 +113,7 @@ interface
procedure clearop(opidx: longint); override;
procedure loadtai(opidx: longint; _ai: tai);
procedure loaddef(opidx: longint; _def: tdef);
procedure loadundef(opidx: longint);
procedure loadsingle(opidx: longint; _sval: single);
procedure loaddouble(opidx: longint; _dval: double);
{$ifdef cpuextended}
@ -319,6 +323,14 @@ uses
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);
begin
allocate_oper(opidx+1);
@ -702,6 +714,17 @@ uses
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);
begin
create_llvm(op);

View File

@ -325,6 +325,8 @@ implementation
result:=llvmextendedtostr(o.eval);
end;
{$endif cpuextended}
top_undef:
result:='undef'
else
internalerror(2013060227);
end;