mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
powerpc/32s: Allow constant folding in mtsr()/mfsr()
On the same way as we did in wrtee(), add an alternative using mtsr/mfsr instructions instead of mtsrin/mfsrin when the segment register can be determined at compile time. Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/9baed0ff9d76723ec90f1b567ddd4ac1ecc7a190.1612612022.git.christophe.leroy@csgroup.eu
This commit is contained in:
parent
179ae57dba
commit
b842d131c7
1 changed files with 8 additions and 2 deletions
|
@ -1417,14 +1417,20 @@ static inline u32 mfsr(u32 idx)
|
|||
{
|
||||
u32 val;
|
||||
|
||||
asm volatile("mfsrin %0, %1" : "=r" (val): "r" (idx));
|
||||
if (__builtin_constant_p(idx))
|
||||
asm volatile("mfsr %0, %1" : "=r" (val): "i" (idx >> 28));
|
||||
else
|
||||
asm volatile("mfsrin %0, %1" : "=r" (val): "r" (idx));
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
static inline void mtsr(u32 val, u32 idx)
|
||||
{
|
||||
asm volatile("mtsrin %0, %1" : : "r" (val), "r" (idx));
|
||||
if (__builtin_constant_p(idx))
|
||||
asm volatile("mtsr %1, %0" : : "r" (val), "i" (idx >> 28));
|
||||
else
|
||||
asm volatile("mtsrin %0, %1" : : "r" (val), "r" (idx));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue