MIPS: UAPI: Fix unrecognized opcode WSBH/DSBH/DSHD when using MIPS16.
authorYousong Zhou <yszhou4tech@gmail.com>
Thu, 3 Sep 2015 09:47:45 +0000 (17:47 +0800)
committerRalf Baechle <ralf@linux-mips.org>
Thu, 3 Sep 2015 10:11:56 +0000 (12:11 +0200)
commite0d8b2ec532852d4b5aabcec3e7611848c32237d
treeb401fa07fcb10a1c3523ef74d5acab8659daf6c0
parent1cfa8de2880e5512f9037c7804ea47a79cc8232c
MIPS: UAPI: Fix unrecognized opcode WSBH/DSBH/DSHD when using MIPS16.

The nomips16 has to be added both as function attribute and assembler
directive.

When only function attribute is specified, the compiler will inline the
function with -Os optimization.  The generated assembly code cannot be
correctly assembled because ISA mode switch has to be done through jump
instruction.

When only ".set nomips16" directive is used, the generated assembly code
will use MIPS32 code for the inline assembly template and MIPS16 for the
function return.  The compiled binary is invalid:

    00403100 <__arch_swab16>:
      403100:   7c0410a0    wsbh    v0,a0
      403104:   e820ea31    swc2    $0,-5583(at)

while correct code should be:

    00402650 <__arch_swab16>:
      402650:   7c0410a0    wsbh    v0,a0
      402654:   03e00008    jr  ra
      402658:   3042ffff    andi    v0,v0,0xffff

Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
Cc: Chen Jie <chenj@lemote.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/11087/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/include/uapi/asm/swab.h