Excerpts from Maciej W. Rozycki's message of October 7, 2020 9:45 pm:
> Correct MIPS I assembly build errors in switchcontext.S:
> 
> .../libphobos/libdruntime/config/mips/switchcontext.S: Assembler messages:
> .../libphobos/libdruntime/config/mips/switchcontext.S:50: Error: opcode not 
> supported on this processor: mips1 (mips1) `sdc1 
> $f20,(0*8-((6*8+4+(-6*8+4&7))))($sp)'
> 
> etc., due to the use of the MIPS II LDC1 and SDC1 hardware instructions 
> for FP register load and store operations.  Instead use the L.D and S.D 
> generic assembly instructions, which are strict aliases for the LDC1 and 
> SDC1 instructions respectively and produce identical machine code where 
> the assembly for the MIPS II or a higher ISA has been requested, however 
> they become assembly macros and expand to compatible sequences of LWC1 
> and SWC1 hardware instructions where the assembly for the MIPS I ISA is 
> in effect.
> 
>       libphobos/
>       * libdruntime/config/mips/switchcontext.S [__mips_hard_float]: 
>       Use L.D and S.D generic assembly instructions rather than LDC1 
>       and SDC1 MIPS II hardware instructions.
> ---
> Hi,
> 
>  Noticed in a build of a MIPS I toolchain.  I have no way to run MIPS 
> regression-testing right now, however in `libopcodes' the L.D and S.D 
> instructions are strict aliases valid for the MIPS II and higher ISAs, and 
> just to double-check that I have built MIPS32r2 GCC with and without the 
> change applied and verified with `objdump' that the respective target 
> objects produced are identical.
> 
>  OK to apply to trunk, and -- as a fatal compilation error -- to backport 
> to active release branches?
> 

Fine with me, thanks.

Iain.

Reply via email to