diff --git a/compiler/m68k/cgcpu.pas b/compiler/m68k/cgcpu.pas index c30ce664ee..3606e1908f 100644 --- a/compiler/m68k/cgcpu.pas +++ b/compiler/m68k/cgcpu.pas @@ -425,7 +425,8 @@ unit cgcpu; displacement. } { first ensure that base is an address register } - if (ref.base<>NR_NO) and not isaddressregister(ref.base) then + if (not assigned (ref.symbol) and (current_settings.cputype<>cpu_MC68000)) and + (ref.base<>NR_NO) and not isaddressregister(ref.base) then begin hreg:=getaddressregister(list); list.concat(taicpu.op_reg_reg(A_MOVE,S_L,ref.base,hreg)); @@ -466,6 +467,23 @@ unit cgcpu; ref.offset := 0; exit; end; + if assigned(ref.symbol) then + begin + hreg:=getaddressregister(list); + idxreg:=ref.base; + ref.base:=NR_NO; + list.concat(taicpu.op_ref_reg(A_LEA,S_L,ref,hreg)); + reference_reset_base(ref,hreg,0,ref.alignment); + fixref:=true; + ref.index:=idxreg; + end + else if not isaddressregister(ref.base) then + begin + hreg:=getaddressregister(list); + list.concat(taicpu.op_reg_reg(A_MOVE,S_L,ref.base,hreg)); + fixref:=true; + ref.base:=hreg; + end; end else { Note: symbol -> ref would be supported as long as ref does not