HELP: MIPS PC Relative Addressing
Maciej W. Rozycki
macro@orcam.me.uk
Thu Feb 25 02:57:39 GMT 2021
On Thu, 25 Feb 2021, Jiaxun Yang wrote:
> > There is a far easier way to do this, which is to just emit an assembler
> > macro, and let the assembler generate the labels and relocs. This is what
> > the RISC-V GCC port does by default. This prevents some optimizations like
> > scheduling the two instructions, but enables some other optimizations like
> > loop unrolling. So it is a tossup. Sometimes we get better code with the
> > assembler macro, and sometimes we get better code by emitting the auipc and
> > addi separately.
>
> Thanks all,
>
> I'll take this approach first, add "lla, dlla" pseudo-instructions to
> assembler and seeking optimization
> in future.
The DLA and LA macros are supposed to do that already, no need to invent
new names.
They may not have been implemented for R6, but I'm not sure. There was
some resistance against macros at one point as the new generation came to
work on the MIPS assembler and consequently inconsistencies resulted in
the language that may not have been removed to date.
In any case you need to use `-mno-explicit-relocs' with GCC then so as
not to break the compiler's semantics or assumptions.
> Btw I found we don't have any document for MIPS pseudo-instructions. RISC-V
> put them in ISA manual
> but it is not the case for MIPS. Is it possible to have one in binutils?
There are MIPS assembly language books available; I'm fairly sure Dominic
Sweetman's "See MIPS Run" has a chapter (I don't have the book at hand).
I don't think GNU binutils documentation is supposed to describe the
assembly dialects supported, except maybe for GNU extensions (pseudo-ops).
Maciej
More information about the Binutils
mailing list