s390/qdio: get rid of register asm
[linux-2.6-microblaze.git] / drivers / s390 / cio / qdio_main.c
index 307ce7f..3052fab 100644 (file)
@@ -31,38 +31,41 @@ MODULE_DESCRIPTION("QDIO base support");
 MODULE_LICENSE("GPL");
 
 static inline int do_siga_sync(unsigned long schid,
-                              unsigned int out_mask, unsigned int in_mask,
+                              unsigned long out_mask, unsigned long in_mask,
                               unsigned int fc)
 {
-       register unsigned long __fc asm ("0") = fc;
-       register unsigned long __schid asm ("1") = schid;
-       register unsigned long out asm ("2") = out_mask;
-       register unsigned long in asm ("3") = in_mask;
        int cc;
 
        asm volatile(
+               "       lgr     0,%[fc]\n"
+               "       lgr     1,%[schid]\n"
+               "       lgr     2,%[out]\n"
+               "       lgr     3,%[in]\n"
                "       siga    0\n"
-               "       ipm     %0\n"
-               "       srl     %0,28\n"
-               : "=d" (cc)
-               : "d" (__fc), "d" (__schid), "d" (out), "d" (in) : "cc");
+               "       ipm     %[cc]\n"
+               "       srl     %[cc],28\n"
+               : [cc] "=&d" (cc)
+               : [fc] "d" (fc), [schid] "d" (schid),
+                 [out] "d" (out_mask), [in] "d" (in_mask)
+               : "cc", "0", "1", "2", "3");
        return cc;
 }
 
-static inline int do_siga_input(unsigned long schid, unsigned int mask,
-                               unsigned int fc)
+static inline int do_siga_input(unsigned long schid, unsigned long mask,
+                               unsigned long fc)
 {
-       register unsigned long __fc asm ("0") = fc;
-       register unsigned long __schid asm ("1") = schid;
-       register unsigned long __mask asm ("2") = mask;
        int cc;
 
        asm volatile(
+               "       lgr     0,%[fc]\n"
+               "       lgr     1,%[schid]\n"
+               "       lgr     2,%[mask]\n"
                "       siga    0\n"
-               "       ipm     %0\n"
-               "       srl     %0,28\n"
-               : "=d" (cc)
-               : "d" (__fc), "d" (__schid), "d" (__mask) : "cc");
+               "       ipm     %[cc]\n"
+               "       srl     %[cc],28\n"
+               : [cc] "=&d" (cc)
+               : [fc] "d" (fc), [schid] "d" (schid), [mask] "d" (mask)
+               : "cc", "0", "1", "2");
        return cc;
 }
 
@@ -78,23 +81,24 @@ static inline int do_siga_input(unsigned long schid, unsigned int mask,
  * Note: For IQDC unicast queues only the highest priority queue is processed.
  */
 static inline int do_siga_output(unsigned long schid, unsigned long mask,
-                                unsigned int *bb, unsigned int fc,
+                                unsigned int *bb, unsigned long fc,
                                 unsigned long aob)
 {
-       register unsigned long __fc asm("0") = fc;
-       register unsigned long __schid asm("1") = schid;
-       register unsigned long __mask asm("2") = mask;
-       register unsigned long __aob asm("3") = aob;
        int cc;
 
        asm volatile(
+               "       lgr     0,%[fc]\n"
+               "       lgr     1,%[schid]\n"
+               "       lgr     2,%[mask]\n"
+               "       lgr     3,%[aob]\n"
                "       siga    0\n"
-               "       ipm     %0\n"
-               "       srl     %0,28\n"
-               : "=d" (cc), "+d" (__fc), "+d" (__aob)
-               : "d" (__schid), "d" (__mask)
-               : "cc");
-       *bb = __fc >> 31;
+               "       lgr     %[fc],0\n"
+               "       ipm     %[cc]\n"
+               "       srl     %[cc],28\n"
+               : [cc] "=&d" (cc), [fc] "+&d" (fc)
+               : [schid] "d" (schid), [mask] "d" (mask), [aob] "d" (aob)
+               : "cc", "0", "1", "2", "3");
+       *bb = fc >> 31;
        return cc;
 }