From 1bc47815bef9c422b2ceedbcb812794e48b78cfe Mon Sep 17 00:00:00 2001 From: svenbarth Date: Sun, 4 Nov 2012 20:29:22 +0000 Subject: [PATCH] m68k/cgcpu.pas, tcg64k.fixref: * in the case of ref.base + ref.symbol always add the base to the index; with this the compiler now cycles for Coldfire git-svn-id: trunk@22931 - --- compiler/m68k/cgcpu.pas | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/compiler/m68k/cgcpu.pas b/compiler/m68k/cgcpu.pas index e7116d4c6e..74831001d1 100644 --- a/compiler/m68k/cgcpu.pas +++ b/compiler/m68k/cgcpu.pas @@ -521,7 +521,27 @@ unit cgcpu; begin if (ref.base<>NR_NO) then begin - if assigned(ref.symbol) and (ref.index=NR_NO) then + if assigned(ref.symbol) then + begin + hreg:=cg.getaddressregister(list); + reference_reset_symbol(href,ref.symbol,ref.offset,ref.alignment); + list.concat(taicpu.op_ref_reg(A_LEA,S_L,href,hreg)); + if ref.index<>NR_NO then + begin + idxreg:=getaddressregister(list); + list.concat(taicpu.op_reg_reg(A_MOVE,S_L,ref.base,idxreg)); + list.concat(taicpu.op_reg_reg(A_ADD,S_L,ref.index,idxreg)); + ref.index:=idxreg; + end + else + ref.index:=ref.base; + ref.base:=hreg; + ref.offset:=0; + ref.symbol:=nil; + end; + { once the above is verified to work the below code can be + removed } + {if assigned(ref.symbol) and (ref.index=NR_NO) then begin hreg:=cg.getaddressregister(list); reference_reset_symbol(href,ref.symbol,0,ref.alignment); @@ -534,10 +554,10 @@ unit cgcpu; begin hreg:=getaddressregister(list); list.concat(taicpu.op_reg_reg(A_MOVE,S_L,ref.base,hreg)); - list.concat(taicpu.op_reg_reg(A_ADD,S_L,hreg,ref.index)); + list.concat(taicpu.op_reg_reg(A_ADD,S_L,ref.index,hreg)); ref.base:=hreg; ref.index:=NR_NO; - end; + end;} {if (ref.index <> NR_NO) and assigned(ref.symbol) then internalerror(2002081403);} { base + reg }