unaligned atomicAdd on signed shorts


I’m doing some crazy bit tricks to save shared memory in my kernels and need to atomically add signed short integers (stored in shared memory, packed into an array of unsigned ints). For unsigned shorts, I can simply mask out the upper/lower 16-bit part and do an atomicAdd on the 32-bit quantities. Unfortunately for signed shorts, if I atomically add the lower 16 bits as unsigned ints, the overflow will corrupt the upper 16 bits. Does atomicAdd work on unaligned addresses?