From: Joel Soete <soete.joel@tiscali.be>
To: Randolph Chung <randolph@tausq.org>
Cc: parisc-linux@lists.parisc-linux.org
Subject: Some other cleanup [Was: [parisc-linux] c3k panics]
Date: Sun, 05 Jun 2005 19:15:56 +0000 [thread overview]
Message-ID: <42A34F6C.7030903@tiscali.be> (raw)
In-Reply-To: <20050531062619.GI3050@tausq.org>
Hello Randolph,
Randolph Chung wrote:
>>Ok clear but still confused why 32bit branch doesn't nullify the insn
>>in delay slot like did 64bit?
>
>
> it's a bug, but fortunately that copy of the fixup_branch macro (in
> syscall.S) isn't actually used ;-) I'll remove it.
>
>
Just in the hope of help here are some cleanup:
o at a place there was 2 enbraced #ifdef CONFIG_PA20,
o in #else /* !CONFIG_PA20 */ ... #endif , afaik there are few chance that __LP64__ (aka CONFIG_64BIT)?
o the (micro)-optimization we spoke previoulsy
o here above syscall.S
--- arch/parisc/kernel/unaligned.c.Orig 2005-06-05 19:18:19.000000000 +0200
+++ arch/parisc/kernel/unaligned.c 2005-06-05 20:17:47.000000000 +0200
@@ -39,10 +39,15 @@
#define RFMT "%08lx"
#endif
+#ifndef CONFIG_64BIT
+#define FIXUP_BRANCH(lbl) \
+ "\tb,n " #lbl "\n"
+#else
#define FIXUP_BRANCH(lbl) \
"\tldil L%%" #lbl ", %%r1\n" \
"\tldo R%%" #lbl "(%%r1), %%r1\n" \
"\tbv,n %%r0(%%r1)\n"
+#endif
/* 1111 1100 0000 0000 0001 0011 1100 0000 */
#define OPCODE1(a,b,c) ((a)<<26|(b)<<12|(c)<<6)
@@ -213,6 +218,7 @@
return ret;
}
+
static int emulate_ldd(struct pt_regs *regs, int toreg, int flop)
{
unsigned long saddr = regs->ior;
@@ -254,7 +260,7 @@
: "=r" (val), "=r" (ret)
: "0" (val), "r" (saddr), "r" (regs->isr)
: "r19", "r20" );
-#else
+#else /* !CONFIG_PA20 */
{
unsigned long valh=0,vall=0;
__asm__ __volatile__ (
@@ -275,22 +281,16 @@
FIXUP_BRANCH(4b)
" .previous\n"
" .section __ex_table,\"aw\"\n"
-#ifdef __LP64__
-" .dword 1b,5b\n"
-" .dword 2b,5b\n"
-" .dword 3b,5b\n"
-#else
" .word 1b,5b\n"
" .word 2b,5b\n"
" .word 3b,5b\n"
-#endif
" .previous\n"
: "=r" (valh), "=r" (vall), "=r" (ret)
: "0" (valh), "1" (vall), "r" (saddr), "r" (regs->isr)
: "r19", "r20" );
val=((__u64)valh<<32)|(__u64)vall;
}
-#endif
+#endif /* !CONFIG_PA20 */
DPRINTF("val = 0x%llx\n", val);
@@ -393,6 +393,7 @@
return 0;
}
+
static int emulate_std(struct pt_regs *regs, int frreg, int flop)
{
__u64 val;
@@ -451,7 +452,7 @@
: "=r" (ret)
: "r" (val), "r" (regs->ior), "r" (regs->isr)
: "r19", "r20", "r21", "r22", "r1" );
-#else
+#else /* !CONFIG_PA20 */
{
unsigned long valh=(val>>32),vall=(val&0xffffffffl);
__asm__ __volatile__ (
@@ -479,25 +480,17 @@
FIXUP_BRANCH(6b)
" .previous\n"
" .section __ex_table,\"aw\"\n"
-#ifdef __LP64__
-" .dword 1b,7b\n"
-" .dword 2b,7b\n"
-" .dword 3b,7b\n"
-" .dword 4b,7b\n"
-" .dword 5b,7b\n"
-#else
" .word 1b,7b\n"
" .word 2b,7b\n"
" .word 3b,7b\n"
" .word 4b,7b\n"
" .word 5b,7b\n"
-#endif
" .previous\n"
: "=r" (ret)
: "r" (valh), "r" (vall), "r" (regs->ior), "r" (regs->isr)
: "r19", "r20", "r21", "r1" );
}
-#endif
+#endif /* !CONFIG_PA20 */
return ret;
}
@@ -683,14 +676,12 @@
ret = emulate_std(regs, R2(regs->iir),1);
break;
-#ifdef CONFIG_PA20
case OPCODE_LDD_L:
ret = emulate_ldd(regs, R2(regs->iir),0);
break;
case OPCODE_STD_L:
ret = emulate_std(regs, R2(regs->iir),0);
break;
-#endif
}
#endif
switch (regs->iir & OPCODE3_MASK)
@@ -774,8 +765,7 @@
* now, so we only check for PA1.1 encodings at this point.
*/
-int
-check_unaligned(struct pt_regs *regs)
+int check_unaligned(struct pt_regs *regs)
{
unsigned long align_mask;
--- arch/parisc/kernel/syscall.S.Orig 2005-06-05 19:52:36.000000000 +0200
+++ arch/parisc/kernel/syscall.S 2005-06-05 19:57:15.000000000 +0200
@@ -23,23 +23,7 @@
*/
#define KILL_INSN break 0,0
-#ifdef CONFIG_64BIT
- .level 2.0w
-#else
- .level 1.1
-#endif
-
-#ifndef CONFIG_64BIT
- .macro fixup_branch,lbl
- b \lbl
- .endm
-#else
- .macro fixup_branch,lbl
- ldil L%\lbl, %r1
- ldo R%\lbl(%r1), %r1
- bv,n %r0(%r1)
- .endm
-#endif
+ .level LEVEL
.text
--- arch/parisc/lib/lusercopy.S.Orig 2005-06-05 19:36:55.000000000 +0200
+++ arch/parisc/lib/lusercopy.S 2005-06-05 20:02:51.000000000 +0200
@@ -54,9 +54,13 @@
.endm
.macro fixup_branch lbl
- ldil L%\lbl, %r1
- ldo R%\lbl(%r1), %r1
- bv %r0(%r1)
+#ifndef CONFIG_64BIT
+ b \lbl
+#else
+ ldil L%\lbl, %r1
+ ldo R%\lbl(%r1), %r1
+ bv %r0(%r1)
+#endif
.endm
/*
====<>====
Thanks,
Joel
_______________________________________________
parisc-linux mailing list
parisc-linux@lists.parisc-linux.org
http://lists.parisc-linux.org/mailman/listinfo/parisc-linux
prev parent reply other threads:[~2005-06-05 19:15 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-05-31 5:41 [parisc-linux] c3k panics Joel Soete
2005-05-31 6:26 ` Randolph Chung
2005-06-01 13:11 ` Joel Soete
2005-06-01 13:55 ` John David Anglin
2005-06-05 19:15 ` Joel Soete [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=42A34F6C.7030903@tiscali.be \
--to=soete.joel@tiscali.be \
--cc=parisc-linux@lists.parisc-linux.org \
--cc=randolph@tausq.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox