Another thing to be wary of about 64-bit is memory usage. 64 bit integers take up twice the space of 32 bit ones.
...Whoa.
64-bit integers are a data type; a variable.
Variables are assigned in code, and when compiled do not change type (most of the time).
Changing from a 32-bit system to a 64-bit system changes your hardware and thusly the way the software needs to interact. The requirement of what the software wants to accomplish does not change.
Programs do not, will not, and have absolutely no reason, to change a 32-bit integer into a 64-bit integer when changing from a 32-bit system to a 64-bit system.
As someone who already mentioned this general concept, I'd like to ask about memory pointers. Even when the programmer doesn't explicitly use pointers, I'm betting the compiler will introduce a significant amount of its own to manage almost any complex data structure that the programmer didn't implement at assembler-level himself. There are optimisations, but it's likely to be much the same as the case of however the programmer styles the variables, it's the compiler that has the last say. It may either 'optimise' the data into padded 64-bit structures for easy shifting around or introduce a multi-step process (albeit that the speed hit may even be as low-level as at the microcode level, depending on what the chip architecture allows, and more efficient for all that) to pack multiple.
I'm not saying that booleans will still take up a 64-bit space in memory, and depacking them from either 32-bit or 64-bit conglomerate structures might well give nearly the same overheads (if it doesn't just XOR on the appropriate bit, but there are more and less efficient ways of doing that) but everything from ints on up do not get guaranteed improvement from being stored within a 64-bit environment.
I remember a number of arguments from the time of Win32, although that was a very different beast of change, as I recall so I won't reiterate them here 16-bit (and 8-bit before that) was probably the environment that I last seriously did large-scale (comparative to the time) assembly programming, and I tended to abandon the low-level stuff about the same time as 32s came about. Since then I've been mostly at the mercy of compilers, although I do sometimes disassemble them to see what I derive. Have to admit I've not tried compiling for 64-bit and disassembling that, so my main argument contains received wisdom (or otherwise) and personal speculation rather than experience through yours truly's very own eyeballs. But it also checks out with sources I've wandered over and had a look at when my mind was drawn that way, previously.
(Although, speaking of compilers, I've also made a 2-bit environment emulator. Two-bit. Repeating that in words, just in case you thought I'd typoed something, there. To be fair, it's more properly a multiple of two-bit segments, but each of the just four commands/operators/instructions with which it is blessed is defined by one of the four possible 2-bit 'instruction' states, the operands then following in a similar manner to quadword data on <64-bit systems (but is tuned to a fixed multiple of 2-bits appropriate to the size of the 'memory core' of that implementation). And in my preferred set-up it contains a particularly interesting tweak to enable complete instructions to be an exact multiple of "2N-bit"-sized slots. It's not a little esoteric (also very good code-fodder for a darwinian code evolver, as well as allowing self-modification of instruction as well as data), but probably could be implemented on non-IC (or very basically IC-based) circuitry, if brought out of the computer and put onto a real-world device.)