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