Replace SHL+ADD with MAD
authorjsteube <jens.steube@gmail.com>
Sat, 7 May 2016 21:51:37 +0000 (23:51 +0200)
committerjsteube <jens.steube@gmail.com>
Sat, 7 May 2016 21:51:37 +0000 (23:51 +0200)
OpenCL/types_ocl.c

index fe7bb1c..0f5790e 100644 (file)
@@ -359,37 +359,29 @@ inline u32x rotr32 (const u32x a, const u32 n)
 
   #if VECT_SIZE == 2
 
-  asm ("\n"
-       "shl.b32  %4,  %2,  %6;\n"
-       "shl.b32  %5,  %3,  %6;\n"
-       "shr.b32  %0,  %2,  %7;\n"
-       "shr.b32  %1,  %3,  %7;\n"
-       "add.u32  %0,  %0,  %4;\n"
-       "add.u32  %1,  %1,  %5;\n"
+  asm ("shr.b32 %4, %2, %6;"
+       "shr.b32 %5, %3, %6;"
+       "mad.lo.u32 %0, %2, %7, %4;"
+       "mad.lo.u32 %1, %3, %7, %5;"
       : "=r"(r.s0),
         "=r"(r.s1)
       : "r"(a.s0),
         "r"(a.s1),
         "r"(t.s0),
         "r"(t.s1),
-        "r"(32 - n),
-        "r"(n));
+        "r"(n),
+        "r"(1 << (32 - n)));
 
   #elif VECT_SIZE == 4
 
-  asm ("\n"
-       "shl.b32  %8,  %4, %12;\n"
-       "shl.b32  %9,  %5, %12;\n"
-       "shl.b32 %10,  %6, %12;\n"
-       "shl.b32 %11,  %7, %12;\n"
-       "shr.b32  %0,  %4, %13;\n"
-       "shr.b32  %1,  %5, %13;\n"
-       "shr.b32  %2,  %6, %13;\n"
-       "shr.b32  %3,  %7, %13;\n"
-       "add.u32  %0,  %0,  %8;\n"
-       "add.u32  %1,  %1,  %9;\n"
-       "add.u32  %2,  %2, %10;\n"
-       "add.u32  %3,  %3, %11;\n"
+  asm ("shr.b32 %8,  %4, %12;\n"
+       "shr.b32 %9,  %5, %12;\n"
+       "shr.b32 %10, %6, %12;\n"
+       "shr.b32 %11, %7, %12;\n"
+       "mad.lo.u32 %0, %4, %13, %8;\n"
+       "mad.lo.u32 %1, %5, %13, %9;\n"
+       "mad.lo.u32 %2, %6, %13, %10;\n"
+       "mad.lo.u32 %3, %7, %13, %11;\n"
       : "=r"(r.s0),
         "=r"(r.s1),
         "=r"(r.s2),
@@ -402,8 +394,8 @@ inline u32x rotr32 (const u32x a, const u32 n)
         "r"(t.s1),
         "r"(t.s2),
         "r"(t.s3),
-        "r"(32 - n),
-        "r"(n));
+        "r"(n),
+        "r"(1 << (32 - n)));
 
   #else