* fixed some crashes and a rte 201

This commit is contained in:
florian 2002-12-15 19:22:01 +00:00
parent f931650b24
commit 938f46f246
3 changed files with 40 additions and 24 deletions

View File

@ -1426,9 +1426,10 @@ const
else if ref2.offset <> 0 Then
if ref2.base <> R_NO then
a_op_const_reg_reg(list,OP_ADD,OS_32,ref2.offset,ref2.base,r)
{ FixRef makes sure that "(ref.index <> R_NO) and (ref.offset <> 0)" never}
{ occurs, so now only ref.offset has to be loaded }
else a_load_const_reg(list,OS_32,ref2.offset,r)
{ FixRef makes sure that "(ref.index <> R_NO) and (ref.offset <> 0)" never}
{ occurs, so now only ref.offset has to be loaded }
else
a_load_const_reg(list,OS_32,ref2.offset,r)
else if ref.index <> R_NO Then
list.concat(taicpu.op_reg_reg_reg(A_ADD,r,ref2.base,ref2.index))
else if (ref2.base <> R_NO) and
@ -1681,7 +1682,8 @@ const
function tcgppc.get_rlwi_const(a: aword; var l1, l2: longint): boolean;
var
temp, testbit: longint;
temp : longint;
testbit : aword;
compare: boolean;
begin
@ -1933,7 +1935,10 @@ begin
end.
{
$Log$
Revision 1.66 2002-11-28 10:55:16 olle
Revision 1.67 2002-12-15 19:22:01 florian
* fixed some crashes and a rte 201
Revision 1.66 2002/11/28 10:55:16 olle
* macos: changing code gen for references to globals
Revision 1.65 2002/11/07 15:50:23 jonas

View File

@ -129,6 +129,24 @@ unit cpupara;
loc : tloc;
is_64bit: boolean;
procedure assignintreg;
begin
if nextintreg<=R_10 then
begin
hp.paraloc.loc:=LOC_REGISTER;
hp.paraloc.register:=nextintreg;
inc(nextintreg);
end
else
begin
hp.paraloc.loc:=LOC_REFERENCE;
hp.paraloc.reference.index:=stack_pointer_reg;
hp.paraloc.reference.offset:=stack_offset;
inc(stack_offset,4);
end;
end;
begin
nextintreg:=R_3;
nextfloatreg:=R_F1;
@ -217,21 +235,7 @@ unit cpupara;
begin
hp.paraloc.size:=OS_ADDR;
if push_addr_param(hp.paratype.def,p.proccalloption) or (hp.paratyp in [vs_var,vs_out]) then
begin
if nextintreg<=R_10 then
begin
hp.paraloc.loc:=LOC_REGISTER;
hp.paraloc.register:=nextintreg;
inc(nextintreg);
end
else
begin
hp.paraloc.loc:=LOC_REFERENCE;
hp.paraloc.reference.index:=stack_pointer_reg;
hp.paraloc.reference.offset:=stack_offset;
inc(stack_offset,4);
end;
end
assignintreg
else
begin
hp.paraloc.loc:=LOC_REFERENCE;
@ -295,7 +299,10 @@ begin
end.
{
$Log$
Revision 1.17 2002-11-25 17:43:27 peter
Revision 1.18 2002-12-15 19:22:01 florian
* fixed some crashes and a rte 201
Revision 1.17 2002/11/25 17:43:27 peter
* splitted defbase in defutil,symutil,defcmp
* merged isconvertable and is_equal into compare_defs(_ext)
* made operator search faster by walking the list only once

View File

@ -66,7 +66,7 @@ unit cpupi;
procedure tppcprocinfo.after_header;
begin
procdef.parast.address_fixup:=0;
if procdef.localst.symtablelevel>1 then
if assigned(procdef.localst) and (procdef.localst.symtablelevel>1) then
begin
procinfo.framepointer_offset:=procdef.parast.address_fixup;
inc(procdef.parast.address_fixup,4);
@ -82,7 +82,8 @@ unit cpupi;
inc(procdef.parast.address_fixup,4);
end;
{ this value is necessary for nested procedures }
procdef.localst.address_fixup:=align(procdef.parast.address_fixup+procdef.parast.datasize,16);
if assigned(procdef.localst) then
procdef.localst.address_fixup:=align(procdef.parast.address_fixup+procdef.parast.datasize,16);
if assigned(aktprocdef.funcretsym) and
not(paramanager.ret_in_param(procdef.rettype.def,procdef.proccalloption)) then
procinfo.return_offset:=tg.direction*tfuncretsym(aktprocdef.funcretsym).address+procdef.localst.address_fixup;
@ -123,7 +124,10 @@ begin
end.
{
$Log$
Revision 1.5 2002-11-18 17:32:01 peter
Revision 1.6 2002-12-15 19:22:01 florian
* fixed some crashes and a rte 201
Revision 1.5 2002/11/18 17:32:01 peter
* pass proccalloption to ret_in_xxx and push_xxx functions
Revision 1.4 2002/09/10 20:30:42 florian