From c0d75c1c69f804e924f79271a188a2f5bc590397 Mon Sep 17 00:00:00 2001 From: florian Date: Sun, 6 Dec 2020 16:40:30 +0000 Subject: [PATCH] * patch Christo Crause: Use LDS for 8 bit references, resolves #38173 git-svn-id: trunk@47700 - --- compiler/cgobj.pas | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/compiler/cgobj.pas b/compiler/cgobj.pas index ccd51fb2eb..24e0af97ec 100644 --- a/compiler/cgobj.pas +++ b/compiler/cgobj.pas @@ -2001,7 +2001,9 @@ implementation if assigned(ref.symbol) { for avrtiny, the code generator generates a ref which is Z relative and while using it, Z is changed, so the following code breaks } - {$ifdef avr}and not(CPUAVR_16_REGS in cpu_capabilities[current_settings.cputype]){$endif avr} then + {$ifdef avr} + and not((CPUAVR_16_REGS in cpu_capabilities[current_settings.cputype]) or (tcgsize2size[size]=1)) + {$endif avr} then begin tmpreg:=getaddressregister(list); a_loadaddr_ref_reg(list,ref,tmpreg); @@ -2037,7 +2039,9 @@ implementation if assigned(ref.symbol) { for avrtiny, the code generator generates a ref which is Z relative and while using it, Z is changed, so the following code breaks } - {$ifdef avr}and not(CPUAVR_16_REGS in cpu_capabilities[current_settings.cputype]){$endif avr} then + {$ifdef avr} + and not((CPUAVR_16_REGS in cpu_capabilities[current_settings.cputype]) or (tcgsize2size[size]=1)) + {$endif avr} then begin tmpreg:=getaddressregister(list); a_loadaddr_ref_reg(list,ref,tmpreg); @@ -2273,7 +2277,12 @@ implementation begin if not (Op in [OP_NOT,OP_NEG]) then internalerror(2020050710); - if assigned(ref.symbol) then + if assigned(ref.symbol) + { for avrtiny, the code generator generates a ref which is Z relative and while using it, + Z is changed, so the following code breaks } + {$ifdef avr} + and not((CPUAVR_16_REGS in cpu_capabilities[current_settings.cputype]) or (tcgsize2size[size]=1)) + {$endif avr} then begin tmpreg:=getaddressregister(list); a_loadaddr_ref_reg(list,ref,tmpreg);