This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Branch instructions that depend on target distance
- From: Julian Brown <julian at codesourcery dot com>
- To: Alexander Monakov <amonakov at ispras dot ru>
- Cc: Andreas Schwab <schwab at suse dot de>, Petr Tesarik <ptesarik at suse dot cz>, <gcc at gcc dot gnu dot org>
- Date: Mon, 24 Feb 2020 12:24:33 +0000
- Subject: Re: Branch instructions that depend on target distance
- Ironport-sdr: rijvTBXwu7UymPwveUUvmxlzzfrEET82WvwfwZrKMAxjkFmQR5AZbzhaFFmH6Us3jQNaUZnaUY BgseBQOAYItMgLDSM3u3uhdK4Qr5YwEukFsomJHxOgy5XIsBdF8jZv84bTwvQrL7EbKZ7OUuBg KfQ0b32cqtS3nfleI8PT4uMrzOEW3JruwsFk5iO44M1W+qY34D8Qls/WICwyetx/ce5OJoZ/pJ cswXNGVTylRhmCqTq7G+n216zYjhspI7Eb31ZOsPCwndPduWngfJBKJPjEJEml4B4lVyCe9ybd Mt0=
- Ironport-sdr: oGA2fzunmga3T2oeBBvE/ItySstpFg7BgL0ha5NvYl8aZMwd3XD7iEZ5kIOflIb9i6KE92ybDj 9ooWMRUb8jbpsZXKgbGGq52xghQ+o0gF4j7lIKqGuY3qu9G9TZPiqhAKMhnApIpXyoGNGxvaM+ YuOhwHww5xUt2boXAwQE34UpCUxD/Tnid573OqfeqwWnNcQkEB2zThYsTE0bXFsA6gYHGBKKUg bw4T0/ZNe9ZncFEYCT1cGz5SXZZkEJRyIR5q9IGoFSRt46aBAUfLIkm4sfLUv0i04IHIVEC8TM pUA=
- References: <20200224120528.0a88c6a8@ezekiel.suse.cz> <mvmzhd8w7dn.fsf@suse.de> <20200224124149.08bd18ac@ezekiel.suse.cz> <mvmv9nww6dd.fsf@suse.de> <alpine.LNX.2.20.13.2002241459540.32172@monopod.intra.ispras.ru>
On Mon, 24 Feb 2020 15:03:21 +0300 (MSK)
Alexander Monakov <amonakov@ispras.ru> wrote:
> On Mon, 24 Feb 2020, Andreas Schwab wrote:
>
> > On Feb 24 2020, Petr Tesarik wrote:
> >
> > > On Mon, 24 Feb 2020 12:29:40 +0100
> > > Andreas Schwab <schwab@suse.de> wrote:
> > >
> > >> On Feb 24 2020, Petr Tesarik wrote:
> > >>
> > >> > This works great ... until there's some inline asm()
> > >> > statement, for which gcc cannot keep track of the length
> > >> > attribute, so it is probably taken as zero.
> > >>
> > >> GCC computes it by counting the number of asm insns. You can use
> > >> ADJUST_INSN_LENGTH to adjust this as needed.
> > >
> > > Hmm, that's interesting, but does it work for inline asm()
> > > statements?
> >
> > Yes, for a suitable definition of work.
> >
> > > The argument is essentially a free-form string (with some
> > > substitution), and the compiler cannot know how many bytes they
> > > occupy.
> >
> > That's why ADJUST_INSN_LENGTH can adjust it.
>
> I think Petr might be unaware of the fact that GCC counts the
> **number of instructions in an inline asm statement** by counting
> separators in the asm string. This may overcount when a separator
> appears in a string literal for example, but triggering
> under-counting is trickier.
>
> Petr, please see
> https://gcc.gnu.org/onlinedocs/gcc/Size-of-an-asm.html for some more
> discussion.
VC4 instructions vary between 16 & 80 bits in length -- I guess you
need to arrange things so that the maximum is used for inline asms (per
instruction, counting by separators). That's not 100% ideal since most
instructions will be much shorter, but at least it should give working
code.
Julian