Skip to content

Commit 427c107

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

1 file changed

Lines changed: 13 additions & 15 deletions

File tree

arch/parisc/kernel/unaligned.c

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -201,26 +201,24 @@ static int emulate_ldd(struct pt_regs *regs, int toreg, int flop)
201201
: "r19", "r20" );
202202
#else
203203
{
204-
unsigned long valh=0,vall=0;
204+
unsigned long shift, temp1;
205205
__asm__ __volatile__ (
206-
" zdep %5,29,2,%%r19\n" /* r19=(ofs&3)*8 */
207-
" mtsp %6, %%sr1\n"
208-
" dep %%r0,31,2,%5\n"
209-
"1: ldw 0(%%sr1,%5),%0\n"
210-
"2: ldw 4(%%sr1,%5),%1\n"
211-
"3: ldw 8(%%sr1,%5),%%r20\n"
212-
" subi 32,%%r19,%%r19\n"
213-
" mtsar %%r19\n"
214-
" vshd %0,%1,%0\n"
215-
" vshd %1,%%r20,%1\n"
206+
" zdep %2,29,2,%3\n" /* r19=(ofs&3)*8 */
207+
" mtsp %5, %%sr1\n"
208+
" dep %%r0,31,2,%2\n"
209+
"1: ldw 0(%%sr1,%2),%0\n"
210+
"2: ldw 4(%%sr1,%2),%R0\n"
211+
"3: ldw 8(%%sr1,%2),%4\n"
212+
" subi 32,%3,%3\n"
213+
" mtsar %3\n"
214+
" vshd %0,%R0,%0\n"
215+
" vshd %R0,%4,%R0\n"
216216
"4: \n"
217217
ASM_EXCEPTIONTABLE_ENTRY_EFAULT(1b, 4b)
218218
ASM_EXCEPTIONTABLE_ENTRY_EFAULT(2b, 4b)
219219
ASM_EXCEPTIONTABLE_ENTRY_EFAULT(3b, 4b)
220-
: "=r" (valh), "=r" (vall), "+r" (ret)
221-
: "0" (valh), "1" (vall), "r" (saddr), "r" (regs->isr)
222-
: "r19", "r20" );
223-
val=((__u64)valh<<32)|(__u64)vall;
220+
: "+r" (val), "+r" (ret), "+r" (saddr), "=&r" (shift), "=&r" (temp1)
221+
: "r" (regs->isr) );
224222
}
225223
#endif
226224

0 commit comments

Comments
 (0)