From e699be78ab9ca3d63a63c37a30b6df554c78954c Mon Sep 17 00:00:00 2001 From: Jeppe Johansen Date: Fri, 29 Dec 2017 14:01:39 +0000 Subject: [PATCH] Handle simple cases where a record member is passed in a register on AVR, and referenced from inline assembly. git-svn-id: trunk@37864 - --- compiler/ncgbas.pas | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/compiler/ncgbas.pas b/compiler/ncgbas.pas index 632f9513ad..10180ab181 100644 --- a/compiler/ncgbas.pas +++ b/compiler/ncgbas.pas @@ -181,7 +181,12 @@ interface MessagePos(filepos,asmr_e_invalid_reference_syntax); { Subscribed access } if forceref or - (sofs<>0) then +{$ifdef avr} + (sofs>=tcgsize2size[sym.localloc.size]) +{$else avr} + (sofs<>0) +{$endif avr} + then begin op.typ:=top_ref; new(op.ref); @@ -196,6 +201,14 @@ interface begin op.typ:=top_reg; op.reg:=sym.localloc.register; + +{$ifdef avr} + case sofs of + 1: op.reg:=cg.GetNextReg(op.reg); + 2: op.reg:=cg.GetNextReg(cg.GetNextReg(op.reg)); + 3: op.reg:=cg.GetNextReg(cg.GetNextReg(cg.GetNextReg(op.reg))); + end; +{$endif avr} end; end; LOC_FPUREGISTER,