Skip to content

Commit 3029ce3

Browse files
committed
parisc/unaligned: Rewrite 32-bit inline assembly of emulate_sth()
Convert to use real temp variables instead of clobbering processor registers. Signed-off-by: Helge Deller <deller@gmx.de>
1 parent 427c107 commit 3029ce3

1 file changed

Lines changed: 7 additions & 8 deletions

File tree

arch/parisc/kernel/unaligned.c

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ static int emulate_ldd(struct pt_regs *regs, int toreg, int flop)
234234

235235
static int emulate_sth(struct pt_regs *regs, int frreg)
236236
{
237-
unsigned long val = regs->gr[frreg];
237+
unsigned long val = regs->gr[frreg], temp1;
238238
ASM_EXCEPTIONTABLE_VAR(ret);
239239

240240
if (!frreg)
@@ -244,16 +244,15 @@ static int emulate_sth(struct pt_regs *regs, int frreg)
244244
val, regs->isr, regs->ior);
245245

246246
__asm__ __volatile__ (
247-
" mtsp %3, %%sr1\n"
248-
" extrw,u %1, 23, 8, %%r19\n"
249-
"1: stb %1, 1(%%sr1, %2)\n"
250-
"2: stb %%r19, 0(%%sr1, %2)\n"
247+
" mtsp %4, %%sr1\n"
248+
" extrw,u %2, 23, 8, %1\n"
249+
"1: stb %1, 0(%%sr1, %3)\n"
250+
"2: stb %2, 1(%%sr1, %3)\n"
251251
"3: \n"
252252
ASM_EXCEPTIONTABLE_ENTRY_EFAULT(1b, 3b)
253253
ASM_EXCEPTIONTABLE_ENTRY_EFAULT(2b, 3b)
254-
: "+r" (ret)
255-
: "r" (val), "r" (regs->ior), "r" (regs->isr)
256-
: "r19" );
254+
: "+r" (ret), "=&r" (temp1)
255+
: "r" (val), "r" (regs->ior), "r" (regs->isr) );
257256

258257
return ret;
259258
}

0 commit comments

Comments
 (0)