Doesnt look like you are using real gaussian weights, so itīs actually not a gaussian-blur. Also Joozey is right, the blur should be non-directional.
Another thing: using something like '#define HARD' instead of 'if(hard)' is smarter and faster.