How can I bind a local variable to AVR's rXX register?
The conventional way to achieve what you want is to hand code the delay subroutine in the native assembly language. Almost all development tool sets that are C compilers will have the capability to include assembly language modules into the build. 

A common trick used by experienced programmers is to first build the delay routine in C code as you have done. Then by looking at the compiled machine code you get a template of how to write the same routine in assembler code and then permitting you to optimize the critical sections. The advantage of this approach is that the compiler nicely "shows you how" to setup the entry and exit to/from the subroutine to be compatible with being called from the main C code.