mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-15 05:29:30 +02:00
+ implemented tcgz80.a_loadaddr_ref_reg for symbol references
git-svn-id: branches/z80@44682 -
This commit is contained in:
parent
66ed58a51b
commit
4e5eb7fa4e
@ -107,6 +107,10 @@ interface
|
|||||||
,addr_hi8
|
,addr_hi8
|
||||||
,addr_hi8_gs
|
,addr_hi8_gs
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
{$IFDEF Z80}
|
||||||
|
,addr_lo8
|
||||||
|
,addr_hi8
|
||||||
|
{$ENDIF}
|
||||||
{$IFDEF i8086}
|
{$IFDEF i8086}
|
||||||
,addr_dgroup // the data segment group
|
,addr_dgroup // the data segment group
|
||||||
,addr_fardataseg // the far data segment of the current pascal module (unit or program)
|
,addr_fardataseg // the far data segment of the current pascal module (unit or program)
|
||||||
|
@ -330,7 +330,25 @@ unit agsdasz80;
|
|||||||
end;
|
end;
|
||||||
top_ref:
|
top_ref:
|
||||||
begin
|
begin
|
||||||
if not assigned(o.ref^.symbol) and
|
if assigned(o.ref^.symbol) and (o.ref^.refaddr in [addr_lo8,addr_hi8]) then
|
||||||
|
begin
|
||||||
|
{if SmartAsm then
|
||||||
|
AddSymbol(o.ref^.symbol.name,false);}
|
||||||
|
if (o.ref^.base<>NR_NO) or (o.ref^.index<>NR_NO) then
|
||||||
|
internalerror(2020041101);
|
||||||
|
writer.AsmWrite('#');
|
||||||
|
case o.ref^.refaddr of
|
||||||
|
addr_lo8:
|
||||||
|
writer.AsmWrite('<');
|
||||||
|
addr_hi8:
|
||||||
|
writer.AsmWrite('>');
|
||||||
|
end;
|
||||||
|
if o.ref^.offset<>0 then
|
||||||
|
writer.AsmWrite('('+o.ref^.symbol.name+'+'+tostr(o.ref^.offset)+')')
|
||||||
|
else
|
||||||
|
writer.AsmWrite(o.ref^.symbol.name);
|
||||||
|
end
|
||||||
|
else if not assigned(o.ref^.symbol) and
|
||||||
((o.ref^.base<>NR_NO) or (o.ref^.index<>NR_NO)) and
|
((o.ref^.base<>NR_NO) or (o.ref^.index<>NR_NO)) and
|
||||||
(o.ref^.offset<>0) then
|
(o.ref^.offset<>0) then
|
||||||
begin
|
begin
|
||||||
|
@ -1820,39 +1820,33 @@ unit cgcpu;
|
|||||||
var
|
var
|
||||||
tmpref : treference;
|
tmpref : treference;
|
||||||
begin
|
begin
|
||||||
list.Concat(tai_comment.Create(strpnew('WARNING! not implemented: a_loadaddr_ref_reg')));
|
if assigned(ref.symbol) or (ref.offset<>0) then
|
||||||
// if ref.addressmode<>AM_UNCHANGED then
|
begin
|
||||||
// internalerror(2011021701);
|
reference_reset(tmpref,0,[]);
|
||||||
//
|
tmpref.symbol:=ref.symbol;
|
||||||
//if assigned(ref.symbol) or (ref.offset<>0) then
|
tmpref.offset:=ref.offset;
|
||||||
// begin
|
|
||||||
// reference_reset(tmpref,0,[]);
|
tmpref.refaddr:=addr_lo8;
|
||||||
// tmpref.symbol:=ref.symbol;
|
list.concat(taicpu.op_reg_ref(A_LD,r,tmpref));
|
||||||
// tmpref.offset:=ref.offset;
|
|
||||||
//
|
tmpref.refaddr:=addr_hi8;
|
||||||
// if assigned(ref.symbol) and (ref.symbol.typ in [AT_FUNCTION,AT_LABEL]) then
|
list.concat(taicpu.op_reg_ref(A_LD,GetNextReg(r),tmpref));
|
||||||
// tmpref.refaddr:=addr_lo8_gs
|
|
||||||
// else
|
if (ref.base<>NR_NO) then
|
||||||
// tmpref.refaddr:=addr_lo8;
|
begin
|
||||||
// list.concat(taicpu.op_reg_ref(A_LDI,r,tmpref));
|
list.Concat(tai_comment.Create(strpnew('WARNING! not implemented: a_loadaddr_ref_reg with symbol and ref.base')));
|
||||||
//
|
|
||||||
// if assigned(ref.symbol) and (ref.symbol.typ in [AT_FUNCTION,AT_LABEL]) then
|
|
||||||
// tmpref.refaddr:=addr_hi8_gs
|
|
||||||
// else
|
|
||||||
// tmpref.refaddr:=addr_hi8;
|
|
||||||
// list.concat(taicpu.op_reg_ref(A_LDI,GetNextReg(r),tmpref));
|
|
||||||
//
|
|
||||||
// if (ref.base<>NR_NO) then
|
|
||||||
// begin
|
|
||||||
//list.concat(taicpu.op_reg_reg(A_ADD,r,ref.base));
|
//list.concat(taicpu.op_reg_reg(A_ADD,r,ref.base));
|
||||||
//list.concat(taicpu.op_reg_reg(A_ADC,GetNextReg(r),GetNextReg(ref.base)));
|
//list.concat(taicpu.op_reg_reg(A_ADC,GetNextReg(r),GetNextReg(ref.base)));
|
||||||
// end;
|
end;
|
||||||
// if (ref.index<>NR_NO) then
|
if (ref.index<>NR_NO) then
|
||||||
// begin
|
begin
|
||||||
|
list.Concat(tai_comment.Create(strpnew('WARNING! not implemented: a_loadaddr_ref_reg with symbol and ref.index')));
|
||||||
//list.concat(taicpu.op_reg_reg(A_ADD,r,ref.index));
|
//list.concat(taicpu.op_reg_reg(A_ADD,r,ref.index));
|
||||||
//list.concat(taicpu.op_reg_reg(A_ADC,GetNextReg(r),GetNextReg(ref.index)));
|
//list.concat(taicpu.op_reg_reg(A_ADC,GetNextReg(r),GetNextReg(ref.index)));
|
||||||
// end;
|
end;
|
||||||
// end
|
end
|
||||||
|
else
|
||||||
|
list.Concat(tai_comment.Create(strpnew('WARNING! not implemented: a_loadaddr_ref_reg')));
|
||||||
//else if (ref.base<>NR_NO)then
|
//else if (ref.base<>NR_NO)then
|
||||||
// begin
|
// begin
|
||||||
// emit_mov(list,r,ref.base);
|
// emit_mov(list,r,ref.base);
|
||||||
|
Loading…
Reference in New Issue
Block a user