From 89dcaeb76d155705dc30a9289b5e83d54c1eeb06 Mon Sep 17 00:00:00 2001 From: jsteube Date: Sat, 7 May 2016 23:51:37 +0200 Subject: [PATCH] Replace SHL+ADD with MAD --- OpenCL/types_ocl.c | 40 ++++++++++++++++------------------------ 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/OpenCL/types_ocl.c b/OpenCL/types_ocl.c index fe7bb1c..0f5790e 100644 --- a/OpenCL/types_ocl.c +++ b/OpenCL/types_ocl.c @@ -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 -- 2.25.1