Context
I'm implementing a new programming language which has two primitive types: hashes and ints. Hashes will be used to index symbolic data (think hash-consing) while the ints will be standard arithmetic ints. I'd like to have a representation where a value is always represented in a 64 bit machine word and use one bit to distinguish between whether it's a hash or an int. The language will therefore use 63 bit arithmetic for ints and I'd like to use a 63 bit hashing algorithm for the hashes.
I could clearly just mask one bit after hashing values. But hashes will be combined and hashed again as part of modifying the symbolic data and I'm afraid of weakening the hashing algorithm by doing so and increase the risk of collisions. I don't need cryptographic quality hashes but I also don't want to unnecessarily weaken the hashes either.