Re: lib/crypto/mips/poly1305-core.S:95: Error: opcode not supported on this processor: mips64r6 (mips64r6) `lwl $8,0+3($5)'

Eric Biggers
2026-03-30T20:38:40Z

[+Cc linux-mips and linux-crypto]

On Sat, Mar 21, 2026 at 01:47:15AM +0800, kernel test robot wrote:
> Hi Eric,
>
> First bad commit (maybe != root cause):
>
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> head: 0e4f8f1a3d081e834be5fd0a62bdb2554fadd307
> commit: 7e54e993ab8c98d912f54ad6f46bfcc9dcd65368 lib/crypto: mips: Move arch/mips/lib/crypto/ into lib/crypto/
> date: 9 months ago
> config: mips-randconfig-r131-20260320 (https://download.01.org/0day-ci/archive/20260321/202603210105.sdD4rsTq-lkp@intel.com/config)
> compiler: mips-linux-gcc (GCC) 11.5.0
> sparse: v0.6.5-rc1
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260321/202603210105.sdD4rsTq-lkp@intel.com/reproduce)
>
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202603210105.sdD4rsTq-lkp@intel.com/
>
> All errors (new ones prefixed by >>):
>
> lib/crypto/mips/poly1305-core.S: Assembler messages:
> >> lib/crypto/mips/poly1305-core.S:95: Error: opcode not supported on this processor: mips64r6 (mips64r6) `lwl $8,0+3($5)'
> lib/crypto/mips/poly1305-core.S:96: Error: opcode not supported on this processor: mips64r6 (mips64r6) `lwl $9,4+3($5)'
> lib/crypto/mips/poly1305-core.S:97: Error: opcode not supported on this processor: mips64r6 (mips64r6) `lwl $10,8+3($5)'
> lib/crypto/mips/poly1305-core.S:98: Error: opcode not supported on this processor: mips64r6 (mips64r6) `lwl $11,12+3($5)'

This isn't new. It was first reported in 2021:
https://lore.kernel.org/all/202108040636.P6t1LvPP-lkp@intel.com/

It's caused by:

CONFIG_64BIT=n causes the 32-bit Poly1305 assembly code to be generated.
That code checks the _MIPS_ARCH_MIPS32R6 macro. But, the code is
actually built with -march=mips64r6, due to CONFIG_CPU_MIPS64_R6=y.
Thus _MIPS_ARCH_MIPS32R6 is not defined; _MIPS_ARCH_MIPS64R6 is defined
instead. So the wrong code gets built.

Maybe someone from linux-mips@vger.kernel.org can confirm whether
CONFIG_64BIT=n && CONFIG_CPU_MIPS64_R6=y actually makes sense?

- Eric