I use r0:r15 for 32 bit reg references, g0:g15 for 64 bit reg references.
Where the instruction references, or sets, bits 0:31 of a 64 bit reg, I use the appropriate "gn" symbolic to identify the register, else I use the appropriate "rn" symbolic.
For the assembler to "police" this in some way I'd imagine having a set of 32 directives like:
g0 gpr64 0
g1 gpr64 1
..
r0 gpr32 0
r1 gpr32 1
..
which would both define the symbols -and- authorise the assembler to issue a warning message if, for example, it found a "gpr32" symbolic used where an instruction operand references a 64 bit reg.
Cheers,
Graeme G.