Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

MIPS: Fix sign-extension bug in 32-bit kernel on 32-bit hardware.

Probably nobody does arithmetic on cp0 register values so this has never
bitten.

Signed-off-by: Ralf Baechle <ralf@linux-mips.org>

+4 -4
+4 -4
arch/mips/include/asm/mipsregs.h
··· 728 728 ".set\tmips64\n\t" \ 729 729 "dmfc0\t%M0, " #source "\n\t" \ 730 730 "dsll\t%L0, %M0, 32\n\t" \ 731 - "dsrl\t%M0, %M0, 32\n\t" \ 732 - "dsrl\t%L0, %L0, 32\n\t" \ 731 + "dsra\t%M0, %M0, 32\n\t" \ 732 + "dsra\t%L0, %L0, 32\n\t" \ 733 733 ".set\tmips0" \ 734 734 : "=r" (__val)); \ 735 735 else \ ··· 737 737 ".set\tmips64\n\t" \ 738 738 "dmfc0\t%M0, " #source ", " #sel "\n\t" \ 739 739 "dsll\t%L0, %M0, 32\n\t" \ 740 - "dsrl\t%M0, %M0, 32\n\t" \ 741 - "dsrl\t%L0, %L0, 32\n\t" \ 740 + "dsra\t%M0, %M0, 32\n\t" \ 741 + "dsra\t%L0, %L0, 32\n\t" \ 742 742 ".set\tmips0" \ 743 743 : "=r" (__val)); \ 744 744 local_irq_restore(__flags); \