mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-20 11:29:22 +02:00
* fixed sparc compilation after addr_lo/hi changes
git-svn-id: trunk@8107 -
This commit is contained in:
parent
4c5d8a9c79
commit
20dbda751a
@ -65,7 +65,7 @@ interface
|
|||||||
addr_no,
|
addr_no,
|
||||||
addr_full,
|
addr_full,
|
||||||
addr_pic
|
addr_pic
|
||||||
{$IF defined(POWERPC) or defined(POWERPC64)}
|
{$IF defined(POWERPC) or defined(POWERPC64) or defined(SPARC)}
|
||||||
,
|
,
|
||||||
addr_low, // bits 48-63
|
addr_low, // bits 48-63
|
||||||
addr_high, // bits 32-47
|
addr_high, // bits 32-47
|
||||||
|
@ -185,7 +185,7 @@ implementation
|
|||||||
begin
|
begin
|
||||||
inherited create(op);
|
inherited create(op);
|
||||||
{ only allowed to load the address }
|
{ only allowed to load the address }
|
||||||
if not(_op2.refaddr in [addr_lo,addr_hi]) then
|
if not(_op2.refaddr in [addr_low,addr_high]) then
|
||||||
internalerror(200305311);
|
internalerror(200305311);
|
||||||
ops:=3;
|
ops:=3;
|
||||||
loadreg(0,_op1);
|
loadreg(0,_op1);
|
||||||
|
@ -187,17 +187,17 @@ implementation
|
|||||||
reference_reset(tmpref);
|
reference_reset(tmpref);
|
||||||
tmpref.symbol:=ref.symbol;
|
tmpref.symbol:=ref.symbol;
|
||||||
tmpref.offset:=ref.offset;
|
tmpref.offset:=ref.offset;
|
||||||
tmpref.refaddr:=addr_hi;
|
tmpref.refaddr:=addr_high;
|
||||||
list.concat(taicpu.op_ref_reg(A_SETHI,tmpref,tmpreg));
|
list.concat(taicpu.op_ref_reg(A_SETHI,tmpref,tmpreg));
|
||||||
if (ref.offset=0) and (ref.index=NR_NO) and
|
if (ref.offset=0) and (ref.index=NR_NO) and
|
||||||
(ref.base=NR_NO) then
|
(ref.base=NR_NO) then
|
||||||
begin
|
begin
|
||||||
ref.refaddr:=addr_lo;
|
ref.refaddr:=addr_low;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
{ Load the low part is left }
|
{ Load the low part is left }
|
||||||
tmpref.refaddr:=addr_lo;
|
tmpref.refaddr:=addr_low;
|
||||||
list.concat(taicpu.op_reg_ref_reg(A_OR,tmpreg,tmpref,tmpreg));
|
list.concat(taicpu.op_reg_ref_reg(A_OR,tmpreg,tmpref,tmpreg));
|
||||||
ref.offset:=0;
|
ref.offset:=0;
|
||||||
{ symbol is loaded }
|
{ symbol is loaded }
|
||||||
@ -636,10 +636,10 @@ implementation
|
|||||||
reference_reset(tmpref);
|
reference_reset(tmpref);
|
||||||
tmpref.symbol := href.symbol;
|
tmpref.symbol := href.symbol;
|
||||||
tmpref.offset := href.offset;
|
tmpref.offset := href.offset;
|
||||||
tmpref.refaddr := addr_hi;
|
tmpref.refaddr := addr_high;
|
||||||
list.concat(taicpu.op_ref_reg(A_SETHI,tmpref,hreg));
|
list.concat(taicpu.op_ref_reg(A_SETHI,tmpref,hreg));
|
||||||
{ Only the low part is left }
|
{ Only the low part is left }
|
||||||
tmpref.refaddr:=addr_lo;
|
tmpref.refaddr:=addr_low;
|
||||||
list.concat(taicpu.op_reg_ref_reg(A_OR,hreg,tmpref,hreg));
|
list.concat(taicpu.op_reg_ref_reg(A_OR,hreg,tmpref,hreg));
|
||||||
if href.base<>NR_NO then
|
if href.base<>NR_NO then
|
||||||
begin
|
begin
|
||||||
|
@ -70,9 +70,9 @@ implementation
|
|||||||
else if offset<0 then
|
else if offset<0 then
|
||||||
GetReferenceString:=GetReferenceString+ToStr(offset);
|
GetReferenceString:=GetReferenceString+ToStr(offset);
|
||||||
case refaddr of
|
case refaddr of
|
||||||
addr_hi:
|
addr_high:
|
||||||
GetReferenceString:='%hi('+GetReferenceString+')';
|
GetReferenceString:='%hi('+GetReferenceString+')';
|
||||||
addr_lo:
|
addr_low:
|
||||||
GetReferenceString:='%lo('+GetReferenceString+')';
|
GetReferenceString:='%lo('+GetReferenceString+')';
|
||||||
end;
|
end;
|
||||||
end
|
end
|
||||||
@ -80,7 +80,7 @@ implementation
|
|||||||
begin
|
begin
|
||||||
{$ifdef extdebug}
|
{$ifdef extdebug}
|
||||||
if assigned(symbol) and
|
if assigned(symbol) and
|
||||||
not(refaddr in [addr_pic,addr_lo]) then
|
not(refaddr in [addr_pic,addr_low]) then
|
||||||
internalerror(2003052601);
|
internalerror(2003052601);
|
||||||
{$endif extdebug}
|
{$endif extdebug}
|
||||||
if base<>NR_NO then
|
if base<>NR_NO then
|
||||||
@ -99,7 +99,7 @@ implementation
|
|||||||
}
|
}
|
||||||
if assigned(symbol) then
|
if assigned(symbol) then
|
||||||
begin
|
begin
|
||||||
if refaddr=addr_lo then
|
if refaddr=addr_low then
|
||||||
GetReferenceString:='%lo('+symbol.name+')+'+GetReferenceString
|
GetReferenceString:='%lo('+symbol.name+')+'+GetReferenceString
|
||||||
else
|
else
|
||||||
GetReferenceString:=symbol.name+'+'+GetReferenceString;
|
GetReferenceString:=symbol.name+'+'+GetReferenceString;
|
||||||
@ -127,7 +127,7 @@ implementation
|
|||||||
top_const:
|
top_const:
|
||||||
getopstr:=tostr(longint(val));
|
getopstr:=tostr(longint(val));
|
||||||
top_ref:
|
top_ref:
|
||||||
if (oper.ref^.refaddr in [addr_no,addr_pic]) or ((oper.ref^.refaddr=addr_lo) and ((oper.ref^.base<>NR_NO) or
|
if (oper.ref^.refaddr in [addr_no,addr_pic]) or ((oper.ref^.refaddr=addr_low) and ((oper.ref^.base<>NR_NO) or
|
||||||
(oper.ref^.index<>NR_NO))) then
|
(oper.ref^.index<>NR_NO))) then
|
||||||
getopstr:='['+getreferencestring(ref^)+']'
|
getopstr:='['+getreferencestring(ref^)+']'
|
||||||
else
|
else
|
||||||
|
@ -105,9 +105,9 @@ Interface
|
|||||||
if actasmtoken=AS_ID then
|
if actasmtoken=AS_ID then
|
||||||
begin
|
begin
|
||||||
if upper(actasmpattern)='LO' then
|
if upper(actasmpattern)='LO' then
|
||||||
oper.opr.ref.refaddr:=addr_lo
|
oper.opr.ref.refaddr:=addr_low
|
||||||
else if upper(actasmpattern)='HI' then
|
else if upper(actasmpattern)='HI' then
|
||||||
oper.opr.ref.refaddr:=addr_hi
|
oper.opr.ref.refaddr:=addr_high
|
||||||
else
|
else
|
||||||
Message(asmr_e_invalid_reference_syntax);
|
Message(asmr_e_invalid_reference_syntax);
|
||||||
Consume(AS_ID);
|
Consume(AS_ID);
|
||||||
@ -352,9 +352,9 @@ Interface
|
|||||||
memory location) }
|
memory location) }
|
||||||
oper.InitRef;
|
oper.InitRef;
|
||||||
if actasmtoken=AS_LO then
|
if actasmtoken=AS_LO then
|
||||||
oper.opr.ref.refaddr:=addr_lo
|
oper.opr.ref.refaddr:=addr_low
|
||||||
else
|
else
|
||||||
oper.opr.ref.refaddr:=addr_hi;
|
oper.opr.ref.refaddr:=addr_high;
|
||||||
Consume(actasmtoken);
|
Consume(actasmtoken);
|
||||||
Consume(AS_LPAREN);
|
Consume(AS_LPAREN);
|
||||||
BuildConstSymbolExpression(false, true,false,l,tempstr,tempsymtyp);
|
BuildConstSymbolExpression(false, true,false,l,tempstr,tempsymtyp);
|
||||||
|
@ -104,10 +104,10 @@ implementation
|
|||||||
|
|
||||||
reference_reset(tmpref);
|
reference_reset(tmpref);
|
||||||
tmpref.offset:=spilltemp.offset;
|
tmpref.offset:=spilltemp.offset;
|
||||||
tmpref.refaddr:=addr_hi;
|
tmpref.refaddr:=addr_high;
|
||||||
helplist.concat(taicpu.op_ref_reg(A_SETHI,tmpref,hreg));
|
helplist.concat(taicpu.op_ref_reg(A_SETHI,tmpref,hreg));
|
||||||
|
|
||||||
tmpref.refaddr:=addr_lo;
|
tmpref.refaddr:=addr_low;
|
||||||
helplist.concat(taicpu.op_reg_ref_reg(A_OR,hreg,tmpref,hreg));
|
helplist.concat(taicpu.op_reg_ref_reg(A_OR,hreg,tmpref,hreg));
|
||||||
|
|
||||||
reference_reset_base(tmpref,hreg,0);
|
reference_reset_base(tmpref,hreg,0);
|
||||||
@ -140,10 +140,10 @@ implementation
|
|||||||
|
|
||||||
reference_reset(tmpref);
|
reference_reset(tmpref);
|
||||||
tmpref.offset:=spilltemp.offset;
|
tmpref.offset:=spilltemp.offset;
|
||||||
tmpref.refaddr:=addr_hi;
|
tmpref.refaddr:=addr_high;
|
||||||
helplist.concat(taicpu.op_ref_reg(A_SETHI,tmpref,hreg));
|
helplist.concat(taicpu.op_ref_reg(A_SETHI,tmpref,hreg));
|
||||||
|
|
||||||
tmpref.refaddr:=addr_lo;
|
tmpref.refaddr:=addr_low;
|
||||||
helplist.concat(taicpu.op_reg_ref_reg(A_OR,hreg,tmpref,hreg));
|
helplist.concat(taicpu.op_reg_ref_reg(A_OR,hreg,tmpref,hreg));
|
||||||
|
|
||||||
reference_reset_base(tmpref,hreg,0);
|
reference_reset_base(tmpref,hreg,0);
|
||||||
|
Loading…
Reference in New Issue
Block a user