mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-15 07:49:08 +02:00
* fixed llvm compiler compilation after r38814 (crashes in "make cycle", but
that was already the case before) git-svn-id: trunk@38815 -
This commit is contained in:
parent
4686f61002
commit
3da67019e5
@ -63,11 +63,9 @@ unit tgllvm;
|
|||||||
constructor create; override;
|
constructor create; override;
|
||||||
destructor destroy; override;
|
destructor destroy; override;
|
||||||
procedure setfirsttemp(l: asizeint); override;
|
procedure setfirsttemp(l: asizeint); override;
|
||||||
function istemp(const ref: treference): boolean; override;
|
|
||||||
procedure temp_to_ref(p: ptemprecord; out ref: treference); override;
|
procedure temp_to_ref(p: ptemprecord; out ref: treference); override;
|
||||||
procedure getlocal(list: TAsmList; size: asizeint; alignment: shortint; def: tdef; var ref: treference); override;
|
procedure getlocal(list: TAsmList; size: asizeint; alignment: shortint; def: tdef; var ref: treference); override;
|
||||||
procedure gethltemp(list: TAsmList; def: tdef; forcesize: asizeint; temptype: ttemptype; out ref: treference); override;
|
procedure gethltemp(list: TAsmList; def: tdef; forcesize: asizeint; temptype: ttemptype; out ref: treference); override;
|
||||||
procedure ungetiftemp(list: TAsmList; const ref: treference); override;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -101,7 +99,7 @@ implementation
|
|||||||
tl^.def:=def;
|
tl^.def:=def;
|
||||||
tl^.fini:=fini;
|
tl^.fini:=fini;
|
||||||
tl^.alignment:=alignment;
|
tl^.alignment:=alignment;
|
||||||
tl^.pos:=getsupreg(ref.base);
|
tl^.pos:=getsupreg(reg);
|
||||||
tl^.size:=size;
|
tl^.size:=size;
|
||||||
tl^.next:=templist;
|
tl^.next:=templist;
|
||||||
tl^.nextfree:=nil;
|
tl^.nextfree:=nil;
|
||||||
@ -138,17 +136,14 @@ implementation
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
function ttgllvm.istemp(const ref: treference): boolean;
|
|
||||||
begin
|
|
||||||
result:=getregtype(ref.base)=R_TEMPREGISTER;
|
|
||||||
end;
|
|
||||||
|
|
||||||
|
|
||||||
procedure ttgllvm.temp_to_ref(p: ptemprecord; out ref: treference);
|
procedure ttgllvm.temp_to_ref(p: ptemprecord; out ref: treference);
|
||||||
|
var
|
||||||
|
temppos: treftemppos;
|
||||||
begin
|
begin
|
||||||
{ on the LLVM target, every temp is independent and encoded via a
|
{ on the LLVM target, every temp is independent and encoded via a
|
||||||
separate temp register whose superregister number is stored in p^.pos }
|
separate temp register whose superregister number is stored in p^.pos }
|
||||||
reference_reset_base(ref,voidstackpointertype,newreg(R_TEMPREGISTER,p^.pos,R_SUBWHOLE),0,p^.alignment,[]);
|
temppos.val:=p^.pos;
|
||||||
|
reference_reset_base(ref,newreg(R_TEMPREGISTER,p^.pos,R_SUBWHOLE),0,temppos,p^.alignment,[]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -187,12 +182,6 @@ implementation
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure ttgllvm.ungetiftemp(list: TAsmList; const ref: treference);
|
|
||||||
begin
|
|
||||||
if istemp(ref) then
|
|
||||||
FreeTemp(list,getsupreg(ref.base),[tt_normal]);
|
|
||||||
end;
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
orgtgclass:=tgobjclass;
|
orgtgclass:=tgobjclass;
|
||||||
tgobjclass:=ttgllvm;
|
tgobjclass:=ttgllvm;
|
||||||
|
Loading…
Reference in New Issue
Block a user