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

MIPS: Separate two consecutive loads in memset.S

partial_fixup is used in noreorder block.

Separating two consecutive loads can save one cycle on processors with
GPR intrelock and can fix load-use on processors that need a load delay slot.

Also do so for fwd_fixup.

[Ralf: Only R2000/R3000 class processors are lacking the the load-user
interlock and even some of those got it retrofitted. With R2000/R3000
being fairly uncommon these days the impact of this bug should be minor.]

Signed-off-by: Tony Wu <tung7970@gmail.com>
To: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/1768/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>

authored by

Tony Wu and committed by
Ralf Baechle
e5674ad6 515b029d

+2 -2
+2 -2
arch/mips/lib/memset.S
··· 161 161 162 162 .Lfwd_fixup: 163 163 PTR_L t0, TI_TASK($28) 164 - LONG_L t0, THREAD_BUADDR(t0) 165 164 andi a2, 0x3f 165 + LONG_L t0, THREAD_BUADDR(t0) 166 166 LONG_ADDU a2, t1 167 167 jr ra 168 168 LONG_SUBU a2, t0 169 169 170 170 .Lpartial_fixup: 171 171 PTR_L t0, TI_TASK($28) 172 - LONG_L t0, THREAD_BUADDR(t0) 173 172 andi a2, LONGMASK 173 + LONG_L t0, THREAD_BUADDR(t0) 174 174 LONG_ADDU a2, t1 175 175 jr ra 176 176 LONG_SUBU a2, t0