mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-17 17:29:21 +02:00
* some assembler writer bugs fixed
This commit is contained in:
parent
e313bab4ff
commit
b841ba8b16
@ -126,7 +126,7 @@ unit agppcgas;
|
|||||||
'xer','lr','ctr','fpscr'
|
'xer','lr','ctr','fpscr'
|
||||||
);
|
);
|
||||||
|
|
||||||
symaddr2str: array[trefsymaddr] of string[4] = ('','ha16','lo16');
|
symaddr2str: array[trefsymaddr] of string[2] = ('','ha','l');
|
||||||
|
|
||||||
function getreferencestring(var ref : treference) : string;
|
function getreferencestring(var ref : treference) : string;
|
||||||
var
|
var
|
||||||
@ -147,7 +147,7 @@ unit agppcgas;
|
|||||||
if not assigned(symbol) then
|
if not assigned(symbol) then
|
||||||
s:=''
|
s:=''
|
||||||
else
|
else
|
||||||
s:=symaddr2str[symaddr]+'('+symbol.name + ')';
|
s:=symbol.name+symaddr2str[symaddr];
|
||||||
if offset<0 then
|
if offset<0 then
|
||||||
s:=s+tostr(offset)
|
s:=s+tostr(offset)
|
||||||
else
|
else
|
||||||
@ -159,8 +159,12 @@ unit agppcgas;
|
|||||||
s:=s+tostr(offset);
|
s:=s+tostr(offset);
|
||||||
end;
|
end;
|
||||||
if (index=R_NO) and (base<>R_NO) then
|
if (index=R_NO) and (base<>R_NO) then
|
||||||
s:=s+'('+reg2str[base]+')'
|
begin
|
||||||
else if (index<>R_NO) and (base<>R_NO) and (offset = 0) then
|
if offset=0 then
|
||||||
|
s:=s+'0';
|
||||||
|
s:=s+'('+reg2str[base]+')'
|
||||||
|
end
|
||||||
|
else if (index<>R_NO) and (base<>R_NO) and (offset=0) then
|
||||||
s:=s+reg2str[base]+','+reg2str[index]
|
s:=s+reg2str[base]+','+reg2str[index]
|
||||||
else if ((index<>R_NO) or (base<>R_NO)) then
|
else if ((index<>R_NO) or (base<>R_NO)) then
|
||||||
{$ifndef testing}
|
{$ifndef testing}
|
||||||
@ -306,11 +310,14 @@ unit agppcgas;
|
|||||||
if is_calljmp(op) then
|
if is_calljmp(op) then
|
||||||
begin
|
begin
|
||||||
{ direct BO/BI in op[0] and op[1] not supported, put them in condition! }
|
{ direct BO/BI in op[0] and op[1] not supported, put them in condition! }
|
||||||
if op <> A_B then
|
case op of
|
||||||
s:=cond2str(op,taicpu(hp).condition)+','
|
A_B,A_BA,A_BL,A_BLA:
|
||||||
else
|
s:=#9+op2str[op]+#9
|
||||||
s:=#9'b'#9;
|
else
|
||||||
s := s+getopstr_jmp(taicpu(hp).oper[0]);
|
s:=cond2str(op,taicpu(hp).condition)+',';
|
||||||
|
end;
|
||||||
|
|
||||||
|
s:=s+getopstr_jmp(taicpu(hp).oper[0]);
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
{ process operands }
|
{ process operands }
|
||||||
@ -339,7 +346,10 @@ begin
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.10 2002-08-12 15:08:44 carl
|
Revision 1.11 2002-08-17 18:23:53 florian
|
||||||
|
* some assembler writer bugs fixed
|
||||||
|
|
||||||
|
Revision 1.10 2002/08/12 15:08:44 carl
|
||||||
+ stab register indexes for powerpc (moved from gdb to cpubase)
|
+ stab register indexes for powerpc (moved from gdb to cpubase)
|
||||||
+ tprocessor enumeration moved to cpuinfo
|
+ tprocessor enumeration moved to cpuinfo
|
||||||
+ linker in target_info is now a class
|
+ linker in target_info is now a class
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
$Id$
|
$id: cgcpu.pas,v 1.43 2002/08/17 09:23:49 florian Exp $
|
||||||
Copyright (c) 1998-2002 by Florian Klaempfl
|
Copyright (c) 1998-2002 by Florian Klaempfl
|
||||||
|
|
||||||
This unit implements the code generator for the PowerPC
|
This unit implements the code generator for the PowerPC
|
||||||
@ -277,7 +277,7 @@ const
|
|||||||
list.concat(taicpu.op_reg_const(A_LI,reg,smallint(a and $ffff)));
|
list.concat(taicpu.op_reg_const(A_LI,reg,smallint(a and $ffff)));
|
||||||
if ((a shr 16) <> 0) or
|
if ((a shr 16) <> 0) or
|
||||||
(smallint(a and $ffff) < 0) then
|
(smallint(a and $ffff) < 0) then
|
||||||
list.concat(taicpu.op_reg_const(A_ADDIS,reg,
|
list.concat(taicpu.op_reg_reg_const(A_ADDIS,reg,reg,
|
||||||
smallint((a shr 16)+ord(smallint(a and $ffff) < 0))))
|
smallint((a shr 16)+ord(smallint(a and $ffff) < 0))))
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@ -855,6 +855,7 @@ const
|
|||||||
href : treference;
|
href : treference;
|
||||||
usesfpr,usesgpr,gotgot : boolean;
|
usesfpr,usesgpr,gotgot : boolean;
|
||||||
parastart : aword;
|
parastart : aword;
|
||||||
|
offset : aword;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
{ we do our own localsize calculation }
|
{ we do our own localsize calculation }
|
||||||
@ -936,9 +937,12 @@ const
|
|||||||
else
|
else
|
||||||
list.concat(taicpu.op_sym_ofs(A_BL,objectlibrary.newasmsymbol('_savefpr_'+tostr(ord(firstregfpu)-ord(R_F14)+14)),0));
|
list.concat(taicpu.op_sym_ofs(A_BL,objectlibrary.newasmsymbol('_savefpr_'+tostr(ord(firstregfpu)-ord(R_F14)+14)),0));
|
||||||
}
|
}
|
||||||
for regcounter:=firstreggpr to R_F31 do
|
for regcounter:=firstregfpu to R_F31 do
|
||||||
if regcounter in rg.usedbyproc then
|
if regcounter in rg.usedbyproc then
|
||||||
begin
|
begin
|
||||||
|
{ reference_reset_base(href,R_1,-localsize);
|
||||||
|
list.concat(taicpu.op_reg_ref(A_STWU,R_1,href));
|
||||||
|
}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ compute end of gpr save area }
|
{ compute end of gpr save area }
|
||||||
@ -1041,6 +1045,7 @@ const
|
|||||||
begin
|
begin
|
||||||
{ address of fpr save area to r11 }
|
{ address of fpr save area to r11 }
|
||||||
list.concat(taicpu.op_reg_reg_const(A_ADDI,R_11,R_11,(ord(R_F31)-ord(firstregfpu)+1)*8));
|
list.concat(taicpu.op_reg_reg_const(A_ADDI,R_11,R_11,(ord(R_F31)-ord(firstregfpu)+1)*8));
|
||||||
|
{
|
||||||
if (procinfo.flags and pi_do_call)<>0 then
|
if (procinfo.flags and pi_do_call)<>0 then
|
||||||
list.concat(taicpu.op_sym_ofs(A_BL,objectlibrary.newasmsymbol('_restfpr_'+tostr(ord(firstregfpu)-ord(R_F14)+14)+
|
list.concat(taicpu.op_sym_ofs(A_BL,objectlibrary.newasmsymbol('_restfpr_'+tostr(ord(firstregfpu)-ord(R_F14)+14)+
|
||||||
'_x'),0))
|
'_x'),0))
|
||||||
@ -1049,6 +1054,7 @@ const
|
|||||||
list.concat(taicpu.op_sym_ofs(A_BL,objectlibrary.newasmsymbol('_restfpr_'+tostr(ord(firstregfpu)-ord(R_F14)+14)+
|
list.concat(taicpu.op_sym_ofs(A_BL,objectlibrary.newasmsymbol('_restfpr_'+tostr(ord(firstregfpu)-ord(R_F14)+14)+
|
||||||
'_l'),0));
|
'_l'),0));
|
||||||
genret:=false;
|
genret:=false;
|
||||||
|
}
|
||||||
end;
|
end;
|
||||||
{ if we didn't generate the return code, we've to do it now }
|
{ if we didn't generate the return code, we've to do it now }
|
||||||
if genret then
|
if genret then
|
||||||
@ -1668,7 +1674,10 @@ begin
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.43 2002-08-17 09:23:49 florian
|
Revision 1.44 2002-08-17 18:23:53 florian
|
||||||
|
* some assembler writer bugs fixed
|
||||||
|
|
||||||
|
Revision 1.43 2002/08/17 09:23:49 florian
|
||||||
* first part of procinfo rewrite
|
* first part of procinfo rewrite
|
||||||
|
|
||||||
Revision 1.42 2002/08/16 14:24:59 carl
|
Revision 1.42 2002/08/16 14:24:59 carl
|
||||||
|
Loading…
Reference in New Issue
Block a user