In a situation where you have a way to define a macro (but no repeat), I've found this kind of thing to be a relatively straightforward / low risk of error way to unroll loops:
Code:
.macro THING index
; loop iteration here
.endmacro
THING 0
THING 1
THING 2
THING 3
THING 4
THING 5
; ...
Mostly this has come up for me in C or C++ cases where I knew an unroll was warranted but the compiler's optimizer wasn't going to do it on its own. (In a lot of cases just writing a for loop with a simple static range is enough to get the optimizer to unroll anyway, though. This is not something I've had to use frequently at all.)