#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),
"r"(t.s1),
"r"(t.s2),
"r"(t.s3),
- "r"(32 - n),
- "r"(n));
+ "r"(n),
+ "r"(1 << (32 - n)));
#else