linux/arch/mips
Maciej W. Rozycki c49f71f607 MIPS: Reinstate platform `__div64_32' handler
Our current MIPS platform `__div64_32' handler is inactive, because it
is incorrectly only enabled for 64-bit configurations, for which generic
`do_div' code does not call it anyway.

The handler is not suitable for being called from there though as it
only calculates 32 bits of the quotient under the assumption the 64-bit
divident has been suitably reduced.  Code for such reduction used to be
there, however it has been incorrectly removed with commit c21004cd5b
("MIPS: Rewrite <asm/div64.h> to work with gcc 4.4.0."), which should
have only updated an obsoleted constraint for an inline asm involving
$hi and $lo register outputs, while possibly wiring the original MIPS
variant of the `do_div' macro as `__div64_32' handler for the generic
`do_div' implementation

Correct the handler as follows then:

- Revert most of the commit referred, however retaining the current
  formatting, except for the final two instructions of the inline asm
  sequence, which the original commit missed.  Omit the original 64-bit
  parts though.

- Rename the original `do_div' macro to `__div64_32'.  Use the combined
  `x' constraint referring to the MD accumulator as a whole, replacing
  the original individual `h' and `l' constraints used for $hi and $lo
  registers respectively, of which `h' has been obsoleted with GCC 4.4.
  Update surrounding code accordingly.

  We have since removed support for GCC versions before 4.9, so no need
  for a special arrangement here; GCC has supported the `x' constraint
  since forever anyway, or at least going back to 1991.

- Rename the `__base' local variable in `__div64_32' to `__radix' to
  avoid a conflict with a local variable in `do_div'.

- Actually enable this code for 32-bit rather than 64-bit configurations
  by qualifying it with BITS_PER_LONG being 32 instead of 64.  Include
  <asm/bitsperlong.h> for this macro rather than <linux/types.h> as we
  don't need anything else.

- Finally include <asm-generic/div64.h> last rather than first.

This has passed correctness verification with test_div64 and reduced the
module's average execution time down to 1.0668s and 0.2629s from 2.1529s
and 0.5647s respectively for an R3400 CPU @40MHz and a 5Kc CPU @160MHz.
For a reference 64-bit `do_div' code where we have the DDIVU instruction
available to do the whole calculation right away averages at 0.0660s for
the latter CPU.

Fixes: c21004cd5b ("MIPS: Rewrite <asm/div64.h> to work with gcc 4.4.0.")
Reported-by: Huacai Chen <chenhuacai@kernel.org>
Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk>
Cc: stable@vger.kernel.org # v2.6.30+
Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
2021-04-21 13:45:36 +02:00
..
alchemy MIPS: Alchemy: Use DEFINE_SPINLOCK() for spinlock 2021-04-12 16:54:57 +02:00
ar7 MIPS: Remove empty prom_free_prom_memory functions 2021-01-07 17:11:33 +01:00
ath25 MIPS: Remove empty prom_free_prom_memory functions 2021-01-07 17:11:33 +01:00
ath79 MIPS: of: Introduce helper function to get DTB 2021-02-04 13:34:51 +01:00
bcm47xx MIPS: Remove empty prom_free_prom_memory functions 2021-01-07 17:11:33 +01:00
bcm63xx MIPS: BCM63xx: Spello fix in the file clk.c 2021-03-10 15:21:43 +01:00
bmips MIPS: bmips: include <linux/dma-direct.h> for phys_to_dma 2021-03-06 08:43:40 +01:00
boot MIPS: Makefile: Replace -pg with CC_FLAGS_FTRACE 2021-04-21 13:44:35 +02:00
cavium-octeon MIPS: octeon: Add __raw_copy_[from|to|in]_user symbols 2021-04-09 11:43:52 +02:00
cobalt MIPS: Remove empty prom_free_prom_memory functions 2021-01-07 17:11:33 +01:00
configs MIPS: Loongson64: enable CONFIG_USB_SERIAL_PL2303 2021-03-29 11:19:33 +02:00
crypto crypto: mips: add poly1305-core.S to .gitignore 2021-03-29 11:19:10 +02:00
dec MIPS: DEC: Restore bootmem reservation for firmware working memory area 2020-10-14 23:57:57 +02:00
fw MIPS: Remove empty prom_free_prom_memory functions 2021-01-07 17:11:33 +01:00
generic MIPS: generic: Update node names to avoid unit addresses 2021-04-12 16:48:35 +02:00
include MIPS: Reinstate platform `__div64_32' handler 2021-04-21 13:45:36 +02:00
ingenic MIPS: jz4740: Rename jz4740 folders to ingenic 2020-09-18 16:35:05 +02:00
jazz MIPS: jazz: always allow little-endian builds 2021-01-22 13:53:21 +01:00
kernel MIPS: Makefile: Replace -pg with CC_FLAGS_FTRACE 2021-04-21 13:44:35 +02:00
kvm MIPS: Remove KVM_TE support 2021-03-10 15:18:48 +01:00
lantiq MIPS: of: Introduce helper function to get DTB 2021-02-04 13:34:51 +01:00
lib MIPS: Remove get_fs/set_fs 2021-04-06 15:12:58 +02:00
loongson2ef - added support for Nintendo N64 2021-02-21 13:18:26 -08:00
loongson32 MIPS: Remove empty prom_free_prom_memory functions 2021-01-07 17:11:33 +01:00
loongson64 MIPS: Loongson64: Add kexec/kdump support 2021-04-16 09:18:06 +02:00
math-emu MIPS: Use fallthrough for arch/mips 2020-05-07 11:55:47 +02:00
mm MIPS: uaccess: Added __get/__put_kernel_nofault 2021-04-06 14:36:56 +02:00
mti-malta MIPS: Remove KVM_GUEST support 2021-03-10 15:18:40 +01:00
n64 mips: Add N64 machine type 2021-01-22 11:40:00 +01:00
net bpf: Rename BPF_XADD and prepare to encode other atomics in .imm 2021-01-14 18:34:29 -08:00
netlogic MIPS: Remove empty prom_free_prom_memory functions 2021-01-07 17:11:33 +01:00
pci MIPS: pci-legacy: revert "use generic pci_enable_resources" 2021-04-21 13:44:05 +02:00
pic32 MIPS: of: Introduce helper function to get DTB 2021-02-04 13:34:51 +01:00
pistachio driver core: lift dma_default_coherent into common code 2021-02-13 09:51:45 +01:00
power mips: check for dsp presence only once before save/restore 2019-10-07 10:58:53 -07:00
ralink MIPS: ralink: rt288x: select MIPS_AUTO_PFN_OFFSET 2021-04-06 15:12:58 +02:00
rb532 MIPS: Remove empty prom_free_prom_memory functions 2021-01-07 17:11:33 +01:00
sgi-ip22 MIPS: Only include the platform file needed 2020-05-13 00:17:18 +02:00
sgi-ip27 mips/sgi-ip27: Delete obsolete TODO file 2021-03-30 15:06:37 +02:00
sgi-ip30 MIPS: SGI-IP30: Move irq bits to better header files 2020-09-21 22:15:49 +02:00
sgi-ip32 arch: mips: update references to current linux-mips list 2021-02-23 13:24:38 +01:00
sibyte MIPS: Remove empty prom_free_prom_memory functions 2021-01-07 17:11:33 +01:00
sni MIPS: SNI: Fix spurious interrupts 2020-09-16 22:40:58 +02:00
tools MIPS: tools: Fix resource leak in elf-entry.c 2020-05-24 09:29:48 +02:00
txx9 MIPS: Remove empty prom_free_prom_memory functions 2021-01-07 17:11:33 +01:00
vdso MIPS: Makefile: Replace -pg with CC_FLAGS_FTRACE 2021-04-21 13:44:35 +02:00
vr41xx MIPS: Remove empty prom_free_prom_memory functions 2021-01-07 17:11:33 +01:00
Kbuild MIPS: Fix "make clean" error due to recent changes 2020-05-13 13:20:22 +02:00
Kbuild.platforms mips: Add N64 machine type 2021-01-22 11:40:00 +01:00
Kconfig MIPS: Remove get_fs/set_fs 2021-04-06 15:12:58 +02:00
Kconfig.debug arch: mips: fix unmet dependency for DEBUG_INFO 2021-03-29 11:17:23 +02:00
Makefile - added support for Nintendo N64 2021-02-21 13:18:26 -08:00
Makefile.postlink MIPS: fix indentation of the 'RELOCS' message 2020-01-20 15:37:30 -08:00