I’ve a problem with the “<<” operator (left shift).
Somewhere in my code there is the following define:
#define ROL64(a, offset) ((offset != 0) ? ((((UINT64)a) << offset) ^ (((UINT64)a) >> (64-offset))) : a)
When I try to compile my program I obtain a very strange error:
### Assertion failure at line 1923 of ../../be/cg/cgemit.cxx:
### Compiler Error in file /tmp/tmpxft_000022e5_00000000-7_kernel.cpp3.i during Assembly phase:
### incorrect register class for operand 1
nvopencc INTERNAL ERROR: /opt/cuda/open64/lib//be returned non-zero status 1
This error disappears if, instead of using the “<<”, I use the “>>” (right shift). I do not understand this behavior. By now I’m using the following “trick”
#define ROL64(a, offset) ((offset != 0) ? ((((UINT64)a) >> (0-offset)) ^ (((UINT64)a) >> (64-offset))) : a)
but I’m not sure this has the expected behavior.
Any Ideas?