We need to use a 64-bit type in 64-bit mode so a 64-bit register will get used in the generated assembly. I've also changed the constraints to just use "r" intead of "q". "q" forces to a only an a/b/c/d register in 32-bit mode, but I see no reason that would matter here. Still not sure why in 32-bit mode one uses long and the other uses int, but I'm just going to leave that alone.
Fixes Nico's note in PR19301 over 4 years ago.