Update: Added 1onevvolf's idea for shuffle() + vstore() instead of branchy array output. Use -vs to use it.
Benchmarks using it on SDK 2.6, with my 5850 at 765/1000 stock, without on the left, with on the right, uint3 does not work with shuffle+vstore.
-w 64
-v 1 245 245
-v 2 280 280
-v 3 214 xxx
-v 4 245 275
-v 8 222 163
-v 1,1 255 255
-v 2,2 233 233
-v 3,3 180 xxx
-v 4,4 221 163
-v 1,1,1 219 219
-v 2,2,2 260 230
-v 3,3,3 136 xxx
-v 4,4,4 163 109
-v 1,1,1,1 211 211
-v 2,2,2,2 211 261
-w 128
-v 1 245 245
-v 2 285 283
-v 3 222 xxx
-v 4 251 233
-v 1,1 258 258
-v 2,2 239 241
-v 3,3 180 xxx
-v 4,4 221 120
-v 1,1,1 247 247
-v 2,2,2 221 228
-v 3,3,3 99 xxx
-v 4,4,4 120 107
-v 1,1,1,1 221 221
-v 2,2,2,2 210 221
-w 192
-v 1 244 244
-v 2 281 279
-v 3 234 xxx
-v 4 263 184
-v 1,1 255 255
-v 2,2 252 252
-v 3,3 142 xxx
-v 4,4 174 161
-v 1,1,1 245 245
-v 2,2,2 175 236
-w 256
-v 1 245 245
-v 2 278 276
-v 3 206 xxx
-v 4 238 229
-v 1,1 255 255
-v 2,2 225 226
-v 3,3 180 xxx
-v 4,4 219 211
-v 1,1,1 241 241
-v 2,2,2 218 205
-v 2 -w 128 without -a and -vs is still the fastest on SDK 2.6 at 285 mhash. In comparison, the same on SDK 2.1 does 314, and the same on SDK 2.5 does 305.
Goddamnit 2.6.