|
@@ -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;
|