aboutsummaryrefslogtreecommitdiffstats
path: root/arch/parisc/kernel/unaligned.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/parisc/kernel/unaligned.c')
-rw-r--r--arch/parisc/kernel/unaligned.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/arch/parisc/kernel/unaligned.c b/arch/parisc/kernel/unaligned.c
index de0a1b21cb40..bd2230d6a2a6 100644
--- a/arch/parisc/kernel/unaligned.c
+++ b/arch/parisc/kernel/unaligned.c
@@ -20,7 +20,6 @@
20 * 20 *
21 */ 21 */
22 22
23#include <linux/config.h>
24#include <linux/kernel.h> 23#include <linux/kernel.h>
25#include <linux/module.h> 24#include <linux/module.h>
26#include <asm/uaccess.h> 25#include <asm/uaccess.h>
@@ -43,6 +42,8 @@
43 "\tldil L%%" #lbl ", %%r1\n" \ 42 "\tldil L%%" #lbl ", %%r1\n" \
44 "\tldo R%%" #lbl "(%%r1), %%r1\n" \ 43 "\tldo R%%" #lbl "(%%r1), %%r1\n" \
45 "\tbv,n %%r0(%%r1)\n" 44 "\tbv,n %%r0(%%r1)\n"
45/* If you use FIXUP_BRANCH, then you must list this clobber */
46#define FIXUP_BRANCH_CLOBBER "r1"
46 47
47/* 1111 1100 0000 0000 0001 0011 1100 0000 */ 48/* 1111 1100 0000 0000 0001 0011 1100 0000 */
48#define OPCODE1(a,b,c) ((a)<<26|(b)<<12|(c)<<6) 49#define OPCODE1(a,b,c) ((a)<<26|(b)<<12|(c)<<6)
@@ -157,7 +158,7 @@ static int emulate_ldh(struct pt_regs *regs, int toreg)
157" .previous\n" 158" .previous\n"
158 : "=r" (val), "=r" (ret) 159 : "=r" (val), "=r" (ret)
159 : "0" (val), "r" (saddr), "r" (regs->isr) 160 : "0" (val), "r" (saddr), "r" (regs->isr)
160 : "r20" ); 161 : "r20", FIXUP_BRANCH_CLOBBER );
161 162
162 DPRINTF("val = 0x" RFMT "\n", val); 163 DPRINTF("val = 0x" RFMT "\n", val);
163 164
@@ -202,7 +203,7 @@ static int emulate_ldw(struct pt_regs *regs, int toreg, int flop)
202" .previous\n" 203" .previous\n"
203 : "=r" (val), "=r" (ret) 204 : "=r" (val), "=r" (ret)
204 : "0" (val), "r" (saddr), "r" (regs->isr) 205 : "0" (val), "r" (saddr), "r" (regs->isr)
205 : "r19", "r20" ); 206 : "r19", "r20", FIXUP_BRANCH_CLOBBER );
206 207
207 DPRINTF("val = 0x" RFMT "\n", val); 208 DPRINTF("val = 0x" RFMT "\n", val);
208 209
@@ -253,7 +254,7 @@ static int emulate_ldd(struct pt_regs *regs, int toreg, int flop)
253" .previous\n" 254" .previous\n"
254 : "=r" (val), "=r" (ret) 255 : "=r" (val), "=r" (ret)
255 : "0" (val), "r" (saddr), "r" (regs->isr) 256 : "0" (val), "r" (saddr), "r" (regs->isr)
256 : "r19", "r20" ); 257 : "r19", "r20", FIXUP_BRANCH_CLOBBER );
257#else 258#else
258 { 259 {
259 unsigned long valh=0,vall=0; 260 unsigned long valh=0,vall=0;
@@ -287,7 +288,7 @@ static int emulate_ldd(struct pt_regs *regs, int toreg, int flop)
287" .previous\n" 288" .previous\n"
288 : "=r" (valh), "=r" (vall), "=r" (ret) 289 : "=r" (valh), "=r" (vall), "=r" (ret)
289 : "0" (valh), "1" (vall), "r" (saddr), "r" (regs->isr) 290 : "0" (valh), "1" (vall), "r" (saddr), "r" (regs->isr)
290 : "r19", "r20" ); 291 : "r19", "r20", FIXUP_BRANCH_CLOBBER );
291 val=((__u64)valh<<32)|(__u64)vall; 292 val=((__u64)valh<<32)|(__u64)vall;
292 } 293 }
293#endif 294#endif
@@ -335,7 +336,7 @@ static int emulate_sth(struct pt_regs *regs, int frreg)
335" .previous\n" 336" .previous\n"
336 : "=r" (ret) 337 : "=r" (ret)
337 : "r" (val), "r" (regs->ior), "r" (regs->isr) 338 : "r" (val), "r" (regs->ior), "r" (regs->isr)
338 : "r19" ); 339 : "r19", FIXUP_BRANCH_CLOBBER );
339 340
340 return ret; 341 return ret;
341} 342}
@@ -389,7 +390,7 @@ static int emulate_stw(struct pt_regs *regs, int frreg, int flop)
389" .previous\n" 390" .previous\n"
390 : "=r" (ret) 391 : "=r" (ret)
391 : "r" (val), "r" (regs->ior), "r" (regs->isr) 392 : "r" (val), "r" (regs->ior), "r" (regs->isr)
392 : "r19", "r20", "r21", "r22", "r1" ); 393 : "r19", "r20", "r21", "r22", "r1", FIXUP_BRANCH_CLOBBER );
393 394
394 return 0; 395 return 0;
395} 396}
@@ -450,7 +451,7 @@ static int emulate_std(struct pt_regs *regs, int frreg, int flop)
450" .previous\n" 451" .previous\n"
451 : "=r" (ret) 452 : "=r" (ret)
452 : "r" (val), "r" (regs->ior), "r" (regs->isr) 453 : "r" (val), "r" (regs->ior), "r" (regs->isr)
453 : "r19", "r20", "r21", "r22", "r1" ); 454 : "r19", "r20", "r21", "r22", "r1", FIXUP_BRANCH_CLOBBER );
454#else 455#else
455 { 456 {
456 unsigned long valh=(val>>32),vall=(val&0xffffffffl); 457 unsigned long valh=(val>>32),vall=(val&0xffffffffl);
@@ -495,7 +496,7 @@ static int emulate_std(struct pt_regs *regs, int frreg, int flop)
495" .previous\n" 496" .previous\n"
496 : "=r" (ret) 497 : "=r" (ret)
497 : "r" (valh), "r" (vall), "r" (regs->ior), "r" (regs->isr) 498 : "r" (valh), "r" (vall), "r" (regs->ior), "r" (regs->isr)
498 : "r19", "r20", "r21", "r1" ); 499 : "r19", "r20", "r21", "r1", FIXUP_BRANCH_CLOBBER );
499 } 500 }
500#endif 501#endif
501 502