[parisc-linux] some whitespace rework and attempt to beautify inline asm stuff?

Joel Soete soete.joel at tiscali.be
Tue Apr 11 03:37:38 MDT 2006


Hello all,

Reading some .s output like memcpy, I was worry that some labels was not in
the column as e.g.:
       pmc_store_exc:
[...]
       1:      ldw 0(%sr1,%r19), %r22
[...]

or otc code in first column:
[...]
shrpw %r3, %r1, %sar, %r28

here I attache a patch
--- linux-2.6.17-rc1-pa1/arch/parisc/lib/memcpy.c.Orig  2006-04-10
07:24:31.000000000 +0000
+++ linux-2.6.17-rc1-pa1/arch/parisc/lib/memcpy.c       2006-04-10
15:05:38.000000000 +0000
@@ -79,20 +79,24 @@
 #define get_user_space() (segment_eq(get_fs(), KERNEL_DS) ? 0 : mfsp(3))
 #define get_kernel_space() (0)
 
-#define MERGE(w0, sh_1, w1, sh_2)  ({                                  \
+#define MERGE(w0, sh_1, w1, sh_2)      ({                              \
        unsigned int _r;                                                \
-       asm volatile (                                                  \
-       "mtsar %3\n"                                                    \
-       "shrpw %1, %2, %%sar, %0\n"                                     \
-       : "=r"(_r)                                                      \
-       : "r"(w0), "r"(w1), "r"(sh_2)                                   \
+       __asm__ __volatile__ ("\n"                                      \
+       "       mtsar           %3\n"                                   \
+       "       shrpw           %1, %2,%%sar, %0"                       \
+               : "=r"(_r)                                              \
+               : "r"(w0), "r"(w1), "r"(sh_2)                           \
        );                                                              \
        _r;                                                             \
 })
 #define THRESHOLD      16
 
 #ifdef DEBUG_MEMCPY
-#define DPRINTF(fmt, args...) do { printk(KERN_DEBUG "%s:%d:%s ", __FILE__,
__LINE__, __FUNCTION__ ); printk(KERN_DEBUG fmt, ##args
 ); } while (0)
+#define DPRINTF(fmt, args...) do {                                     \
+       printk(KERN_DEBUG "%s:%d:%s ",                                  \
+               __FILE__, __LINE__, __FUNCTION__ );                     \
+       printk(KERN_DEBUG fmt, ##args );                                \
+} while (0)
 #else
 #define DPRINTF(fmt, args...)
 #endif
@@ -103,69 +107,81 @@
 #define EXC_WORD ".dword"
 #endif
 
-#define def_load_ai_insn(_insn,_sz,_tt,_s,_a,_t,_e)    \
-       __asm__ __volatile__ (                          \
-       "1:\t" #_insn ",ma " #_sz "(" _s ",%1), %0\n"   \
-       "\t.section __ex_table,\"aw\"\n"                \
-       "\t" EXC_WORD "\t1b\n"                          \
-       "\t" EXC_WORD "\t" #_e "\n"                     \
-       "\t.previous\n"                                 \
-       : _tt(_t), "+r"(_a)                             \
-       :                                               \
-       : "r8")
-
-#define def_store_ai_insn(_insn,_sz,_tt,_s,_a,_t,_e)   \
-       __asm__ __volatile__ (                          \
-       "1:\t" #_insn ",ma %1, " #_sz "(" _s ",%0)\n"   \
-       "\t.section __ex_table,\"aw\"\n"                \
-       "\t" EXC_WORD "\t1b\n"                          \
-       "\t" EXC_WORD "\t" #_e "\n"                     \
-       "\t.previous\n"                                 \
-       : "+r"(_a)                                      \
-       : _tt(_t)                                       \
-       : "r8")
-
-#define ldbma(_s, _a, _t, _e) def_load_ai_insn(ldbs,1,"=r",_s,_a,_t,_e)
-#define stbma(_s, _t, _a, _e) def_store_ai_insn(stbs,1,"r",_s,_a,_t,_e)
-#define ldwma(_s, _a, _t, _e) def_load_ai_insn(ldw,4,"=r",_s,_a,_t,_e)
-#define stwma(_s, _t, _a, _e) def_store_ai_insn(stw,4,"r",_s,_a,_t,_e)
-#define flddma(_s, _a, _t, _e) def_load_ai_insn(fldd,8,"=f",_s,_a,_t,_e)
-#define fstdma(_s, _t, _a, _e) def_store_ai_insn(fstd,8,"f",_s,_a,_t,_e)
-
-#define def_load_insn(_insn,_tt,_s,_o,_a,_t,_e)        \
-       __asm__ __volatile__ (                          \
-       "1:\t" #_insn " " #_o "(" _s ",%1), %0\n"       \
-       "\t.section __ex_table,\"aw\"\n"                \
-       "\t" EXC_WORD "\t1b\n"                          \
-       "\t" EXC_WORD "\t" #_e "\n"                     \
-       "\t.previous\n"                                 \
-       : _tt(_t)                                       \
-       : "r"(_a)                                       \
-       : "r8")
-
-#define def_store_insn(_insn,_tt,_s,_t,_o,_a,_e)       \
-       __asm__ __volatile__ (                          \
-       "1:\t" #_insn " %0, " #_o "(" _s ",%1)\n"       \
-       "\t.section __ex_table,\"aw\"\n"                \
-       "\t" EXC_WORD "\t1b\n"                          \
-       "\t" EXC_WORD "\t" #_e "\n"                     \
-       "\t.previous\n"                                 \
-       :                                               \
-       : _tt(_t), "r"(_a)                              \
-       : "r8")
+#define def_load_ai_insn(_insn, _sz, _tt, _s, _a, _t, _e)              \
+       __asm__ __volatile__ ("\n"                                      \
+       "1:     " #_insn ",ma           " #_sz "(" _s ", %1), %0\n"     \
+       "       .section __ex_table,\"aw\"\n"                           \
+       "       " EXC_WORD "    1b\n"                                   \
+       "       " EXC_WORD "    " #_e "\n"                              \
+       "       .previous"                                              \
+               : _tt(_t), "+r"(_a)                                     \
+               :                                                       \
+               : "r8"                                                  \
+       )
+
+#define def_store_ai_insn(_insn, _sz, _tt, _s, _a, _t, _e)             \
+       __asm__ __volatile__ ("\n"                                      \
+       "1:     " #_insn ",ma           %1, " #_sz "(" _s ", %0)\n"     \
+       "       .section __ex_table,\"aw\"\n"                           \
+       "       " EXC_WORD "    1b\n"                                   \
+       "       " EXC_WORD "    " #_e "\n"                              \
+       "       .previous"                                              \
+               : "+r"(_a)                                              \
+               : _tt(_t)                                               \
+               : "r8"                                                  \
+       )
+
+#define ldbma(_s, _a, _t, _e) def_load_ai_insn(ldbs, 1, "=r", _s, _a, _t, _e)
+#define stbma(_s, _t, _a, _e) def_store_ai_insn(stbs, 1, "r", _s, _a, _t, _e)
+#define ldwma(_s, _a, _t, _e) def_load_ai_insn(ldw, 4, "=r", _s, _a, _t, _e)
+#define stwma(_s, _t, _a, _e) def_store_ai_insn(stw, 4, "r", _s, _a, _t, _e)
+#define flddma(_s, _a, _t, _e) def_load_ai_insn(fldd, 8, "=f", _s, _a, _t, _e)
+#define fstdma(_s, _t, _a, _e) def_store_ai_insn(fstd, 8, "f", _s, _a, _t, _e)
+
+#define def_load_insn(_insn, _tt, _s, _o, _a, _t, _e)                  \
+       __asm__ __volatile__ ("\n"                                      \
+       "1:     " #_insn "              " #_o "(" _s ", %1), %0\n"      \
+       "       .section __ex_table,\"aw\"\n"                           \
+       "       " EXC_WORD "    1b\n"                                   \
+       "       " EXC_WORD "    " #_e "\n"                              \
+       "       .previous"                                              \
+               : _tt(_t)                                               \
+               : "r"(_a)                                               \
+               : "r8"                                                  \
+       )
+
+#define def_store_insn(_insn, _tt, _s, _t, _o, _a, _e)                 \
+       __asm__ __volatile__ ("\n"                                      \
+       "1:     " #_insn "              %0, " #_o "(" _s ", %1)\n"      \
+       "       .section __ex_table,\"aw\"\n"                           \
+       "       " EXC_WORD "    1b\n"                                   \
+       "       " EXC_WORD "    " #_e "\n"                              \
+       "       .previous"                                              \
+               :                                                       \
+               : _tt(_t), "r"(_a)                                      \
+               : "r8"                                                  \
+       )
 
-#define ldw(_s,_o,_a,_t,_e)    def_load_insn(ldw,"=r",_s,_o,_a,_t,_e)
-#define stw(_s,_t,_o,_a,_e)    def_store_insn(stw,"r",_s,_t,_o,_a,_e)
+#define ldw(_s, _o, _a, _t, _e)        def_load_insn(ldw, "=r", _s, _o, _a,
_t, _e)
+#define stw(_s, _t, _o, _a, _e)        def_store_insn(stw, "r", _s, _t, _o,
_a, _e)
 
 #ifdef  CONFIG_PREFETCH
 extern inline void prefetch_src(const void *addr)
 {
-       __asm__("ldw 0(" s_space ",%0), %%r0" : : "r" (addr));
+       __asm__ ("\n"
+       "       ldw             0(" s_space ", %0), %%r0"
+               :
+               : "r" (addr)
+       );
 }
 
 extern inline void prefetch_dst(const void *addr)
 {
-       __asm__("ldd 0(" d_space ",%0), %%r0" : : "r" (addr));
+       __asm__ ("\n"
+       "       ldd             0(" d_space ", %0), %%r0"
+               :
+               : "r" (addr)
+       );
 }
 #else
 #define prefetch_src(addr)
@@ -278,14 +294,14 @@
        return 0;
 
 handle_load_error:
-       __asm__ __volatile__ ("cda_ldw_exc:\n");
+       __asm__ __volatile__ ("\ncda_ldw_exc:\n");
        d         DPRINTF("cda_ldw_exc: o_len=%lu fault_addr=%lu o_src=%lu ret=%lu\n",
                o_len, d->fault_addr, o_src, o_len - d->fault_addr + o_src);
        return o_len * 4 - d->fault_addr + o_src;
 
 handle_store_error:
-       __asm__ __volatile__ ("cda_stw_exc:\n");
+       __asm__ __volatile__ ("\ncda_stw_exc:\n");
        d         DPRINTF("cda_stw_exc: o_len=%lu fault_addr=%lu o_dst=%lu ret=%lu\n",
                o_len, d->fault_addr, o_dst, o_len - d->fault_addr + o_dst);
@@ -374,7 +390,7 @@
 
 word_copy:
        while (len >-               register unsigned int r1,r2,r3,r4,r5,r6,r7,r8;
+               register unsigned int r1, r2, r3, r4, r5, r6, r7, r8;
                /* prefetch_src((char *)pws + L1_CACHE_BYTES); */
                ldwma(s_space, pws, r1, pmc_load_exc);
                ldwma(s_space, pws, r2, pmc_load_exc);
@@ -397,7 +413,7 @@
        }
 
        while (len >-               register unsigned int r1,r2,r3,r4;
+               register unsigned int r1, r2, r3, r4;
                ldwma(s_space, pws, r1, pmc_load_exc);
                ldwma(s_space, pws, r2, pmc_load_exc);
                ldwma(s_space, pws, r3, pmc_load_exc);
@@ -472,14 +488,14 @@
        goto byte_copy;
 
 handle_load_error:
-       __asm__ __volatile__ ("pmc_load_exc:\n");
+       __asm__ __volatile__ ("\npmc_load_exc:\n");
        d         DPRINTF("pmc_load_exc: o_len=%lu fault_addr=%lu o_src=%lu ret=%lu\n",
                o_len, d->fault_addr, o_src, o_len - d->fault_addr + o_src);
        return o_len - d->fault_addr + o_src;
 
 handle_store_error:
-       __asm__ __volatile__ ("pmc_store_exc:\n");
+       __asm__ __volatile__ ("\npmc_store_exc:\n");
        d         DPRINTF("pmc_store_exc: o_len=%lu fault_addr=%lu o_dst=%lu ret=%lu\n",
                o_len, d->fault_addr, o_dst, o_len - d->fault_addr + o_dst);
==<>==

 which seems to make the drill:
-       pmc_store_exc:
+
+pmc_store_exc:
 
 #NO_APP
        addil LR'per_cpu__exception_data-$global$,%r27
@@ -450,37 +451,37 @@
        ldi 0,%r1
 .L38:
 #APP
-       1:      ldw 0(%sr1,%r19), %r22
+
+1:     ldw             0(%sr1, %r19), %r22
        .section __ex_table,"aw"
        .word   1b
        .word   cda_ldw_exc
        .previous
-
-       mtsar %r29
-shrpw %r3, %r1, %sar, %r28
-
-       1:      stw %r28, 0(%sr2,%r20)
+
+       mtsar           %r29
+       shrpw           %r3, %r1,%sar, %r28
+
+1:     stw             %r28, 0(%sr2, %r20)
[...]

Not sure it was usefull but that made me attemptimg to use a same asm bloc
template. 

BTW, I tried to apply the same template to some uaccess.h and figure out that
this hunk din't mentioned that "r1" was cloberred (iirc in fixup text) while
the 32bit one did:
 
#ifdef __LP64__
#define __put_kernel_asm(stx,x,ptr)                         \
       __asm__ __volatile__ (                              \
               "\n1:\t" stx "\t%2,0(%1)\n"                 \
               "\t.section __ex_table,\"aw\"\n"            \
               "\t.dword\t1b,fixup_put_user_skip_1\n"      \
               "\t.previous"                               \
               : "=r"(__pu_err)                            \
               : "r"(ptr), "r"(x), "0"(__pu_err))
[snip]
#else
#define __put_kernel_asm(stx,x,ptr)                         \
       __asm__ __volatile__ (                              \
               "\n1:\t" stx "\t%2,0(%1)\n"                 \
               "\t.section __ex_table,\"aw\"\n"            \
                "\t.word\t1b,fixup_put_user_skip_1\n"      \
                "\t.previous"                              \
               : "=r"(__pu_err)                            \
               : "r"(ptr), "r"(x), "0"(__pu_err)           \
               : "r1")
[snip]

mmm, doen't seems to change anything (I just check sys_parisc32.s) but may be
else where?

Thanks,
    Joel




---------------------------------------------------------------
A free anti-spam and anti-virus filter on all Scarlet mailboxes
More info on http://www.scarlet.be/
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: memcpy.c.beautify.diff
Url: http://lists.parisc-linux.org/pipermail/parisc-linux/attachments/20060411/7af16da1/attachment.txt 
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: uaccess.h.beautify.diff
Url: http://lists.parisc-linux.org/pipermail/parisc-linux/attachments/20060411/7af16da1/attachment-0001.txt 


More information about the parisc-linux mailing list