[fpc-devel] AVR assembler code consistency checking

Florian Klämpfl florian at freepascal.org
Wed Jan 3 18:10:12 CET 2018


Am 03.01.2018 um 15:48 schrieb Christo:
> I'm trying to implement some error checking for assembler code for the AVR target (e.g. issues
> 32007, 32109 and 32261).  After stepping through the compiler code a couple of times it seems as
> if there isn't a proper assembler constraint check build into the GAS parser in fpc. 

No. This is indeed left to the assembler.

> 
> The constraint checking I'm referring to is for example:
> sbiw R18, 1  // R18 not a legal register - sbiw only operates on registers R24, R26, R28 & R30
> cp R18, 20   // 20 not a legal register, cp operates on 2 registers only
> breq l1      // check that -64 < l1 offset < 64 and raise error if in assembler block
> 
> It seems as if some basic checking is being done in aasmcpu.pas procedure finalizeavrcode, 

This method is used to fix up code generated by the compiler.

> but
> this operates on instructions generated both by assembler blocks and regular code.  I've started
> adding some checks to finalizeavrcode procedure, but it seems clunky to me.  Is there a better
> location in the compiler to implement some assembler consistency checks?

fpc/compiler/avr/raavar.pas:TAVRInstruction.ConcatInstruction

> 
> Also, how do I manage/add new compiler error messages for these checks?

Add them to fpc/compiler/errore.msg, run make msg





More information about the fpc-devel mailing list